Plugin: fichier XML pour créer / modifier une table

2 views
Skip to first unread message

loïc m.

unread,
May 3, 2007, 5:39:54 AM5/3/07
to Plume CMS - developers
Bonjour tout le monde.
Je travaille en ce moment sur un plug-in pour Plume.
J'aimerai avoir un peu plus d'explications sur la structure des
fichiers .xml en tant que structure de table de base de données.
Je regarde du côté de /tools/link/ car c'est le seul à disposer d'un
tel mécanisme avancé.

Pour ma part, j'aimerai simplement ajouter une colonne sur une table
déjà existante.
J'ai donc un fichier xml du genre:

<database>
<action id="categories" label="Update table %s"
string="{{PREFIX}}categories">
<test eq="neq" value="{{PREFIX}}categories" label="Column %s
exists" string="{{PREFIX}}categories">
SHOW COLUMNS FROM '{{PREFIX}}categories' LIKE
'category_position'
</test>
ALTER TABLE `{{PREFIX}}categories` ADD `category_position`
INT( 10 ) NOT NULL AFTER `category_parentid`;
</action>
</database>

Comme je m'inspire librement du plug-in "link", j'ai repris la même
structure du fichier installdb.php
Seulement mon fichier ne génère pas la mise à jour attendu.


J'ai donc 2 questions:
1. Comment structurer mon fichier XML pour qu'il soit valide pour
faire une mise à jour de table ?
2. Comment structurer une class spécifique pour exécuter la mise à
jour de la base ? Car je préfère passer par une classe personnelle
pour faire tout ça, plutôt que par un simple fichier "dbupdate.php"


P.S: comme vous pouvez le remarquer, ce plug-in permet de gérer la
position des catégories, ce qui devrai aider plus d'un utilisateur
dans la création des menus ;)
mais je suis très loin d'avoir fini, alors si des personnes veulent
participer, you're welcome :)

loïc m.

unread,
May 3, 2007, 6:11:49 AM5/3/07
to Plume CMS - developers
Bonjour,
comme je n'ai pas réussi à faire la mise à jour de ma table via un
ficheir XML, j'ai essayé de passer par un fonction spécifique.

function installECM()
{
$sql = 'ALTER TABLE \''.$this->table.'\' ADD \''.$this->column.'\'
INT( 10 ) NOT NULL AFTER \'category_parentid\'';
$rs = $this->con->execute($sql);
if($rs->isEmpty())
return false;
return true;
}

Seulement lorsque j'execute ce morceau de code, une erreur apparaît:
Fatal error: Call to a member function isEmpty() on a non-object in /
Users/moriame/Sites/plume/manager/tools/ecm/class.ecm.php on line 68

Si quelqu'un a une piste je suis preneur :)

P.S: je vais aller voir du côté du dossier d'installation tien, j'ai
pas pensé à zieuter par là bas encore....

loïc m.

unread,
May 3, 2007, 6:16:40 AM5/3/07
to Plume CMS - developers
Bon,
comme quoi la meilleur réponse est toujours de chercher ;)
Mon problème sur la fonction vient d'un problème de guillemets.
Celle-ci fonctionne parfaitement:

Loic d'Anterroches

unread,
May 3, 2007, 6:20:24 AM5/3/07
to plume-cms-...@googlegroups.com
loïc m. wrote:
> Bonjour,
> comme je n'ai pas réussi à faire la mise à jour de ma table via un
> ficheir XML, j'ai essayé de passer par un fonction spécifique.
>
> function installECM()
> {
> $sql = 'ALTER TABLE \''.$this->table.'\' ADD \''.$this->column.'\'
> INT( 10 ) NOT NULL AFTER \'category_parentid\'';
> $rs = $this->con->execute($sql);
> if($rs->isEmpty())
> return false;
> return true;
> }
>
> Seulement lorsque j'execute ce morceau de code, une erreur apparaît:
> Fatal error: Call to a member function isEmpty() on a non-object in /
> Users/moriame/Sites/plume/manager/tools/ecm/class.ecm.php on line 68
>
> Si quelqu'un a une piste je suis preneur :)

execute ne retourne pas un resultset mais simple true/false il me semble.

> P.S: je vais aller voir du côté du dossier d'installation tien, j'ai
> pas pensé à zieuter par là bas encore....

Bonne pioche :) Tu trouveras la manière dont le fichier XML est utilisé.

a+
loïc

loïc m.

unread,
May 3, 2007, 8:06:58 AM5/3/07
to Plume CMS - developers
Bon, je laisse l'install du plug-in de côté pour l'instant ;) ça peu
attendre encore :)
Par contre je vais avoir pleins de questions spécial création de
plugin, donc je garde ce thread ouvert sur ce sujet ^^

Donc.... dans certains dossiers de plug-ins il y a un ficheir
"register.php".
Prenant exemple sur "link", ce dernier charge le ficheri functions.php
dans ce fichier.
Mais tous les plug-ins n'ont pas forcément ce fichier "register.php".

Quels sont les fichiers nécessaires dans la création d'un nouveau plug-
in ?
A part desc.xml, je sais pas ;)

Perso, voilà à quoi ressemble celui que je fais en ce moment:

/ecm
/db
update.php
update.xml
/locale
/fr
ecm.lang
/themes
/default
/images
icon.png
class.ecm.php
desc.xml
functions.php
index.php
register.php

Si je regarde l'ensemble des plug-ins, je dirai que seul desc.xml et
index.php sont obligatoires (et encore, dans certains cas y a rien à
part register.php).
J'ai bien vus que la doc. est un peu light côté créa. plug' et il me
semble que Cilia a d mal à la rédiger par manque de compétences.
Moi je veux bien l'aider à combler ce vide, mais j'ai besoin d'aide
avant :)
Et puis avec ce thread ça devrai tout de même l'aider ^^

On 3 mai, 12:20, Loic d'Anterroches <t...@users.sourceforge.net>
wrote:

Loic d'Anterroches

unread,
May 3, 2007, 8:50:07 AM5/3/07
to plume-cms-...@googlegroups.com

register.php: Ce fichier est inclu "include_once 'register.php';" au
moment du chargement de Plume. Cela permet d'enregistrer des
hooks/events/etc...

index.php: Nécessaire pour avoir une interaction dans le manageur. Par
exemple il n'est pas utilisé par le plugin antispam.

desc.xml: Pour la description dans la page tools.php

a+
loïc

loïc m.

unread,
May 11, 2007, 8:25:21 PM5/11/07
to Plume CMS - developers
On 3 mai, 14:50, Loic d'Anterroches <t...@users.sourceforge.net>
wrote:

> register.php: Ce fichier est inclu "include_once 'register.php';" au
> moment du chargement de Plume. Cela permet d'enregistrer des
> hooks/events/etc...
>
> index.php: Nécessaire pour avoir une interaction dans le manageur. Par
> exemple il n'est pas utilisé par le plugin antispam.
>
> desc.xml: Pour la description dans la page tools.php
>
> a+
> loïc

J'avais pas bien compris l'utilité de register.php, alors si d'autre
personne comme moi cherchent de la doc. sur la création de plug'
Plume, voici ce que je peux ajouter pour mieux comprendre la structure
des plug'.
Le fichier register.php contenu dans les dossiers des plug' permet au
lancement de Plume, d'inclure tous les fichiers "register.php" présent
dans ces dossiers de plug'.
Ainsi, en mettant un seul ligne du genre
"include_once('functions.monPlug.php');", on pourra avoir accès aux
fonctions (ou class au choix) de notre plug'

Par exemple pour celui que je suis en train de mettre en place, je
charge le fichier functions.ecm.php qui contient les class "public"
qui seront utilisées au seins des gabarits (j'ai mis public entre
guillemets pour ne pas trop mélanger avec les concepts fondamentaux de
la P.O.O.).
J'ai un autre fichier au même niveau que ce fichier de fonctions
"public" : class.ecm.php.
Celui-ci contient toutes les classes utilisées uniquement pour la
gestion du plug' (au niveau du manager, partie "outils". Bien
évidemment, mon fichier de fonctions dites public peut tout à fait
réutiliser les class de mon plug, mais les utilisateurs n'auront accès
qu'aux fonctions "light" (entendez par là, simplifiée) de mon plug-
in : un appel de fonction avec le minimum de paramètre, tout en
permettant un maximum de personnalisation.

Le mieux que je vous conseille pour mieux comprendre la structure des
plug-ins est encore de vous plonger dedans, de regarder comment c'est
fait et d'essayer d'en faire un (le bon vieux 'Hello World' est tjs
d'actualité).

Niouk

unread,
May 13, 2007, 9:58:01 AM5/13/07
to Plume CMS - developers
Salut !

Vu que tu es en plein dans les plugins et que... moi aussi :-), j'ose
poser mes question ici ?

J'essaie ( j'ai bien dit j'essaie !) de faire un plugin gérant des
métadonnées ajoutées aux ressources (en me basant sur le plugin
métadonnées de dotclear). Je suis pas un as de la prog, alors ça va
peut-être mettre un peu de temps avant que je le finisse (eh oui, je
suis encore étudiant et j'ai des examens à préparer aussi :-S).

Voilà, alors moi j'aurai voulu savoir s'il existe des fonctions
analogues à pxGetLastResources, pxLastResTitle, et compagnies que l'on
peut utiliser dans un plugin pour avoir accès aux ressources.
En plus résumé, j'ai besoin d'une fonction permettant de lister les
ressources sur ma page.

Savez-vous ou est-ce que je dois regarder pour pouvoir trouver ça ?

Nicolas

loïc m.

unread,
May 13, 2007, 3:06:38 PM5/13/07
to Plume CMS - developers
je crois que rien ne t'empêche d'utiliser les fonctions "standards"
utilisées dans les gabarits au sein des plug-ins.
Regarde dans le code pour savoir comment utiliser ses fonctions,
comment les initialiser et savoir avec quels objets on les utilise.
Un qui te servira beaucoup à mon avis, sera l'objet "manager" qui
permet de gérer pas mal de donnée de part les fonctions qu'il permet
d'appeler.

Bonne chance pour ton dév et à bientôt.


loïc m.

Reply all
Reply to author
Forward
0 new messages