php中的Expressionengine标签

时间:2011-05-30 02:41:40

标签: php expressionengine

在启用了php解析的expressionengine中,

如果我执行以下操作,它可以工作,我会显示用户名。登录用户是admin。所以它回应了管理员。

<?php
  $x = '{username}';
  echo $x;
?>

但是,如果我执行以下操作并使用{username}标记insde mkdir()函数,则它不起作用。创建的目录将使用名称{username}而不是admin。为什么会这样。

<?php
  $x = '{username}';
  mkdir($x);
?>

4 个答案:

答案 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标记后执行。