He encontrado maneras de utilizar algo de php en criterios de bucles. No se
puede hacer todo, ni es muy elegante, pero...
Date: Sat, 21 Feb 2004 12:09:48 +0100
A las buenas. Mi problema es...
Puedo hacer funcionar algo así:{id_document=<? echo $docu ?>}
¿Cómo?
La forma de establecer un criterio de un bucle inferior desde un baliza
previa sería:
En mes_fonctions.php3:
function set_var_entorno($text, $var, &$contexte) {
$contexte["$var"] = "$text";
return;
}
En el esqueleto, (sin que importe la profundidad del bucle donde se utiliza
el criterio):
<BOUCLE_forum(FORUMS) {id_article}...>
...
[(#ID_FORUM|set_var_entorno{'nombre_variable', $contexte})]
<BOUCLE_discusion(FORUMS)...>
....
<BOUCLE_respuestas(FORUMS) {id_forum=$nombre_variable}...>
....
</BOUCLE_respuestas>
....
</BOUCLE_discusion>
</BOUCLE_forum>
Pero esto no sirve para elevar variables de un bucle inferior a otro
superior, ya que los cambios de contexto se pierden con el fin del bucle en
cuestión, con lo que dichos cambios no son visibles a nivel superior.
Para poder hacer esto haria falta:
En mes_fonctions.php3:
function set_var_global($text, $var) {
global $contexto;
$contexto["$var"] = "$text";
return;
}
function echo_var_global($void, $var) {
global $contexto;
return $contexto["$var"];
}
function set_var_entorno($text, $var, &$contexte) {
$contexte["$var"] = "$text";
return;
}
En el esqueleto (ver que funciona para bucles inferiores, aunque sean
recursivos):
<BOUCLE_forum(FORUMS) {id_article}...>
....
En este ejemplo vamos a encontrar el mensaje raiz en un foro del que es
respuesta el mensaje actual
[(#ID_FORUM|set_var_global{'top'})]
<BOUCLE_top(FORUMS) {id_enfant}>
[(#ID_FORUM|set_var_global{'top'})]
<BOUCLE_ascendente(boucle_top)>
</BOUCLE_ascendente>
</BOUCLE_top>
Notar que aquí el #ID_FORUM no sirve realmente para nada, pero hace
falta alguna baliza para que funcionen los filtros
[(#ID_FORUM|echo_var_global{'top'}|set_var_entorno{'top', $contexte})]
<BOUCLE_discusion(FORUMS){id_forum=$top}...>
...
</BOUCLE_discusion>
</BOUCLE_forum>
Para otro tipo de necesidades habría que ver como hacerlo, pero teniendo en
cuenta que los codigos php incrustrados <?php ... ?> se ejecutan en una
pagina de cache en la que todo lo demás es HTML puro (lo generado por SPIP
en tiempo de actualización de cache), y todo lo que pongamos en
mes_fonctions.php3 solo se ejecuta en dichas actualizaciones sin poder
interactuar con el php incrustrado (¡que yo sepa!)
Saludos
JMSE