Теги Expressionengine внутри php

В expressionengine с включенным php-синтаксисом,

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

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

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

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

Related of "Теги Expressionengine внутри php"

Я бы посоветовал написать быстрый плагин, который принимает имя пользователя вошедшего в систему как параметр, а затем ваш 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}"} .

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

Я не специалист в EE, но что-то вроде этого может работать:

 $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() для снижения риска атаки.

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

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

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