Recommandations pour le développement de plugins
En plus des Standards de Développement Elgg - Elgg Coding Standards -, voici des 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
Contenu
Utilisez le routage standardisé avec vos gestionnaires de pages
Exemple : plugin des signets - Bookmarks
- Les gestionnaires de pages devraient accepter le standard d’URLs suivant :
Objectif
URL
Tout
page_handler/all
Utilisateur
page_handler/owner/<username>
Contacts du membre
page_handler/friends/<username>
Entité unique
page_handler/view/<guid>/<title>
Ajout
page_handler/add/<container_guid>
Modification
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. (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 d’un groupe doit utiliser des vues telles que
resources/groups/*.php
pour afficher des pages.Les gestionnaires de pages ne devraient pas contenir de HTML.
Utilisez les gestionnaires de pages standardisés et les scripts
Exemple : plugin des signets - Bookmarks
Enregistrez 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 par défaut dans les scripts du gestionnaire de pages :
$content = elgg_view_layout('default', $options);
Les scripts de gestionnaires de pages ne devraient pas contenir de HTML
Appelle
elgg_push_entity_breadcrumbs()
ouelgg_push_collection_breadcrumbs()
dans les scripts du gestionnaire de page.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 des signets - Bookmarks
Assurez-vous qu’il existe bien des vues pour
$vars['full_view'] == true
et$vars['full_view'] == false
Recherchez 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 nouvelles vues de liste du corps et de liste des métadonnées 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
Ajout
action/plugin/save
Modification
action/plugin/save
Suppression
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éfaut
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
.
Bonnes 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.
Parce que 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. Une manière 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 des plugins blog ou file)
Mettez à jour le “widget” du profil de groupe en utilisant des plugins de blog ou de fichiers comme exemple
- Mettre à jour les formulaires
Déplacez les corps de formulaire vers la vue
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 (voyez
mod/file/lib/file.php
pour un exemple)Rendez vos formulaires persistants (voyez l’action de téléchargement du plugin file et la fonction de préparation du 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 - underscores - dans les classes/ids
N’utilisez pas la catégorie
bundled
avec vos plugins. Elle est réservée aux plugins distribués avec ElggN’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