PluXml.org

Blog ou CMS à l'Xml

Vous n'êtes pas identifié(e).

#1 15/12/2017 13:55:51

bazooka07
Membre
Lieu : Quelque part en Rhône-Alpes
Inscription : 06/02/2014
Messages : 1 060
Site Web

A chaque usage son plugin

Bonjour,

On peut classer basiquement les plugins en 3 catégories :
* ceux qui ne servent que du côté admin : la plupart des éditeurs ckEditor, TinyMCE, Codemirror, Ace, d'autres utilitaires moveMyDatas, kzUploader, ...
* ceux qui ne servent que du côté site : ceux qui servent à rendre votre site plus attractif: sliders, Lightbox, réseaux sociaux, ...
* ceux qui servent des 2 côtés : filtre anti-captcha, calendrier, ....

Et PluXml charge à chaque fois tous les plugins activés sans tenir compte de vos besoins d'administrateur ou de simple visiteur.

Par exemple, je doute de l'intérêt pour un visiteur de charger un éditeur Wisiwyg. On aura un moins un accès disque dur inutile pour télécharger la déclaration de class du plugin, voire envoyer au visiteur un grosse librairie Javascript ( coucou JQuery ) si les hooks sont mal utilisés. A cela s'ajoutent des risques d'intrusion si la sécurité est le dernier des soucis de l'auteur du plugin ( Qui filtre ses posts avec filter_input ? )

Pour éviter de charger des plugins inutiles à son utilisation, il serait simple d'ajouter un attribut ou une balise xml dans le fichier infos.xml de chaque plugin qui pourrait être absent, ou avoir la valeur  'admin' ou 'site'. Et à l'activation du plugin conserver cette valeur  avec le nom du plugin dans le fichier de configuration plugins.xml.
Ensuite au démarrage de PluXml, il suffit dans la méthode plxPlugins::loadPlugins() de vérifier la présence de la constante PLX_ADMIN pour charger uniquement les plugins nécessaires à l'admin du site ou commun côtés admin et site. En l'absence de cette constante, on ne charge que les plugins nécessaires pour le côté site et commun côtés site et admin.

Mettre cela en place est relativement facile avec PLuXml et encore plus pour tous les plugins.

Qu'en pensez-vous ?

Hors ligne

#2 15/12/2017 16:10:31

Stéphane
Responsable du projet
Lieu : pas loin de Metz
Inscription : 07/08/2007
Messages : 6 261
Site Web

Re : A chaque usage son plugin

Bonjour

Dans les devs en cours que je prepare pour la suite de PluXml, j'ai intégré une notion de "scope" pour définir lors de la déclaration d'un hook (appel de la fonction addHook) quand le hook doit etre chargé en fonction de la page affichée.
Ce qui mettra par exemple de charger un fichier externe .js que si on est sur la page article.php de l'admin
C'est facile à faire coté admin car il suffit de regarder en fonction du fichier .php présent dans l'url et de rajouter un parametre dans l'appel du hook

ex: $this->addHook('Hook', 'monHook', 'article.php');

de cette façon on ne charge et garde en mémoire la définition du hook que si on est sur la page article.php de l'admin

Coté visiteur, c'est un peu plus compliqué car il tenir compte du mode d'affichage (home, article, statique, etc...) car on passe toujours par le fichier index.php et le mode d'affichage est définit après le chargement des plugins. Donc difficile d'appliquer le meme raisonnement que coté admin. Il faut encore que je réfléchisse comment faire au mieux coté visiteur.

C'est en cours de réflexion et ça demande à murir, mais ça rejoins ton sujet


Mes articles et tutoriels pour PluXml
Pluxopolis mon site sur PluXml, mais pas seulement...
Twitter: @pluxopolis

Hors ligne

#3 15/12/2017 18:10:23

bazooka07
Membre
Lieu : Quelque part en Rhône-Alpes
Inscription : 06/02/2014
Messages : 1 060
Site Web

Re : A chaque usage son plugin

Pour décider quel hook activer, il faut d'abord charger le plugin.

Ce que je propose est d'un niveau plus bas.
Constituer 3 listes de plugins :
* ceux exclusifs à l'admin
* ceux exclusifs au site
* ceux communs aux deux côtés

Pour ne pas tout bouleverser, l'idée est d'ajouter un attribut ou une balise dans infos.xml et de l'enregistrer dans la liste des plugins activés dans le fichier plugins.xml.
Et cette valeur définit les plugins à télécharger dans loadPlugins selon l'existence de la constante PLX_ADMIN.
Cela évite d'aller lire les fichiers des plugins inutiles.

Il revient juste à chaque auteur de plugin de rajouter cet attribut ou cette basile dans leur fichier infos.xml

Hors ligne

#4 15/12/2017 18:17:54

Stéphane
Responsable du projet
Lieu : pas loin de Metz
Inscription : 07/08/2007
Messages : 6 261
Site Web

Re : A chaque usage son plugin

ça me va. et pour gérer la non regression si la balise n'est pas présente dans le fichier .xml on charge pour les 3 cas.
modif très simple à faire et qui ne devrait prendre que quelques lignes de code en plus.
tres bien vu JP. Merci


Mes articles et tutoriels pour PluXml
Pluxopolis mon site sur PluXml, mais pas seulement...
Twitter: @pluxopolis

Hors ligne

#5 17/12/2017 23:37:47

bazooka07
Membre
Lieu : Quelque part en Rhône-Alpes
Inscription : 06/02/2014
Messages : 1 060
Site Web

Re : A chaque usage son plugin

Voir Pull-request https://github.com/pluxml/PluXml/pull/269

copies d'écran :
https://flic.kr/p/HDQA8c
https://flic.kr/p/21fErAF
Exemple de fichier infos.xml d'un plugin

[==infos.xml ==]
<?xml version="1.0" encoding="UTF-8"?>
<document>
    <title><![CDATA[moveMyDatas]]></title>
    <author><![CDATA[Jean-Pierre Pourrez]]></author>
    <version>1.0.0</version>
    <date>16/12/2017</date>
    <site>http://www.kazimentou.fr</site>
    <description><![CDATA[Gérez les dossiers de vos données]]></description>
    <usage>admin</usage>
</document>

La balise usage peut prendre la valeur admin, site, être vide ou absente.

Pour connaitre la liste des plugins chargés côté  site, ajouter la ligne suivante à la fin du fichier footer.php du thème courant et afficher le code source de la page HTML (Ctrl-U) :

[== PHP ==]
<?php echo "<!--\n\$plugins = array(\n\t'".implode("',\n\t'", array_keys($plxShow->plxMotor->plxPlugins->aPlugins))."'\n);\n-->\n"; ?>

En attendant la validation du pull-request, utiliser Git pour tester :

[== bash ==]
https://github.com/bazooka07/PluXml.git -b classification-plugins

Dernière modification par bazooka07 (17/12/2017 23:38:45)

Hors ligne

#6 20/12/2017 00:47:21

bazooka07
Membre
Lieu : Quelque part en Rhône-Alpes
Inscription : 06/02/2014
Messages : 1 060
Site Web

Re : A chaque usage son plugin

La balise <usage> s'appellera <scope> au final.
Ce qui donne pour le plugin moveMyDatas :

[== infos.xml ==]
<?xml version="1.0" encoding="UTF-8"?>
<document>
    <title><![CDATA[moveMyDatas]]></title>
    <author><![CDATA[Jean-Pierre Pourrez]]></author>
    <version>1.0.1</version>
    <date>16/12/2017</date>
    <site>http://www.kazimentou.fr</site>
    <description><![CDATA[Gérez les dossiers de vos données]]></description>
    <scope>admin</scope>
</document>

Hors ligne

Pied de page des forums

A propos Nous soutenir Contact Twitter Google+
Copyright © 2006-2018 PluXml.org, tous droits réservés