В expressionengine с включенным php-синтаксисом,
если я делаю следующее, он работает, и я получаю отображаемое имя пользователя. зарегистрированный пользователь – admin. Так что это echos вне admin.
<?php $x = '{username}'; echo $x; ?>
Однако, если я делаю следующее и использую функцию {имя_пользователя} insde mkdir()
, то это не сработает. Созданный каталог будет иметь имя {username}
вместо администратора. Почему это происходит.
<?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}"}
.
Двигатель выражения – это шаблонный двигатель. Он почти наверняка буферизует вывод, а затем заменяет его, поэтому он будет работать с 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.