Carnet Wiki

AutreTableSpip

Version 3 — Mars 2007 NicolasR

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)
);

[Erreur...3][Erreur...4]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).

[Erreur...6][Erreur...7][Erreur...8]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

//
// <BOUCLE(MACHIN)>


&#91;Erreur...11]//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;*/