Carnet Wiki

Compléments techniques pour l’ajout de tables dans SPIP

Note d’intention

J’ai déroulé le bel itinéraire décrit par Pierre Andrew (alias Mortimer, mortimerpa) sur spip-english http://article.gmane.org/gmane.comp... et ai poursuivi sa documentation de manière durable notamment en recopiant dans le corps de l’article les morceaux pertinents de codes liés.

Il semblerai qu’un commit 11997 aie passablement modifié la bonne manière de faire. Cela fait l’objet d’un dernier chapitre d’après citation de Cedric Morin. Je ne crois pas que cela invalide cette doc mais cela en modifie les modalités d’usages. _ Ce serait bien de préciser cela :-)

Sébastien Denooz a ensuite proposé un ensemble de points à confirmer, dont Rastatopoulos a donné confirmation. Ces points figurent à la suite.

Il reste
-  à traduire tout en anglais ou tout en français.
-  à structurer le texte (et créer des intertitres) en dégageant par exemple les étapes successives de la vie des tables par exemple
-  améliorer la présentation en stylant par exemple les fichiers utilisés
-  préciser ce qu’il en est pour les critères

A bon rédacteur salut !

JLuc

Mémo technique

There is an article in french that is a bit more detailled here:
http://www.spip-contrib.net/Acces-S...

For creating tables of your own, it is quite easy with spip 1.9.2 and
2.0 as SPIP will gladly do Everything for you if you tell him the schema
of the table.

For an example, check out the plugin:
http://trac.spip.org/trac/spip-zone...

it is unfinished, but has the table declaration/creation already done.
First thing to do is create a description of the schema of the table; In
the plugin this is done for three tables:

-  1ère table : spip_basefiltrageip_whitelist.
En voici la déclaration complète :

$spip_basefiltrageip_whitelist 
  = array(
       "first_ip"     => "long NOT NULL",
       "last_ip"     => "long NOT NULL",
       "maj"         => "TIMESTAMP");

$spip_basefiltrageip_whitelist_key = array(
                                  "PRIMARY KEY" => "first_ip",
                                  "UNIQ" => "last_ip");
         
global $tables_principales;
$tables_principales['spip_basefiltreageip_whitelist'] 
  = array(
       'field' => &$spip_basefiltrageip_whitelist,
       'key' => &$spip_basefiltrageip_whitelist_key);

$tables_principales['spip_basefiltreageip_whitelist'] 
  = array(
       'field' => &$spip_basefiltrageip_whitelist,
       'key' => &$spip_basefiltrageip_whitelist_key);

-  la 2eme table spip_basefiltrageip_log est déclarée de la même manière, sauf qu’au lieu d’avoir une clé primaire et une clé unique, ce sont 2 clés simples qui sont déclarées.
Voici simplement la déclaration des clés

$spip_basefiltrageip_log_key
   = array(
        "KEY" => "ip",
        "KEY" => "reason_id");
 

-  la 3eme table spip_basefiltrageip_reasons est déclarée pareil. La particularité dans la déclaration des clés est qu’elle a juste une clé primaire :

$spip_basefiltrageip_reasons_key 
  = array(
     "PRIMARY KEY" => "reason_id");

Then you declare the relations between them (joints):

global $tables_jointures;
$tables_jointures['spip_basefiltreageip_reasons'][]
    = 'spip_basefiltreageip_log';

The joints is what you want to use to tell SPIP that your new
keywords/documents tables relate to your new object.

For example, in spip by default, you have:

$tables_jointures['spip_articles'][]= 'mots_articles';
$tables_jointures['spip_articles'][]= 'auteurs_articles';
$tables_jointures['spip_articles'][]= 'documents_articles';

You can also define more “complex” joint criterion with:

global $exceptions_des_jointures;
$exceptions_des_jointures[’titre_mot’] = array(’spip_mots’, ’titre’)%

JLuc , mortimer , RastaPopoulos , Sebastien Denooz - Mise à jour :15 February 2009 at 18:34