ExpressionEngine теги внутри PHP - PullRequest
1 голос
/ 30 мая 2011

В экспресс-движке с включенным анализом php,

Если я сделаю следующее, это сработает, и я получу отображаемое имя пользователя. авторизованный пользователь является администратором. Так что это отголосок админа.

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

Однако, если я сделаю следующее и использую тег {username} insde mkdir(), он не будет работать. Созданный каталог будет иметь имя {username} вместо admin. Почему это происходит?

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

Ответы [ 4 ]

2 голосов
/ 31 мая 2011

Я бы предложил написать быстрый плагин , который принимает зарегистрированное имя пользователя в качестве параметра, а затем 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 голос
/ 30 мая 2011

Expression Engine - это шаблонизатор. Он почти наверняка буферизирует вывод, а затем заменяет его, поэтому он будет работать с echo, но не с функциями.

Я не эксперт по ЭЭ, но что-то вроде этого может сработать:

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

Суть в том, что вам нужно получить результат интерпретации EE, а не просто передать необработанный текст.

Вы также можете использовать ob_start() для захвата выходных данных, если вы не можете легко получить возврат EE. Например:

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

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

Обратите внимание также на мое использование escapeshellarg() для снижения риска атаки.

0 голосов
/ 15 июля 2013

Вам может потребоваться установить для «PHP Parsing Stage» значение «output» в настройках вашего шаблона в CP Template Manager, потому что тогда PHP выполняется после того, как механизм выражения обработал теги ee.

0 голосов
/ 30 мая 2011

Возможно ли, что он настроен так, что ваш PHP анализируется перед тегами EE? Вам нужно не только установить, что нужно разбирать php, но и в каком порядке это происходит.

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

...