[ Brainstorming ] Un moteur de gestion de plugins

Messagepar manmachine » Jeu 01 Déc 2005, 10:41

Je pense qu'il est tant d'ouvrir un sujet dédié à ce problem : " Comment implémenter un moteur des gestion de plugins. "

Voila comment ce présente la chose :

Nous avons 2 sortes de plugins, ceux que j'appelerais les addons et les hacks .
Definitions:

- addons, modules addditionnel n'ayant aucun impact sur le noyau par exemple ,une FAQ , un Forum, Easy populate etc .. C'est addons sont donc de nouvelles fonctionnalités qui viennent ce greffé autour du noyau mais qui ne demande aucune modification ( ou vraiment tres légère ) de celui ci

- hacks modification d'un ou de plusieurs composant du noyau par exemple " Seperate Pricing Per Customer " , " Credit Class & Gift Voucher " , " Quantity Price Breaks Per Product" . C'est modifications interviennent au coeur du script en modifiant des fonctions ou des classes critiques " shopping_cart , order, currencies " etc ...

Si le premier type des plugins ne posent aucun probleme à etre gérer par un moteur de gestion de plugins ( j'exposerais la methode que je preconise plus tard ) , le 2ieme type lui devient vraiment plus delicat.

Ce sujet est donc la pour essayer , tous ensemble de trouver la meilleur solution .

NOTE : Ce sujet sera modéré tres sévèrement afin d'en assurer une bonne lecture.
manmachine
Membre actif
 
Messages: 76
Inscription: Mer 13 Fév 2008, 21:51

Messagepar leviathan13 » Jeu 01 Déc 2005, 12:33

Bon comme je suis nul et novice en php/mysql, je poses des questions bêtes.

Est-ce que le noyau peut fonctionner un peu comme le système de css?

1°) On mettrais dans tous les fichiers une balise php "require plugin.php"

2°) Dans la base de données, on crées une table plugin avec les infos du chemin d'accès des plugin qu'on ajoute (et mieux si si ça ajoute automatiquement les plug present dans un repertoire comme ça fonctionne déja pour les themes)

ps: sinon si il est possible de creer un champ ou le code php est copié

3°) Dans le plugin.php on fait une requête sql pour sortir la liste des plugin hack ou module pour les appliquer.
Dernière édition par leviathan13 le Jeu 01 Déc 2005, 12:38, édité 1 fois.
__________________________________________________________
"L'idiot savait pas que c'était impossible" Sentimancho
leviathan13
Membre actif
 
Messages: 29
Inscription: Mar 15 Nov 2005, 12:28
Localisation: marseille

Messagepar manmachine » Ven 02 Déc 2005, 23:35

C'est pas aussi simple que ca.

En fait pour bien ce rendre compte du process que devrais accomplir un moteur de plugins il faudrait partir d'un cas concret, la contrib " Separate Price Per Customer " me semble un bon cas , elle a un périmetre de modification tres large puisqu'elle impacte les 2 classes les plus importante coté client : orders.php et shopping_cart.php, agit sur tous les prix, sur les customers, la base de données le fichier categories.php de l'admin ajoute des nouvelles fonctions. Bref un cas complexe à intégrer comme un plugins .

Je vous met la version sur laquelle je propose de travailler pour ce projet en download sur notre serveur :
http://forums.oscss.org/misc/separate_p ... ion_40.zip

Le but etant pour l'instant de réflechir sur les méthodes qui permettrais de fair de cette contrib un plugins installable en un clic !

Si vous avez de meilleur proposition comme étude de cas je suis preneur. Sachant qu'il faudra en avoir passer en revu plusieurs pour aboutir à quelque chose de viable .
manmachine
Membre actif
 
Messages: 76
Inscription: Mer 13 Fév 2008, 21:51

Messagepar sidarus » Ven 02 Déc 2005, 23:55

manmachine a écrit:Si vous avez de meilleur proposition comme étude de cas je suis preneur.

Pour ma part je citerais Xoops. Il s'en sort très bien à ce niveau là : un/install, un/active, download. Suffirais de matter son XML question de s'en inspirer. Vais me le réinstaller juste pour voir... et j'y rapporte mes conclusion dès que c'est fait... (à suivre).
sidarus
Membre très actif
 
Messages: 396
Inscription: Mar 03 Mai 2005, 23:34
Localisation: Geneva (CH)

Messagepar manmachine » Sam 03 Déc 2005, 00:16

Oui mais xoops c'est comme mambo tu install des " addons " , ca c'est pas un probleme faire un plug pour une FAQ, une newsdesk etc c'est simple ( voir 1er post ) ce sont des pieces rapporté pas des modifs, mon etude de cas porte sur un " hack " qui change le noyau , qui modifie une classe etc .. ce n'est donc pas xoop qui va nous montrer l'exemple.
manmachine
Membre actif
 
Messages: 76
Inscription: Mer 13 Fév 2008, 21:51

Messagepar leviathan13 » Sam 03 Déc 2005, 14:16

Je pense comprendre ce que veut dire manmachine.

En fait avec un module on crée carrément une application qui pourrait fonctionner quasiment comme une application indépendante. On fait juste un lien pour appeller le module et il prends les paramètres de mise en page de l'application (je schématise en gros).

La difficulté ici c'est que les ajouts doivent se faire à l'intérieur même des fichiers, à des endroits spécifiques, et à chaque fois qu'on veut intégrer une contrib, faut remettre les mains dans le cambouis pour savoir ce qui a été ajouté par rapport au fichier original.

Pour pouvoir créer une install en un click il faut pouvoir savoir quelles modifications on été faites sur chaque fichier pour qu'elle n'efface pas les modif de contributions ajoutées précédemment.

C'est pour ça que c'est autant galère d'ajouter une contrib et que la creload est si populaire (elle en intègre déja pas mal).

Par exemple, en jetant un rapide coup d'oeil, dans le fichier adress_book_process.php, on remarque
- Des conditions supplémentaire sont ajoutée dans une rubrique "process" et "update"
- Modification de la requête pour ajouter un champ supplémentaire

N'est il pas possible de mettre une variable qui ailles chercher dans un fichier externe ou la base de données un listing de conditions?
Dernière édition par leviathan13 le Sam 03 Déc 2005, 14:19, édité 1 fois.
__________________________________________________________
"L'idiot savait pas que c'était impossible" Sentimancho
leviathan13
Membre actif
 
Messages: 29
Inscription: Mar 15 Nov 2005, 12:28
Localisation: marseille

Messagepar manmachine » Sam 03 Déc 2005, 14:33

En fait la solution à mon avis n'est de monitorer les changements faits dans les fichiers, c'est impossible , le moindre ajout d'un espace lors d'une edition et tout est fichu.

A mon avis il faut créer des classes/objet pour à peut pret tout , une fois que chaque élément sera constitué en objet , il faut prévoir à l'interieur de celui un autre objet qui injecterais les modifications de traitement. Un peu comme les classes de paiements , qui comporte des functions before_process, after_process etc ...

Par exemple on crée une classe Prices, qui comporte les functions de prétraitement et post traitement ou on pourrais via la classe qui gére les plugins importer des nouvelle fonctionnalités , du coup une modif sur les prix serait directement répercuté partout .

Vous me suivez ?
manmachine
Membre actif
 
Messages: 76
Inscription: Mer 13 Fév 2008, 21:51

Messagepar leviathan13 » Lun 19 Déc 2005, 15:42

J'ai trouvé cette contrib, qui pourrait être un début sur le système que tu voudrais mettre en place (perso je suis pas arrivé à l'installer).

Ca s'appelles contrib installer, normalement faut le faire sur une MS2 vierge pour la gestion des conflits, mais comme vous êtes plus doués que moi... :)

Il ya des exemples de préparation d'un "package".

http://www.oscommerce.com/community/contributions,3286
__________________________________________________________
"L'idiot savait pas que c'était impossible" Sentimancho
leviathan13
Membre actif
 
Messages: 29
Inscription: Mar 15 Nov 2005, 12:28
Localisation: marseille

Messagepar leviathan13 » Jeu 22 Déc 2005, 16:22

Bon je sais pas si c'est un prob lié à mon serveur, mais ça n'a pas l'air de fonctionner.

Si quelqu'un à eu plus de chance, mais ça a l'air pas mal pour tracer les remplacements effectués par rapport à la version de base.

Ca ne trace que les modifications opérées par l'outil, ce qui veut dire que les saut de ligne, et les ajouts d'autres contribs à la main est possible.
__________________________________________________________
"L'idiot savait pas que c'était impossible" Sentimancho
leviathan13
Membre actif
 
Messages: 29
Inscription: Mar 15 Nov 2005, 12:28
Localisation: marseille

Messagepar gvincent » Mer 11 Jan 2006, 18:14

Info idiote (je ne connais pas assez le moteur actuel, donc je ne sais pas si c'est applicable) :

Spip utilise des points d'entrées pour gérer des ajouts au compilateur.
Les points d'entrées sont définis de la façon suivante : il est prévu une manipulation avant et après l'appel à une fonction -- typiquement avant_propre() et apres_propre() [propre() étant la fonction principale qui transforme le code SPIP des articles en html correct]

Il est également possible de changer le comportement de presque toutes les fonctions qui s'appellent xxx-dist() en surchargeant pas xxx().

Rien d'objet là dedans, mais c'est suffisament souple pour qu'on puisse sacrément changer le comportement du navigateur sans toucher au code initial.

.Gilles
gvincent
Membre inactif
 
Messages: 2
Inscription: Mer 11 Jan 2006, 18:06

Messagepar leviathan13 » Lun 03 Avr 2006, 12:20

re coucou tout le monde, j'avais plus de connexion internet depuis quelques temps, c'était la galère. :-(

Bon je reviens sur cette contrib qui permet d'installer d'autre contribs (pour peu qu'il a été fait un petit script d'install en xml, cf la doc) Depuis mon premier post, celui-ci a évolué. Il faut appeller le script depuis /admin/contrib-installer.php pour l'installer, mais il me sort :

"L'accès a échoué
Aucun accès sont valide !
Veuillez entrer en contact avec l'administrateur du site en cas de problème d'accès".

J'ai refait le test en local avec winxp et le script d'install semble fonctionner.

Je pense qu'il y a une petite ligne à ajouter dans le code pour qu'il prenne en compte la gestion des accès utilisateurs

Je redonnes l'adresse au cas ou quelqu'un aurait le temps de s'y pencher.

http://www.oscommerce.com/community/contributions,3286
__________________________________________________________
"L'idiot savait pas que c'était impossible" Sentimancho
leviathan13
Membre actif
 
Messages: 29
Inscription: Mar 15 Nov 2005, 12:28
Localisation: marseille

Messagepar Phocea » Jeu 06 Avr 2006, 16:09

Perso je pense que l'approche de manmachine est la bonne.

Il faut que le gestionnaire de plugin soit associer a un gestionnaire de classes "core".
C'est classe primordiale au fonctionnement d'Osc doivent etre redefinit et refactoriser. Le plugin sait alors que la classe core disons "display_price" doit faire A,B,puis C pour afficher un prix.
Si on ajoute un plugin qui remplace l'etape B ou la complete, il suffit alors que ce plugin change aussi la config du gestionnaire de plugin pour lui dire que "display_price" ce fait maintenant en realisant les étapes A, B_plugin, C.

Ainsi tout est repercuté, et en aillant une table qui contient la config de base osc, on peut meme desinstaller un plugin et revenir a la methode par defaut, ou meme mieux, avec un historique pour revenir 1 poil en arriere.

La complexite arrive lorsqu'un nouveau plugin agit sur des classes deja modifié par un autre plugin
Phocea
Membre inactif
 
Messages: 2
Inscription: Jeu 06 Avr 2006, 15:56

Messagepar leviathan13 » Jeu 06 Avr 2006, 20:35

bé ce ce qui semble faire ce script (sur le papier) :P ! en gros d'après ce que j'ai compris, il faut créer des plugins spécifiques à ce moteur d'installation de contrib. (ouip, je sais faut d'abord rendre compatible les contribs avec oscss avant de se lancer dans l'adaptation à "contrib installer" :) )

Tu dis dans ton fichier install.xml quel fichier doit être modifié et à quel endroit dans le code. il fait la modification et garde une trace des segments de code ajoutés (vu que j'ai pas réussi à bien l'installer, je sais pas si c'est dans la base de donnée, ou s'il se base juste par rapport aux modifications par le fichier install.xml, mais je dirais plutot la deuxième option, vu que y'a des requête <remove>). Et dans l'interface il y a une option pour enlever les contribs.

Voili-voilou, j'attends un retour d'expérience, si quelqu'un voudrai se pencher dessus (en particulier manmachine, si t'as un peu de temps ;) )
__________________________________________________________
"L'idiot savait pas que c'était impossible" Sentimancho
leviathan13
Membre actif
 
Messages: 29
Inscription: Mar 15 Nov 2005, 12:28
Localisation: marseille

Messagepar manmachine » Ven 07 Avr 2006, 09:32

Ce système est loin d'etre satisfaisant, un script qui effectue des modifs dans le code source n'a rien d'un moteur de plugin.
Ce n'est pas dans cette direction en tout cas que je me tournerais.

En fait pour avoir un vrai moteur de plugin il faut tout réécrire, ca me parait impossible dans un script ecrit linéairement ( comme 80% du code source de oscommerce ), il faut tout revoir en POO.

Bref ca ne sera pas pour osCSS ..
manmachine
Membre actif
 
Messages: 76
Inscription: Mer 13 Fév 2008, 21:51

Messagepar leviathan13 » Ven 07 Avr 2006, 12:40

Ouip, j'imagine que c'est pas très parfait, mais c'est une alternative par rapport à aller remplacer à la main chaque fichier, et on peut désinstaller facilement une contrib sans interférer avec des contribs ajoutée "à la main".

C'est un peu comme les installations des modules de paiement.

snif, tu proposes de réécrire une application complète?

Je suis assez nul dans domaine, mais vu que je suis au chomdu, j'ai décidé d'apprendre la prog sur des bases propre, si y'a besoin de faire quelque chose, je veux bien aider. (si vous avez des liens à me proposer je veux bien un MP)

ps: chez moi cette contrib fonctionne pas parcque j'ai pas la dernière version de mysql et j'ai peur d'upgrader à cause de la compatibilité avec des scripts écrit pour une version antérieur.
Dernière édition par leviathan13 le Jeu 20 Avr 2006, 11:15, édité 1 fois.
__________________________________________________________
"L'idiot savait pas que c'était impossible" Sentimancho
leviathan13
Membre actif
 
Messages: 29
Inscription: Mar 15 Nov 2005, 12:28
Localisation: marseille

Messagepar leviathan13 » Mar 09 Mai 2006, 12:34

Bon j'ai finalement réussi à installer contrib installer sur une version ms2 de base avec mon hébergement free, (il fallait la dernière version de mysql).

Comme le dit manmachine, il s'agit bien d'un hack de fichier. Dans chaque fichier qui doit être modifié, il y a un commentaire qui encadre la section modifée, ce qui permet de le faire effacer par le script lors de la suppression par l'interface de gestion des contribs. (Lorsqu'il installe la contrib, il se charge de faire un petit backup)

C'est un peu comme si on suivait les instructions du fichier qui indique comment installer la contrib.
"cherchez la section ou y'a marqué ça, et copier la ligne dans le bloc", sauf que lorsqu'on est tête en l'air comme moi, c'est bien que ça se fasse tout seul pour ne rien oublier.

Donc après la réussite de cette expérience, j'ai essayé d'ajouter "contrib installer" dans notre oscss préféré. Mais malheureusement, j'ai une page qui m'indique:

L'accès a échoué
Aucun accès sont valide !
Veuillez entrer en contact avec l'administrateur du site en cas de problème d'accès

(Finalement j'ai résolu le problème en allant sur admin>catégorie/produits>tools editer et sauver)

Mais pas encore réussi à l'installer, il faudrait que le fichier install.xml soit adapté à notre version d'oscss vu qu'il a été entièrement revu au niveau des lignes à modifier :(
Dernière édition par leviathan13 le Mar 09 Mai 2006, 16:58, édité 1 fois.
__________________________________________________________
"L'idiot savait pas que c'était impossible" Sentimancho
leviathan13
Membre actif
 
Messages: 29
Inscription: Mar 15 Nov 2005, 12:28
Localisation: marseille

Messagepar sidarus » Sam 21 Oct 2006, 21:43

On va s'y coller bientot => http://bug.oscss.org/?do=details&id=23
sidarus
Membre très actif
 
Messages: 396
Inscription: Mar 03 Mai 2005, 23:34
Localisation: Geneva (CH)


Retourner vers Developpement

 


  • Articles en relation
    Réponses
    Vus
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités

cron