Carnet Wiki

Autre Table Spip

Version 10 — Juin 2011 — 78.225.xx.xx

<blockquote class="spip">

Voir aussi : : MultiBase : : Accés SPIP aux tables externes et jointures : : [Autre Table SPIP

</blockquote>

Accés natif à partir SPIP 1.9

Doc technique du carnet : MultiBase

Depuis la 192, plein de choses sont possibles le plus simplement du monde :
Voir la doc Acces-SPIP-aux-tables-externes-et

Ce qui suit est utile seulement lorsque l’accés natif aux tables externes est insuffisant.


Quel est l’intérêt de déclarer une nouvelle table dans SPIP ?

-  les tables déclarées sont inclues dans la sauvegarde SPIP (à confirmer ou préciser : y a t il d’autres conditions )

-  c’est un premier pas avant de déclarer aussi les jointures plus complexes que ne permet pas le mécanisme de jointure natif à SPIP. (à confirmer)
Pour ces jointures, on se réfèrera à la page JonctionEntreTables

-  à compléter : autres intérêts ?


Déclarer une nouvelle table dans SPIP

Prenons un exemple pipeau : une table spip_machin contenant 3 colonnes : un identifiant IdMachin, numérique, un libellé Libelle, et un lien vers la table article, histoire d’avoir des trucs un peu tordus.

Donc, pour créer cette table il a fallu faire ça :

CREATE TABLE spip_machin (
    id_machin INT,
    libelle VARCHAR(100),
    id_article BIGINT(21)
);

Il suffit donc de claquer calquer tout ça coté php dans le fichier mes_fonctions.php3.
D’abord, déclarer la variable globale :

 global $tables_principales;

Ensuite, donner le format des tables ajoutées. Par exemple :

$tables_principales['machin']= array(
  'field' => array(
    "id_machin" => "int",
    "libelle" => "varchar(100)",
    "id_article" => "bigint(21)"
  ),
  'key' => array("PRIMARY KEY" => "id_machin")
);

Il faut ensuite déclarer la requête de base pour cette table (toujours dans mes_fonctions) :

//
// <BOUCLE(MACHIN)>
//
function boucle_MACHIN($id_boucle, &$boucles) {
	$boucle = &$boucles[$id_boucle];
	$id_table = $boucle->id_table;
	$boucle->from[$id_table] =  "spip_machin";  
	return calculer_boucle($id_boucle, $boucles); 
}
?>

La variable $id_table renvoie le nom de la boucle donc sur la ligne machin AS $id_table, spip_machin peut etre remplacé par le nom de la table dans mysql.
Il faut savoir que dans la table mysql les noms de champs doivent être en minuscule sinon spip ne reconnait pas les champs (je me suis fait avoir donc vaut mieux le rappeler).

Théoriquement, l’ajout de cette dernière fonction n’est pas nécessaire si le nom de la table ne commence pas par spip_.

Si le code ci-dessus occasionne des erreurs de compilation voir http://permalink.gmane.org/gmane.co...