Ce pipeline permet de déclarer des tables ou des champs de tables supplémentaires à SPIP, en indiquant le type SQL de chaque champ, les clés primaires, les clés d’index, parfois des clés de jointures.
Ce pipeline concerne les tables dites « principales » qui contiennent du contenu éditorial, à comparer aux tables dites « auxiliaires » qui contiennent plutôt des tables de liaisons entre les tables principales.
Ces déclarations servent à SPIP pour :
-* gérer l’affichage des boucles (mais ce n’est pas indispensable car SPIP sait récupérer les descriptions d’une table même si elle n’est pas déclarée),
-* créer les tables (ou les champs manquants) à l’installation de SPIP ou d’un plugin,
-* prendre en compte ces tables et ces champs dans les sauvegardes et restaurations faites par le gestionnaire de sauvegarde de SPIP (les {dump}).
La fonction prend en paramètre la liste des tables déjà déclarées et doit retourner ce tableau. Ce tableau liste des tables avec pour chacune un tableau de 2 à 3 clés (
join
est optionnel) :
$tables_principales['spip_nom'] = array(
'field' => array('champ'=>'code sql de creation'),
'key' => array('type' => 'nom du/des champs'),
'join' => array('champ'=>'champ de liaison')
);
SPIP fait appel à ce pipeline lors de la déclaration des tables utilisées, dans le fichier
ecrire/base/serial.php.
Exemple
Le plugin « Agenda » déclare une table « spip_evenements » avec de nombreux champs. Il déclare la clé primaire (
id_evenement
), 3 index (
date_debut
,
date_fin
et
id_article
), ainsi que deux clés potentielles pour les jointures :
id_evenement
et
id_article
(je crois que l’ordre est important).
Ce plugin déclare aussi un champ "agenda" dans la table
spip_rubriques
.
function agenda_declarer_tables_principales($tables_principales){
//-- Table EVENEMENTS -------------------
$evenements = array(
"id_evenement" => "bigint(21) NOT NULL",
"id_article" => "bigint(21) DEFAULT '0' NOT NULL",
"date_debut" => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL",
"date_fin" => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL",
"titre" => "text NOT NULL",
"descriptif" => "text NOT NULL",
"lieu" => "text NOT NULL",
"adresse" => "text NOT NULL",
"inscription" => "tinyint(1) DEFAULT 0 NOT NULL",
"places" => "int(11) DEFAULT 0 NOT NULL",
"horaire" => "varchar(3) DEFAULT 'oui' NOT NULL",
"id_evenement_source" => "bigint(21) NOT NULL",
"maj" => "TIMESTAMP"
);
$evenements_key = array(
"PRIMARY KEY" => "id_evenement",
"KEY date_debut" => "date_debut",
"KEY date_fin" => "date_fin",
"KEY id_article" => "id_article"
);
$tables_principales['spip_evenements'] = array(
'field' => &$evenements,
'key' => &$evenements_key,
'join'=>array(
'id_evenement'=>'id_evenement',
'id_article'=>'id_article'
));
$tables_principales['spip_rubriques']['field']['agenda'] = 'tinyint(1) DEFAULT 0 NOT NULL';
return $tables_principales;
}