Hola,
Ya he resuelto el tema y aquí os dejo la solución por si le pudiera ayudar a alguien. No soy una experta de smarty así que no se si ésta ha sido la mejor manera de crear un while, pero como me funciona... jeje
En la función
_compile_tag de la clase de smarty
Smarty_Compiler.class.php he añadido el siquiente código en el switch:
Código PHP:
switch ($tag_command) {
case 'include':
return $this->_compile_include_tag($tag_args);
................
case 'while':
$this->_push_tag('while');
$res = $this->_compile_if_tag($tag_args);
preg_match("/<\?php if (.*): \?>/",$res,$token);
return "<?php while " . $token[1] . " { ?>";
case '/while':
$_open_tag = $this->_pop_tag('while');
return "<?php }?>";
............
}
Una vez añadido el nuevo tag a smarty su utilización en el template es la siguiente:
Código PHP:
{assign var="cont" value="1"}
{while ($cont <= 5)}
<br />hola {$cont}
{assign var="cont" value=$cont+1}
{/while}
Sólo he hecho un par de pruebas simples pero confío que funcione para otras más complicadas.
Espero que pueda ser de ayuda.
Saludos!!