Dans l’objectif de faire un plugin spip, je souhaite ajouter des tables et en modifier dans la base de donnés spip. Voici mon problème, même si j’arrive à ajouter de nouvelle table, quand il s’agit de rajouter une colonne à une table existante (ici rubriques), cela ne fonctionne pas.
Voici les parties en rapport avec cette modification :
Dans le fichier _administration.php dans la fonction upgrade
et dans le fichier _tables.php dans declarer_tables_objets_sql
if (!isset($tables['spip_rubriques']['field']['id_projet'])) {
$tables['spip_rubriques']['field']['id_projet'] = 'bigint(21) NOT NULL DEFAULT "0"';
$tables['spip_rubriques']['champs_editables'][] = 'id_projet';
$tables['spip_rubriques']['champs_versionnes'][] = 'id_projet';
}
Je ne sais pas si les deux modifications sont indispensables, mais dans tous les cas je ne comprends pas pourquoi la colonne ne s’ajoute pas lors de l’activation du plugin.
Si vous avez une idée sur cette problématique je veux bien l’entendre.
Sinon passez une bonne journée.
En complément de tes déclarations dans le fichier _administration.php il faut aussi informer SPIP des mises à jour des tables de la BDD.
Une méthode simple est d’utiliser le pipeline declarer_tables_principales (cf declarer_tables_principales - Programmer avec SPIP 4).
Pour un exemple complet et fonctionnel voir par ex la maj 1.0.2 du plugin grigri :
Alors ce qui est génant c’est que malgrès cela lors de l’installation cela ne fait pas les modifications. J’ai beau déclarer dans un fichier prefixe_tables.php
function osi_projets_declarer_tables_auxiliaires($tables_auxiliaires) {
$tables_auxiliaires['spip_rubriques']['field']['id_projet'] = "bigint(21) NOT NULL DEFAULT '0'";
$tables_auxiliaires['spip_mots_liens']['field']['lien_projet'] = "bigint(21) NOT NULL DEFAULT '0'";
return $tables_auxiliaires;
}
Le plugin Pages Uniques qui rajoute une colonne à spip_articles semble se limiter à cela. Je ne comprends pas vraiment pourquoi ca ne fonctionne pas pour moi ?
En fait, comme tu travailles sur des objets éditoriaux (rubriques et mots) il me semble qu’il faut utiliser tables_objets_sql qui travaille sur les objets (spip_mots, spip_rubriques etc), plutôt que declarer_tables_auxiliaires qui travaille sur les tables de liens (spip_mots_liens, etc)
Ça doit être ce qui ne fonctionne pas, si tout le reste est ok.