Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Función de bloque de Smarty

Estas en el tema de Función de bloque de Smarty en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola, Estoy haciendo una función de bloque con Smarty, yo pensaba que ya las había entendido pero por lo visto no es así Os pongo ...
  #1 (permalink)  
Antiguo 11/12/2009, 14:30
Avatar de SUSMO  
Fecha de Ingreso: abril-2008
Ubicación: Barcelona
Mensajes: 188
Antigüedad: 16 años
Puntos: 0
Función de bloque de Smarty

Hola,

Estoy haciendo una función de bloque con Smarty, yo pensaba que ya las había entendido pero por lo visto no es así

Os pongo los códigos y os explico.

En el template tengo lo siguiente:
Código PHP:
Ver original
  1. {formSelectForms}
  2.     {formFormValue}
  3.     <br>
  4. {/formSelectForms}

La función de bloque formSelectForms obtiene los registros de una consulta de la base de datos y los guarda en un array que es una variable de la clase donde está implementada la función (esto lo hace sin problema), y la función formFormValue me debe mostrar el valor de cada registro en cada iteración del bucle.

El código de formSelectForms:
Código PHP:
Ver original
  1. function _blockSelectForms($params, $content, & $smarty, & $repeat)
  2. {
  3.         if ($content === null)
  4.         {
  5.               // Primera vez que entra
  6.               $this->_formsList = array();
  7.               $this->_formsList = $this->_forms->listAllForms(true,$onlyPublic);
  8.  
  9.               echo "<br>null content<br>";            
  10.         }
  11.         else
  12.         {
  13.                 //A partir de la segunda "vuelta"
  14.             //Extrae el primer elemento del array.
  15.             $form = array_shift($this->_formsList);
  16.             $this->_currentFormId = $form["tx_id"];
  17.             $this->_currentForm = $form["fieldsInfo"];
  18.        
  19.                 echo "<br>entra no null-> ".$this->_currentFormId;
  20.         }
  21.  
  22.         if (count($this->_formsList) > 0)
  23.             $repeat = true;
  24.         else
  25.             $repeat = false;      
  26.  
  27.         return $content;
  28. }

Función formFormValue:
Código PHP:
Ver original
  1. function _funcFormValue($params, & $smarty)
  2. {
  3.      echo "<br> <br>entra 2 -> ";
  4.      var_dump($this->_currentFormId);  
  5.      echo " count ".count($this->_formsList);
  6. }

El problema es que la primera vez que entra en la función de bloque una vez obtenido los registros y extrae el primer elemento del array $this->_currentFormId tiene el valor correcto pero en cambio en la función de formFormValue que se ejecuta immediatamente después es nulo, en la segunda vuelta en la función de bloque $this->_currentFormId sigue teniendo el valor que le toca, es decir, el identificador del registro actual, pero en la función formFormValue muestra el identificador anterior, es decir, el que debería haber mostrado en lugar de nulo la primera vuelta. A causa de esto, el bucle me muestra un registro menos del que debería y no se porque.

Os dejo los prints que me ha hecho en el template:
Código PHP:
Ver original
  1. null content
  2.  
  3. entra no null-> 4
  4.  
  5. entra 2 -> NULL count 6
  6.  
  7. entra no null-> 5
  8.  
  9. entra 2 -> string(1) "4" count 5
  10.  
  11. entra no null-> 6
  12.  
  13. entra 2 -> string(1) "5" count 4
  14.  
  15. entra no null-> 3
  16.  
  17. entra 2 -> string(1) "6" count 3
  18.  
  19. entra no null-> 2
  20.  
  21. entra 2 -> string(1) "3" count 2
  22.  
  23. entra no null-> 11
  24.  
  25. entra 2 -> string(1) "2" count 1

Al ir un elemento del array atrasado en la función formFormValue el último registro con identificador 11 no lo muestra.

He estado leyendo el manual de Smarty y por lo que he entendido lo he hecho bien así que no se por que no hace lo que tiene que hacer (bendito mundo el de la informática XD)
Espero haberme explicado con claridad y que alguien pueda ayudarme, ya sea a entender mejor las funciones de bloque o a ver que estoy haciendo mal.

Gracias por adelantado
__________________
Perdida en el mundo del conocimiento
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:22.