Declarar una matriu i recuperar-ne els valors
- #SET{mon_tableau, #ARRAY{cle1,valeur1,cle2,valeur2}}
crea la variable mon_tableau i li assigna una matriu PHP com a valor, que es podria representar d’aquesta manera:
Claus | Valors |
---|---|
cle1 | valeur1 |
cle2 | valeur2 |
No és necessari envoltar les cadenes de caràcters amb cometes simples o dobles, excepte quan vulguem especificar una cadena buida que escriurem ’’
- Amb finalitats de proves, podem visualitzar la matriu gràcies al filtre |foreach
.
[(#GET{mon_tableau}|foreach)]
mostrarà:
- cle1=> valeur1
- cle2=> valeur2
- El valor associat a una clau determinada es pot recuperar utilitzant el filtre |table_valeur
:
[(#GET{mon_tableau}|table_valeur{cle1})]
retorna valeur1.
- Verificar la presència d’un valor a la matriu amb el filtre |find
[2]:
[(#GET{mon_tableau}|find{valeur2}|oui)
Ceci s'affiche si la valeur est dans le tableau.
]
Omplir una matriu dinàmicament
Un interès de les taules és la d’omplir-les dinàmicament, pels resultats d’un o diversos bucle(s).
Llavors, la matriu s’ha de declarar per un #SET
abans del bucle: #SET{mon_tableau,#ARRAY}
En el bucle, un nou #SET
redefineix mon_tableau a cada iteració: el recuperem per #GET
i s’hi afegeix un nou valor gràcies als filtres |push
o |array_merge
.
#SET{mon_tableau,#ARRAY}
<BOUCLE(...)>
#SET{mon_tableau, #GET{mon_tableau}|push{#COMPTEUR_BOUCLE}}
</BOUCLE>
L’ordre dels valors de la matriu dependrà dels criteris d’ordre del bucle.
- |push
afegeix simplement un valor al final de la matriu. La clau s’indexa automàticament: s’incrementa d’1 a cada repetició del bucle i i aquest, a partir de 0 (la primera clau és 0, després 1, 2, 3,...).
Exemple: crear una matriu mots_choisis que continguin les #ID_MOT de totes les paraules clau lligades a un article.
#SET{mots_choisis, #ARRAY}
<BOUCLE_themes(MOTS){id_article}>
#SET{mots_choisis, #GET{mots_choisis}|push{#ID_MOT}}
</BOUCLE_themes>
Si les paraules lligades a aquest article tenen els números 4, 9 i 18, [(#GET{mots_choisis}|foreach)]
retourne :
- 0=>4
- 1=>9
- 2=>18
Fixeu-vos bé que [(#GET{mots_choisis}|table_valeur{2})]
retorna 18, el valor associat a la clau 2, per tant el tercer valor de la matriu.
- |array_merge
afegeix un parell clau/valor al final de la matriu. Això permet, per tant, forçar el "nom" de les claus.
Alerta (1): si una clau apareix diverses vegades, només es retindrà l’últim valor d’aquesta clau.
Alerta (2): la clau que es vol forçar no pot ser de tipus numèric. En efecte, la documentació d’array_merge
precisa:
Si passeu una sola matriu a aquesta funció i hi ha índexs numèrics, les claus seran tornades a indexar normalment.
Hi ha dues solucions a aquesta limitació:
- prefixar aquesta clau amb un valor alfabètic:
#SET{mots_choisis, #ARRAY}
<BOUCLE_themes(MOTS) {id_article}>
[(#SET{mots_choisis,
#GET{mots_choisis}|array_merge{#ARRAY{
mot#ID_MOT, #TITRE
}}
})]
</BOUCLE_themes>
[(#GET{mots_choisis}|foreach)]
retorna:
- mot4=>Poma
- mot9=>Plàtan
- mot18=>Pastanaga
- invertir clau i valor, amb la condició que valor no sigui numèric:
#SET{mots_choisis, #ARRAY}
<BOUCLE_themes(MOTS) {id_article}>
[(#SET{mots_choisis,
#GET{mots_choisis}|array_merge{#ARRAY{
#TITRE, #ID_MOT
}}
})]
</BOUCLE_themes>
[(#GET{mots_choisis}|foreach)]
retorna:
- Poma=>4
- Plàtan=>9
- Pastanaga=>18
En aquest cas, podrem aplica la funció PHP |array_flip
com a filtre a aquesta matriu final (desprès del bucle):
[(#SET{mots_choisis, #GET{mots_choisis}|array_flip})]
[(#GET{mots_choisis}|foreach)]
retorna llavors:
- 4=>Poma
- 9=>Plàtan
- 18=>Pastanaga
Utilitzar la matriu a dins d’un bucle amb l’operador IN
Tornem a agafar la matriu mots_choisis que conté #ID_MOT, a continuació es pot seleccionar els articles lligats a les mateixes paraules clau que el nostre article inicial gràcies al criteri IN
.
#SET{mots_choisis, #ARRAY}
<BOUCLE_themes(MOTS){id_article}>
#SET{mots_choisis, #GET{mots_choisis}|push{#ID_MOT}}
</BOUCLE_themes>
<BOUCLE_memes_themes(ARTICLES) {id_mot IN #GET{mots_choisis}}>
#TITRE <br />
</BOUCLE_memes_themes>
Aquest ús té múltiples usos, sobretot quan es vol seleccionar objectes amb l’ajuda de diversos criteris que no poden formar part del mateix bucle, per barrejar-los després entre ells amb un criteri de selecció únic.
Exemples d’ús de les taules
- Visualització condicional en funció de la pàgina (valor de #ENV{page}
) :
[(#ENV{page}|in_array{#ARRAY{0,article,1,secció,2,lloc}}|si)
Visualització condicional: la pàgina és la d'un article, d'una secció o d'un lloc. ]
- Visualització condicional en funció d’una variable passada a l’URL [3] :
<BOUCLE_tous_les_mots(MOTS){par titre}{", "}>
<a href="[(#SELF|parametre_url{lolo,#ID_MOT})]">#TITRE</a>
</BOUCLE_tous_les_mots>
#SET{les_mots, #ARRAY}
<BOUCLE_certains_mots(MOTS){id_article}>
#SET{les_mots, #GET{les_mots}|push{#ID_MOT}}
</BOUCLE_certains_mots>
[<br />Això mostrarà si el valor de la variable 'lolo' passada a l'url és a la matriu 'les_mots' declarada i omplerta anteriorment.
(#ENV{lolo}|in_any{#GET{les_mots}}|si)]
- Seleccionar els articles d’una secció i tots aquells que es puguin trobar arreu associats a una paraula clau i després llistar tots aquests articles per data.
#SET{les_articles,#ARRAY}
<BOUCLE_articles_rubrique(ARTICLES){id_rubrique}>
#SET{les_articles,#GET{les_articles}|push{#ID_ARTICLE}}
</BOUCLE_articles_rubrique>
<BOUCLE_articles_mot(ARTICLES){id_mot}>
#SET{les_articles,#GET{les_articles}|push{#ID_ARTICLE}}
</BOUCLE_articles_mot>
<BOUCLE_affiche(ARTICLES){id_article IN #GET{les_articles}}{par date}>
<br />#TITRE
</BOUCLE_affiche>