Expressionengine tags inside php

删除回忆录丶 提交于 2019-12-11 06:07:18

问题


In expressionengine with php parse enabled,

if i do the following, it works and i get the username displayed. logged in user is admin. So it echos out admin.

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

However if i do the following and use the{username} tag insde mkdir() function, then it doesn't work. The directory created will have the name {username} instead of admin. Why is this happening.

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

回答1:


I'd suggest writing a quick plugin that accepts the logged-in username as a parameter, then does your mkdir() work within the plugin.

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;
}

There's more to the plugin, but that's the guts of it. Then call it like {exp:make_directory username="{logged_in_username}"}.




回答2:


Expression engine is a templating engine. It almost certainly buffers output then replaces it, which is why this will work with echo but not functions.

I'm not an expert in EE, but something like this might work:

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

The point is you need to get the return of EE interpreting that, rather than just passing the raw text.

You can also use ob_start() to capture the output if you can't easily get EE's return. For example:

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

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

Note also my use of escapeshellarg() to reduce the risk of attack.




回答3:


Is it possible you have it set up so your PHP is being parsed before the EE tags? Not only do you need to set to allow php parsing but what order it happens in as well.

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




回答4:


You may need to set 'PHP Parsing Stage' to 'output' in the preferences of your template in the CP Template Manager, because then PHP executes after expression engine rendered the ee tags.



来源:https://stackoverflow.com/questions/6171828/expressionengine-tags-inside-php

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!