[英]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.