ESJ nous a fait un topo sur les entrailles du compilateur. Technique et ardu, je ne reproduis pas ici l’ensemble de ses propos, surtout que ça repose sur un schéma au tableau !...
Une application pratique
Utiliser une boucle sur une table mysql crée par l’utilisateur
Il n’est pas nécessaire de paramétrer quoi que ce soit.
Exemple :
vous créez une table contacts, avec les champs id_contact, nom, prenom, adresse au moyen de phpmyadmin ;
Vous pouvez ensuite dans vos squelettes directement utiliser des :
<BOUCLES_mescontacts(CONTACTS){nom=toto}>
#ID_CONTACT : #NOM : #PRENOM <br/>
</BOUCLES_mescontacts>
Cela marche parce que SPIP, ne connaisant pas la table contacts par défaut, va rechercher dans votre base mysql si elle existe. La trouvant, il va s’en servir, et associer automatiquement les balises #ID_CONTACT, #NOM, #PRENOM aux champs respectifs id_contact, nom, prenom.
Attention : l’utilisation de nom de champs majuscules peut poser des petits problèmes de compréhension par le compilateur. Il est donc prudent d’utiliser des noms de champs en minuscule.
Les Critères
Comme vu ci-dessus, les critères correspondant au nom des champs sont automatiquement supportés. Toutefois vous pouvez définir des critères personalisés pour répondre à d’autres besoins.
Ceci se fait au moyen d’une fonction critere_xxx
avec xxx le nom du critère
Exemple du critère origine_traduction :
// {origine_traduction}
// http://www.spip.net/@origine_traduction
function critere_origine_traduction_dist($idb, &$boucles, $crit) {
$boucle = &$boucles[$idb];
$boucle->where[] = $boucle->id_table.".id_trad = "
. $boucle->id_table . '.' . $boucle->primary;
}
Ce critère permet de rechercher les articles dont id_trad
correspond à l’id_article
du contexte de la boucle.
Pour cela, il rajoute une condition where a la requete sql qui sera génrée par la boucle, ceci se fait en ajoutant un élément au tableau $boucle->where :
$boucle->id_table.« .id_trad = ». $boucle->id_table . ’.’ . $boucle->primary ;
$boucle->id_table : le nom de la table
$boucle->primary : la clé primaire de la table, id_article ici
Et hop emballé c’est pesé !
Bonus !
Et même, _fil_ a ajouté une « feature » en live :
function critere_origine_traduction_dist($idb, &$boucles, $crit) {
$where = $boucle->id_table.".id_trad = "
. $boucle->id_table . '.' . $boucle->primary;
if ($crit->not)
$where = "NOT($where)";
$boucle->where[] = $where;
}
Pour supporter la syntaxe !id_trad
Voyez comme ça valait pas le coup de s’en priver !
Aucune discussion
Ajouter un commentaire
Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :
Merci d’avance pour les personnes qui vous aideront !
Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.
Suivre les commentaires : |