在启用了php解析的expressionengine中,
如果我执行以下操作,它可以工作,我会显示用户名。登录用户是admin。所以它回应了管理员。
<?php
$x = '{username}';
echo $x;
?>
但是,如果我执行以下操作并使用{username}标记insde mkdir()
函数,则它不起作用。创建的目录将使用名称{username}
而不是admin。为什么会这样。
<?php
$x = '{username}';
mkdir($x);
?>
答案 0 :(得分:2)
我建议编写一个快速plugin,将接受登录的用户名作为参数,然后让mkdir()
在插件中运行。
class Make_directory
{
var return_data = '';
function __construct()
{
$this->EE =& get_instance();
$username = $this->EE->TMPL->fetch_param('username', FALSE);
if($username != FALSE)
{
$dir = mkdir(escapeshellarg($username));
}
$this->return_data = $dir;
}
插件还有更多内容,但这是它的内容。然后将其称为{exp:make_directory username="{logged_in_username}"}
。
答案 1 :(得分:1)
表达式引擎是模板引擎。几乎可以肯定缓冲输出然后替换它,这就是为什么这将适用于echo
而不是函数。
我不是EE的专家,但这样的事情可能有用:
$name = get_instance()->TMPL->fetch_param('username', '');
mkdir(escapeshellarg($name));
重点是你需要获得EE解释的回报,而不仅仅是传递原始文本。
如果您无法轻易获得EE的回报,也可以使用ob_start()
来捕获输出。例如:
function mkdir_obcb($dir) {
mkdir(escapeshellarg($dir));
return '';
}
ob_start('mkdir_obcb');
echo '{username}';
ob_end_clean();
另请注意我使用escapeshellarg()
来降低攻击风险。
答案 2 :(得分:0)
是否可以设置它以便在EE标记之前解析PHP?你不仅需要设置允许php解析,还要设置它的顺序。
http://expressionengine.com/user_guide/templates/php_templates.html
答案 3 :(得分:0)
您可能需要在CP模板管理器中的模板首选项中将“PHP解析阶段”设置为“输出”,因为PHP会在表达式引擎呈现ee标记后执行。