Etiquetas de Expressionengine dentro de php

En expressionengine con php parse habilitado,

si hago lo siguiente, funciona y obtengo el nombre de usuario que se muestra. el usuario registrado es admin. Entonces echos a administrador.

 

Sin embargo, si hago lo siguiente y uso la etiqueta {username} insde mkdir() función, entonces no funciona. El directorio creado tendrá el nombre {username} lugar de admin. Por qué está pasando esto.

  

    Sugiero que escribas un complemento rápido que acepte el nombre de usuario registrado como parámetro, luego tu mkdir() funciona dentro del complemento.

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

    Hay más en el complemento, pero esa es la esencia de eso. Luego llámalo como {exp:make_directory username="{logged_in_username}"} .

    El motor de expresiones es un motor de plantillas. Es casi seguro que amortigua la producción y luego la reemplaza, razón por la cual esto funcionará con echo pero no con funciones.

    No soy un experto en EE, pero algo como esto podría funcionar:

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

    El punto es que necesita obtener el retorno de EE interpretándolo, en lugar de solo pasar el texto sin formato.

    También puede usar ob_start() para capturar el resultado si no puede obtener fácilmente el retorno de EE. Por ejemplo:

     function mkdir_obcb($dir) { mkdir(escapeshellarg($dir)); return ''; } ob_start('mkdir_obcb'); echo '{username}'; ob_end_clean(); 

    Tenga en cuenta también mi uso de escapeshellarg() para reducir el riesgo de ataque.

    ¿Es posible que lo haya configurado para que su PHP sea analizado antes de las tags EE? No solo es necesario configurar para permitir el análisis de php, sino también el orden en el que ocurre.

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

    Es posible que necesite establecer ‘PHP Parsing Stage’ en ‘output’ en las preferencias de su plantilla en el CP Template Manager, porque luego PHP se ejecuta después de que el motor de expresión represente las tags ee.