繁体   English   中英

php 内的表达式引擎标签

[英]Expressionengine tags inside php

在启用了 php 解析的表达式引擎中,

如果我执行以下操作,它会起作用并且我会显示用户名。 登录用户是管理员。 所以它呼应了管理员。

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

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

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

我建议编写一个接受登录用户名作为参数的快速插件,然后你的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}"}

表达式引擎是一个模板引擎。 它几乎可以肯定会缓冲 output 然后替换它,这就是为什么这将适用于echo但不适用于函数。

我不是 EE 方面的专家,但这样的事情可能会奏效:

$name = get_instance()->TMPL->fetch_param('username', '');
mkdir(escapeshellarg($name));

关键是您需要得到 EE 的返回来解释它,而不仅仅是传递原始文本。

如果你不能轻易得到EE的回报,你也可以使用ob_start()来捕捉output。 例如:

function mkdir_obcb($dir) {
    mkdir(escapeshellarg($dir));
    return '';
}

ob_start('mkdir_obcb');
echo '{username}';
ob_end_clean();

还要注意我使用escapeshellarg()来降低攻击风险。

您可能需要在 CP 模板管理器的模板首选项中将“PHP Parsing Stage”设置为“输出”,因为 PHP 在表达式引擎呈现 ee 标签后执行。

您是否可以设置它以便在 EE 标签之前解析您的 PHP? 您不仅需要设置允许 php 解析,还需要设置它发生的顺序。

http://expressionengine.com/user_guide/templates/php_templates.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM