declarer_tables_principales

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;
}

Auteur Matthieu Marcillaud Publié le : Mis à jour : 12/05/17

Traductions : English, Español, français