Carnet Wiki

AutreTableSpip

Version 5 — Octobre 2007 JLuc

<blockquote class="spip">

Voir aussi : : MultiBase : : Acces-SPIP-aux-tables-externes-et : : JonctionEntreTables

</blockquote>

Accés natif à partir SPIP 1.9 </code >

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 Déclarer une nouvelle table dans SPIP  ? 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 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 cette le code ci-dessus occasionne des erreurs de compilation voir http://permalink.gmane.org/gmane.co...

----
En 1.9
Si on souhaite juste un accès direct sans jointures spécifiquesl il est inutile de déclarer

//
//

//ni de METTRE CES 2 LIGNES qui permettent de créer les tables à l’installation de spip
/*include_spip (’base/serial’) ; //sinon c’est toujours include_spip(’inc/indexation")
global $tables_principales ;*/