Recommandations pour le développement de plugins¶
En plus des Standards de Développement Elgg (Elgg Coding Standards), voici les recommandations pour créer des plugins. Les plugins du noyau sont mis à jour vers ce format et tous les auteurs de plugins devraient suivre ces recommandations pour leurs propres plugins.
Voir aussi
Assurez-vous de suivre Squelette du plugin pour la structure de votre plugin.
Avertissement
Contenus
Utilisez le routage standard avec vos gestionnaires de pages¶
Exemple : plugin Bookmarks (Signets)
- Les gestionnaires de pages devraient accepter le standard d’URLs suivant :
Objectif
URL
Tout
page_handler/all
Utilisateur
page_handler/owner/<username>
Contacts de l’utilisateur
page_handler/friends/<username>
Entité unique
page_handler/view/<guid>/<title>
Ajouter
page_handler/add/<container_guid>
Modifier
page_handler/edit/<guid>
Liste du groupe
page_handler/group/<guid>/owner
Incluez les scripts du gestionnaire de page à partir du gestionnaire de page. Presque tous les gestionnaires de page doivent avoir un script de gestionnaire de page. (Par exemple :
bookmarks/all
=>mod/bookmarks/views/default/resources/bookmarks/all.php
)Passez des arguments tels que des guids d’entités à la vue de la ressource via
$vars
danselgg_view_resource()
.Appelez
elgg_gatekeeper()
etelgg_admin_gatekeeper()
dans la fonction du gestionnaire de page si nécessaire.L’URL de groupe doit utiliser des vues telles que
resources/groups/*.php
pour afficher des pages.Les gestionnaires de pages ne devraient pas contenir de HTML.
Si vous mettez à niveau un plugin 1.7, mettez à jour les URLs dans tout le plugin. (N’oubliez pas d’enlever
/pg/
!)
Utilisez les gestionnaires de pages standardisés et les scripts¶
Exemple : plugin Bookmarks (Signets)
Stockez les fonctionnalités des pages dans
mod/<plugin>/views/default/resources/<page_handler>/<page_name>.php
Utilisez
elgg_view_resource('<page_handler>/<page_name>')
pour les afficher.Utilisez la disposition de page de contenu dans les scripts du gestionnaire de pages :
$content = elgg_view_layout('content', $options);
Les scripts de gestionnaires de pages ne devraient pas contenir de HTML
Appelez
elgg_push_breadcrumb()
dans les scripts du gestionnaire de pages.Nul besoin de s’inquiéter de définir le propriétaire de la page si les URLs sont dans le format standardisé
Pour le contenu du groupe, vérifiez le conteneur
container_guid
en utilisantelgg_get_page_owner_entity()
La vue object/<subtype>¶
Exemple : plugin Bookmarks (Signets)
Assurez-vous qu’il existe bien des vues pour
$vars['full_view'] == true
et$vars['full_view'] == false
Vérifiez l’objet dans
$vars['entity']
. Utilisezelgg_instance_of()
pour vous assurer qu’il s’agit du type d’entité que vous souhaitez. Renvoyeztrue
pour court-circuiter la vue si l’entité est manquante ou erronée.Utilisez les vues du nouveau corps de liste et des métadonnées de liste pour aider au formatage. Vous devriez n’utiliser quasiment aucun balisage dans ces vues.
Mettez à jour la structure pour les actions - Exemple : le plugin Bookmarks.
Fichiers d’action et noms d’action de l’espace de noms (exemple :
mod/blog/actions/blog/save.php
=>action/blog/save
)- Utilisez les URLs d’action suivantes :
Objectif
URL
Ajouter
action/plugin/save
Modifier
action/plugin/save
Supprimer
action/plugin/delete
Faites que l’action de suppression accepte
action/<handler>/delete?guid=<guid>
de sorte que le menu des métadonnées de l’entité ait la bonne URL par défautSi vous installez un plugin 1.7, remplacez les appels vers les fonctions dépréciées en 1.7 car ceux-ci produiront des erreurs visibles sur chaque chargement de page en 1.8
Actions¶
Les actions sont des états transitoires pour effectuer une action telle que la mise à jour de la base de données ou l’envoi d’une notification à un utilisateur. Utilisées correctement, les actions fournissent un niveau de contrôle d’accès et de prévention contre les attaques CSRF.
Les actions nécessitent que les jetons d’action (CSRF) soient soumis via GET/POST, mais ceux-ci sont ajoutés automatiquement par elgg_view_form(), et à l’aide de l’argument is_action
de la vue output/url
.
Meilleures pratiques pour les actions¶
Les fichiers d’action sont inclus dans le système d’action de Elgg ; comme les vues, ce ne sont pas des scripts classiques exécutables par les utilisateurs. Ne démarrez pas le noyau de Elgg dans votre fichier et ne renvoyez pas les utilisateurs directement vers ce fichier.
Comme les actions sont sensibles au temps, elles ne conviennent pas aux liens dans les e-mails ou autres notifications retardées. Un exemple de cela serait des invitations à rejoindre un groupe. La façon propre de créer un lien d’invitation est de créer un gestionnaire de page pour les invitations et les e-mails qui serait lié à l’utilisateur. Il incombe alors au gestionnaire de page de créer les liens d’action pour qu’un utilisateur accepte ou ignore la demande d’invitation.
Considérez que les actions peuvent être soumises par le biais de requêtes XHR, pas seulement par des liens ou des envois de formulaires.
Appeler directement un fichier¶
C’est très simple : Ne le faites pas. À l’exception de l’intégration d’applications tierces, il n’y a pas de raison d’appeler directement un fichier dans le répertoire des plugins.
Recommandé¶
Ces points sont de bonnes idées, mais ne sont pas encore dans les recommandations officielles. Suivre ces suggestions aidera à garder votre plugin compatible avec le noyau de Elgg.
Mettez à jour les vues du widget (voir les widgets du blog ou des fichiers)
Mettez à jour le “widget” du profil du groupe en prenant exemple sur les plugins blog ou file
- Mettre à jour les formulaires
Déplacez le corps des formulaires vers
/forms/<handler>/<action>
pour utiliser le nouveauelgg_view_form()
d’EvanUtilisez les vues de saisie dans le corps des formulaires, plutôt que du html
Ajoutez une fonction qui prépare le formulaire (voir
mod/file/lib/file.php
pour un exemple)Intégrez des formulaires persistants (voir l’action de téléchargement du plugin de fichier et la fonction de préparation de formulaire)
- Nettoyez le CSS/HTML
Devrait être en mesure de supprimer presque tous les CSS (recherchez des motifs qui peuvent être déplacés dans le noyau si vous avez besoin de CSS)
Utilisez les traits- d’union plutôt que les traits de soulignement (« underscore ») dans les classes/ids
Mettez à jour le fichier
manifest.xml
au format 1.8. Utilisez http://el.gg/manifest17to18 pour automatiser ceciN’utilisez pas la catégorie
bundled
avec vos plugins. Elle est réservée aux plugins distribués avec Elgg- Mettez à jour les fonctions dépréciées dans 1.8.
De nombreuses fonctions d’enregistrement ont simplement ajouté un préfixe
elgg_
pour la cohérenceVoyez
/engine/lib/deprecated-1.8.php
pour la liste complète. Vous pouvez également définir le niveau de débogage sur warning (avertissements) pour obtenir des rappels visuels de fonctions obsolètes
N’utilisez pas
register_shutdown_function
car vous pourriez ne plus avoir accès à certaines parties de Elgg (par ex. la base de données). Utilisez plutôt l’événementshutdown
system