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