Prenons par exemple une table nommée ACTEURS , créée par l’instruction SQL ci-dessous :
- DROP TABLE IF EXISTS `acteurs`;
- CREATE TABLE `acteurs` (
- `id_acteur` BIGINT(20) NOT NULL AUTO_INCREMENT,
- `nom_acteur` VARCHAR(200) CHARACTER SET utf8 NOT NULL,
- `adresse` VARCHAR(250) CHARACTER SET utf8 NOT NULL COMMENT ’adresse’,
- `code_postal` VARCHAR(10) CHARACTER SET utf8 NOT NULL,
- `ville` VARCHAR(200) CHARACTER SET utf8 NOT NULL,
- `mobile` tinytext CHARACTER SET utf8 NOT NULL COMMENT ’mobile’,
- `role` text CHARACTER SET utf8 NOT NULL COMMENT ’ROLE’,
- `email` VARCHAR(250) CHARACTER SET utf8 NOT NULL COMMENT ’mail’,
- `maj` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
- PRIMARY KEY (`id_acteur`)
- ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
Cette table est donc connue sous le nom physique de acteurs
[1]. Rappelons que les Conventions dans les squelettes de BOUCLE SPIP organisent une équivalence pour les tables de la base de données, entre noms LOGIQUES
(majuscules, sans préfixe) et physiques
(en minuscules, avec le prefixe) !
Les explications de cette page seront limitées à des tables non-SPIP, mais présentes dans la même base de données utilisée par le SPIP courant, pour éviter les complexités introduites par de multiples fichiers de connexion.
Pour simplifier, on supposera aussi (cf.ci-dessous) que ces tables utilisent le prefix courant spip_
du SPIP installé.
Sans même déclarer la structure de votre table à SPIP, vous pouvez utiliser le mécanisme de squelettes pour visualiser le contenu par une boucle SQL : [2]
Visualiser une table externe
Vous pouvez tout simplement afficher un balayage de votre table en rajoutant la noisette suivante dans un squelette :
- <BOUCLE_simple(acteurs) {par nom_acteur} {!nom_acteur} >
- #ID_ACTEUR - <b>#NOM_ACTEUR</b> : #ADRESSE #MOBILE.<br />
- </BOUCLE_simple>
Dans ce code, nous avons spécifié le nom physique [3] de la table, et affiché quelques champs simplement en donnant leurs noms de balise de champ (écrit en Majuscules, précédés d’un dièse).
La seule particularité introduite, est d’avoir spécifié un critère de tri {par ....}
portant ici sur le champ #NOM_ACTEUR
pour obtenir une liste alphabétique, suivi d’un critère filtrant conditionnel, refusant les noms "vides" à null ou blanc.
Intégration au site
Intégrer une telle nouvelle page à votre site est facile, surtout si vous avec choisi de
TRAVAILLER en mode Z (ZPIP et Z-core) et le plugin Skeleditor :
il suffit de créer un squelette limité au contenu voulu, fichier texte que nous créons avec le nom ./contenu/page-acteurs.html
dans le sous-répertoire homonyme des squelettes.
pour faciliter l’utilisation, on peut déjà profiter des facilités de pagination et de tri [4], et rajouter une indentation de liste [5], avec un test de table vide, et meme prévoir un lien vers un squelette d’écran-formulaire de visualisation détaillée, à créer sous le nom ./contenu/page-acteur_edit.html
nommé .
- Une noisette complète pour visualiser une table ACTEURS
Déclarer des tables externes
Si vous avez essayé d’appliquer le code présenté ci-dessus, il faut remarquer une différence avec notre première boucle, en plus du changement de nom : cette fois-ci la table sur laquelle porte la boucle est écrite en MAJUSCULES, et sans le prefix physique qui caractérisait le nom ; c’est d’ailleurs la syntaxe classique de SPIP, qui permet de prendre en compte automatiquement le préfixe du jeu de tables.
Pour qu’une écriture de boucle puisse utiliser cette syntaxe logique, il faut déclarer la table à SPIP, soit lors de la création d’un plugin [6], ou très simplement en rajoutant une ligne dans mes_options : exemple.
code class="php">
<?php
Cette déclaration suppose une table physique nommée
// squelettes/mes_options.php
// déclarer la table $prefix_acteurs
$GLOBALS['table_des_tables']['acteurs']='acteurs';
// donner priorité à un dossier ./themes/perso
$GLOBALS['dossier_squelettes'] = 'themes/perso:squelettes';
// rajouter l'usage d'un dossier squelettes spécifique aux pages publiques
if (!_DIR_RACINE) {
$GLOBALS['dossier_squelettes'] .= ':squelettes/plng.sklt';
}
?>
spip_acteurs
utilisant le prefix courant, par défaut à spip_
.
N.B. Les deux autres instructions sont utilisées (réellement) pour
imposer un thème d’habillage graphique
et dédier les pages écrites dans cette gestion dans un sous-dossier spécifique des squelettes...
En pratique
Pour utiliser facilement l’affichage de tables externes, en plus de créer les squelettes (ou noisettes) voulus, il vous suffira donc de
donner le nom physique dans la zone de la BOUCLE
ou donner le nom logique en Majuscules,
en déclarant la table dans $GLOBALS['table_des_tables']['
nom_logique'] = '
nom_physique_sans prefixe';
.
La syntaxe est utilisée par trouver_table()
avec
if (isset($table_des_tables[$nom])) {
$nom = $table_des_tables[$nom];
$nom = "spip_$nom";
exprimant que la clé symbolique du nom logique est utilisée pour donner le nom physique avant préfixe.
Si vous passez par l’utilisation d’un plugin, la meme syntaxe est applicable, en déclarant vos nouvelles tables par une fonction (à déclarer dans le paquet.xml
pour le pipeline) dans la variable locale $table_des_tables
reçue, et retournée par votre fonction, au lieu d’appeler les $GLOBALS
.
Donc résumons : pour utiliser une autre table dans la meme base de données, soit :
donner dans la boucle, le nom physique de la table (réel, complet) en minuscules
indiquer un nom logique de table, en majuscules, à condition d’avoir déclaré
cette table logique dans la tale des tables...
Article publié le 11 janvier 2013, et actualisé en février 2019 .
Répondre à cet article