Carnet Wiki

AutreTableSpip

Version 6 — Octobre 2007 NicolasR

<blockquote class="spip">

Voir aussi : : [->art2066] MultiBase] : : Acces-SPIP-aux-tables-externes-et : : Accés SPIP aux tables non-SPIP et jointures JonctionEntreTables : : [Autre Table SPIP

</blockquote>

-----

Accés Accés natif à partir SPIP 1.9

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 ?


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

Déclarer Déclarer une nouvelle table dans SPIP

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 :
<cadre class=« sql  »>
code >
create table spip_machin (
id_machin int,
libelle varchar(100),
id_article bigint(21)
) ;
</cadre </code >

Il suffit donc de calquer tout ça coté php dans le fichier mes_fonctions.php3.
D’abord, déclarer la variable globale :_ <code >
global $ tables_principales  ;
</code >

 global $tables_principales;

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

Ensuite, donner le format des tables ajoutées. <cadre class=« php  »>
Par exemple  :
_ <code >
$tables_principales[’machin’]= array(
’field’ => array(
« id_machin » => « int »,
« libelle » => « varchar(100) »,
« id_article » => « bigint(21) »
),
’key’ => array(« PRIMARY KEY » => « id_machin »)
) ;
</cadre </code >

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

<cadre class=« php  »>
Il faut ensuite déclarer la requête de base pour cette table ( toujours dans mes_fonctions ) :
_ <code >
//
//
//
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) ;

 ?>
</cadre </code >

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...