/ / Créer un système basé sur des plugins comme Wordpress avec Laravel / PHP - laravel, plugins, conception modulaire

Créer un système basé sur des plugins comme Wordpress avec Laravel / PHP - laravel, plugins, modular-design

Cette question me dérange depuis un certain tempstemps maintenant, je veux créer un cms, un système de gestion scolaire pour être plus précis, et ce qui compte le plus pour moi, c'est de faire de ce système un plugin basé, de manière à ce que les administrateurs puissent télécharger et installer des plugins directement via leur panneau d'administration, tout comme wordpress.

Maintenant, j'ai lu sur wordpress Crochets, actes et Les filtres, et en toute honnêteté, je peux dire que je suis juste un peu familier avec leurs fonctionnalités, mais pour appliquer la même fonctionnalité à un Appli Laravel..., c'est un peu difficile à comprendre, du moins pour moi.

J'ai également recherché cette question et trouvéque presque tout le monde suggère des packages, mais alors que les packages peuvent très bien fonctionner pour les autres développeurs souhaitant utiliser les fonctionnalités du package, ils ne peuvent pas être facilement installés par un utilisateur qui ne connaît aucun langage de programmation, et c’est exactement ce que je veux dans mon application.

Maintenant ce que j'ai dans ma tête jusqu'ici, comme dans Actions Wordpress et Les filtres, presque tout ce que l'on voudrait utiliserLes fichiers de thème Wordpress (pour rendre ce morceau de code flexible pour l'ajout de fonctionnalités de plugin) doivent être appelés en tant que fonctions, et appeler cette fonction par Wordpress do_action () est une sorte de chemin incontournable, ce qui a bien sûr du sens.

De cette façon, les développeurs de plugins peuvent simplement appeler add_action () / add_filter () dans leurs fichiers et placer leurs plugins dans le flux de l'application. Donc...

En gros, ce que je demande ici est:

  • Comment appliquer une telle fonctionnalité à une application laravel?
  • Existe-t-il un moyen plus simple que d'appeler tout par une fonction comme do_action ()?
  • Dois-je écrire une sorte de module de gestion de fichiers pour télécharger et mettre à jour des plugins?

Encore une fois, je dois dire que je ne suis pas très familier avecwordpress moyens d'atteindre ce type de fonctionnalité, donc je peux me tromper sur certaines des descriptions que j'ai mentionnées ci-dessus, mais s'il vous plaît, j'apprécie toute clarification sur ce sujet si vous le pouvez.

Merci d'avance pour toute idée.

* P.S. J'ai essayé d'être aussi clair que possible sur le problème, et je ne cherche pas de méthode spécifique pour le système que je développe. Ce que je veux, c'est connaître les méthodes courantes / meilleures (s'il y a une meilleure méthode) pour obtenir une telle fonctionnalité, de préférence dans Laravel, mais un algorithme général serait toujours très apprécié.

Je sais que beaucoup de gens ont la même question et s'attaquent au même problème, donc si vous ne fournissez même qu'un lien vers un article utile, ce serait génial. *

Réponses:

5 pour la réponse № 1

Je travaille en tant que développeur Wordpress depuis très longtemps et j'ai également une expérience suffisante de Laravel ... et pour être honnête, créer ce type de fonctionnalité n'est pas du tout difficile.

Comment?

Tout d'abord, vous devez comprendre que le WebL'application que vous allez créer aura toutes les fonctionnalités, mais elles ne peuvent être activées / désactivées qu'à partir du front-end (panneau d'administration / tableau de bord). En d'autres termes, votre application School Management System a en fait toutes les fonctionnalités / fonctionnalités préinstallées, mais vous autorisez simplement les utilisateurs à l'activer / la désactiver. C'est beaucoup plus simple.

Donc, si pour par exemple. tu veux fournir à quelqu'un attendance management fonctionnalité, vous devrez donner à l'administrateur du site, l'accès pour l'activer / le désactiver.

Pourquoi?

Wordpress a une interface utilisateur intégrée pour l'ajout / la mise à jourplugins. Mais dans Laravel, tout est basé sur du code et je pense donc que c'est le moyen le plus simple (en particulier pour rendre les éléments de votre application enfichables).

Pas

  1. Créer un site avec UI etc ...
  2. Créez un fichier de configuration et de migration qui aura les noms de tous les plugins que vous allez autoriser l'utilisateur à activer / désactiver.
  3. Créez une commande de synchronisation qui synchronisera tous les plugins de votre application.
  4. Utilisez-le pour rendre une page depuis le front-end et gérez leur statut depuis le back-end (is_active etc etc ...)
  5. Maintenant une fois, ces plugins sont actifs, assurez-vous que l'utilisateur (par exemple modérateur, éditeur) a accès pour les gérer, pour lesquels vous devrez évidemment créer des rôles / permissions et utiliser Politiques de Laravel pour de telles choses.
  6. Enfin, seul l'administrateur aura les écritures d'activation / désactivation et personne d'autre.

Pour l'autre partie où vous voulez que les gens remplissent leurs propres fonctions avec filtres/actes. Je dirais que c'est complètement contradictoire avec la partie où vous dites Installing Laravel Packages isn"t easy. Eh bien, si vous voulez vraiment qu'un développeur trouve une solution, pourquoi ne pas lui demander tout de suite de créer un package pour votre application uniquement? Hmmmm .... Pensez-y :)

Mais même dans ce cas, si vous souhaitez créer une telle fonctionnalité, créez une classe simple que l'utilisateur peut appeler et utiliser ses fonctions pour appeler ses propres fonctions ... Quelque chose comme -> SMSPlugin::do_action(). Mais là encore, pour faire des choses comme la mise à jour / la suppression du plugin, vous devrez créer le vôtre Magasin de plugins et demandez aux utilisateurs de le télécharger. Ensuite, vous devrez créer une API pour vérifier en permanence les mises à jour de tous les plugins installés et bla bla .... C'est une procédure vraiment longue ... Et je ne crois pas que cela soit possible aussi!

J'espère avoir répondu à tout. Faites-moi savoir dans les commentaires si vous avez des doutes :)