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
{formSelectForms} {formFormValue} <br> {/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
function _blockSelectForms($params, $content, & $smarty, & $repeat) { if ($content === null) { // Primera vez que entra $this->_formsList = $this->_forms->listAllForms(true,$onlyPublic); echo "<br>null content<br>"; } else { //A partir de la segunda "vuelta" //Extrae el primer elemento del array. $this->_currentFormId = $form["tx_id"]; $this->_currentForm = $form["fieldsInfo"]; echo "<br>entra no null-> ".$this->_currentFormId; } $repeat = true; else $repeat = false; return $content; }
Función formFormValue:
Código PHP:
Ver original
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
null content entra no null-> 4 entra no null-> 5 entra no null-> 6 entra no null-> 3 entra no null-> 2 entra no null-> 11
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