New question

Question:

Date: 19-02-2015 07:41:01 (In Spanish)

Variables en smarty[Resolved]

Hola buenas a todos. Como motor de plantillas utilizo el smarty como quizás gran parte de ustedes. Como saben para crear una variable en smarty se pone:

$nombre="pepe";
smarty->assign("nombre", $nombre);


Ahora bien, generalmente pongo el mismo nombre a la variable smarty que la variable que tenía el valor, como en el ejemplo anterior. Entonces quería saber si hay alguna forma en smarty de pasar somamente la variable con el valor, y que smarty automáticamente cree una variable con el mismo nombre de la variable que le paso con valor. La idea sería que en lugar de poner el código anterior puedo poner esto:

$nombre="pepe";
smarty->assign($nombre);


Y cuando en la plantilla cuando necesito acceder al valor de la variable poder poner {$nombre}.

De antemano muchas gracias.
Tags: Library - PHP - Question - Smarty - Templates - Variables Votes: 1 - Answers: 3 - Views: 12 Share on: Google Facebook Twitter LinkedIn Link
 

Answers:

  • Date: 19-02-2015 08:59:38 Hola Jaime, no creo que eso sea posible, porque PHP no tiene forma de ver cual es el nombre de la variable que le pasaste al método/función.

    Aquí tienes la documentación del método assign(): http://www.smarty.net/docs/en/api.assign.tpl

    Haciendo unas pruebas con PHP podras ver que lo máximo que puedes obtener es un array autoindexado de forma dinámica por medio de la función func_get_args()

    <?php
    function hacerAlgo(){
        $args = func_get_args();
        print_r($args);
    }
    
    $nombre = 'Fernando';
    hacerAlgo($nombre);
    //resultado: Array ( [0] => Fernando ) 
    ?>


    Lo que tu estas necesitando es tener algo como func_get_args() que permita pasar un parametro "ASSOC" y que devuelva un array asociativo en vez de indexado.

    También podes intentar hacer alguna triquiñuela con get_defined_vars() , pero solo te dará el nombre del parametro declarado en la definición de la función (no el nombre de la variable que contenía el valor pasado).

    <?php
    function hacerAlgo($nombre){
        print_r(get_defined_vars());
    }
    
    $variableGlogalNombre = 'Fernando';
    hacerAlgo($variableGlogalNombre);
    //resultado: Array ( [nombre] => Fernando ) 
    ?>


    En conclusión: el método assign() no tiene la funcionalidad que vos requeris, y por más que quieras hacer una sobreescritura del método con tu propia implementación no vas a poder lograr la funcionalidad ya que PHP no tiene una forma de devolverte el nombre del la variable original que contenia el dato pasado al método/función.

    Espero que mi respuesta te sea de ayuda.

    Saludos,
    Fernando
      Votes: 1 - Link answer
     
  • Date: 20-02-2015 05:48:01 Hola muchas gracias Fernando por tu respuesta, muy interesante en verdad. Vamos a ver si para la
    próxima versión de php implementan eso, jejeje.

    Saludos.
      Votes: 0 - Link answer
     
  • Date: 20-02-2015 07:36:35 Muchas gracias Jaime por tu reconocimiento. Si la respuesta te ha sido de ayuda, agradecería también que la votes positivamente.

    Muchas gracias.

    Saludos,
    Fernando
      Votes: 0 - Link answer
     
To actively participate in the community first must authenticate, enter the system.Sign In