Extension de l'Administrateur ProcessWire à l'aide de modules personnalisés

Dans ce didacticiel, nous examinerons comment étendre l’administrateur de ProcessWire à l’aide de modules personnalisés. Avec trois exemples de modules, je vais vous donner un petit aperçu de la puissance des modules ProcessWire pour l’ajout de nouvelles fonctionnalités à l’administrateur..

Créer des pages d'administration personnalisées

La création de pages pour votre site Web dans ProcessWire (PW) ne pourrait être plus simple, mais qu’en est-il de la création de pages personnalisées dans le CMS? Supposons que vous souhaitiez créer une page de paramètres personnalisée, une FAQ ou une page vidéo?

Continuez à lire, nous avons votre dos.

Le module ProcessSimpleAdminPage montre simplement pour créer un module qui étend la classe Process pour ajouter un nouveau processus admin, puis créer une page pour le nouveau processus. Processus est la classe de base pour l'admin du PW, donc en l'utilisant nous pouvons créer une page qui montre notre contenu.

Pointe: Votre nouveau module d’extension de processus peut également afficher des formulaires et d’autres fonctionnalités, ainsi que renvoyer du contenu.

Nous allons créer un nouveau processus qui renvoie du contenu, puis créer une nouvelle page dans la navigation de l'administrateur pour atteindre ce contenu (dans cet exemple, j'ai nommé la page «FAQ du CMS»). Pour construire notre module, nous commençons par créer un fichier appelé «ProcessSimpleAdminPage.module» et en y enregistrant les détails de notre module..

class ProcessSimpleAdminPage étend Process fonction statique publique getModuleInfo () return array ('title' => 'Process Simple Admin Page', 'summary' => 'Module Processus simple qui ajoute une nouvelle page admin avec', 'version' => 001 ,);  fonction publique execute () return ' 

Editez le texte ici dans le module

Lorem ipsum dolor sit amet, consectetur elip adipiscing elit. Nullam mattis eros vitae metus sodales eget suscipit purus rhoncus. Proin ultrices gravida dolor, non porteur enim interdum vitae. Integer feugiat lacinia tincidunt. Nulla laoreet tristique tristique. Sed elementum justo a nisl elementum sit amet accumsan nisi tempor. Nulla quis eros et massa dignissim imperdiet a vitae purus.

';

À ce stade, si nous installions notre module, nous disposerions de tout le nécessaire pour créer notre nouveau processus. ProcessSimpleAdminPage et renvoyer le contenu. Cependant, il n'y a actuellement aucune page pour exécuter notre code. Nous avons plusieurs options pour faire ceci:

  1. Créez manuellement une nouvelle page dans l'arborescence PW sous Admin, donne le gabarit admin et sur le terrain Processus: ProcessSimpleAdminPage. Déplacement de la nouvelle page dans la liste d'arborescence de pages sous Réglages, par exemple, verra la page ajoutée à la navigation supérieure sous Réglages.
  2. Ajouter un pageattribut au module getModuleInfo () tableau. Si le module étend Process (comme le nôtre), alors ajouter un pagetableau d'attributs avec au moins un prénom et parent on install créera automatiquement une nouvelle page d’administrateur sousvotre spécifié parent avec le module comme processus. Voici un exemple tiré du module hello.
  3. Créer installer() et uninstall () fonctions et ajouter la nouvelle page. Ceci est détaillé ci-dessous pour vous montrer comment ajouter une page:
fonction publique install () // crée une nouvelle page à ajouter au CMS $ page = new Page (); // ajouter des attributs de page, j'ai appelé cette page FAQ '$ page-> template = "admin"; $ page-> name = "cms-faq"; $ page-> title = "FAQ du CMS"; $ page-> save (); // définit ce module comme processus de page, cela nous permet d'afficher ce qui précède $ page-> process = 'ProcessSimpleAdminPage'; // récupère la page admin et définit comme page parent $ admin = $ this-> pages-> get ("id = 2"); $ page-> parent = $ admin; // enregistrer la page $ page-> save ();  fonction publique uninstall () // supprime la page créée $ ​​page = $ this-> pages-> get ("name = cms-faq"); if (count ($ page)) $ this-> pages-> delete ($ page, true);  

Allez-y et créez des pages d'administration pour votre site web!

Ajouter un formateur de texte personnalisé

En utilisant Textformatters, vous pouvez manipuler la saisie de champs de texte avec l’administrateur PW. Par exemple, supposons que vous souhaitiez créer des extraits de code ajoutés à la place de quelqu'un tapant leurs propres extraits, c'est parfaitement possible (de la même manière que le plugin hana code for Wordpress)..

Cette fois, j'ai créé un module qui étend une autre classe de base Textformatter pour créer notre nouveau module. TextformatterFindReplace et créé un fichier de configuration séparé:

class TextformatterFindReplace étend Textformatter implémente Module public static function getModuleInfo () return array ('title' => 'TextformatterFindReplace', 'version' => 0.1, 'summary' => "Recherche et remplace toute instance de la saisie de configuration dans la sortie de la configuration ", 'singulier' => vrai,);  / ** * Rechercher et remplacer la chaîne d'entrée * * @ @param string $ str Le bloc de texte à analyser * * La chaîne entrante est remplacée par la version formatée de lui-même. ** / format de la fonction publique (& $ str) $ find = $ this-> findStr; $ str = preg_replace_callback ($ find, array ($ this, "replace"), $ str);  // l'ajout de trois traits de soulignement à une fonction permet aux autres modules de l'accrocher à la fonction publique ___ replace ($ match) return $ this-> replaceStr;  
La classe TextformatterFindReplaceConfig étend ModuleConfig fonction publique getDefaults () return array ('findStr' => '----', 'replaceStr' => 'TEXTE REMPLACÉ',);  / * * getInputfields () * return: $ inputfields * / // crée un formulaire dans PW admin pour permettre la configuration de la fonction publique du module getInputfields () // get module getInputfields définit la classe de configuration $ inputfields = parent :: getInputfields (); // get module InputfieldText $ f = $ this-> modules-> get ('InputfieldText'); $ f-> attr ('nom', 'findStr'); $ f-> label = 'Trouver dans le texte'; $ f-> description = 'Ajoutez un mot ou un motif à rechercher et à remplacer dans votre texte.'; // ajoute une entrée de rôle d'utilisateur pour former config $ inputfields-> add ($ f); // récupère le nouveau module InputfieldText $ f = $ this-> modules-> get ('InputfieldText'); $ f-> attr ('nom', 'replaceStr'); $ f-> label = 'Remplacer le texte'; $ f-> description = 'Texte à afficher au début.'; // ajoute une entrée de redirection de page au formulaire config $ inputfields-> add ($ f); // retourne les entrées de configuration du module return $ inputfields;  

Maintenant, dans les paramètres du module, je peux spécifier une chaîne à comparer et une chaîne pour la remplacer (dans notre exemple ci-dessus, la valeur par défaut est find: ---- et remplacer par TEXTE REMPLACÉ).

Il ne me reste plus qu'à ajouter notre nouveau TextFormatter à un champ de texte dans l'onglet Détails du champ. Maintenant, chaque fois que je tape ---- Je vais obtenir la chaîne de texte remplacée.

Ajouter une nouvelle fonctionnalité aux pages d'administration

Comme l'administrateur PW est lui-même créé à l'aide de la bibliothèque de type API de PW, les modules PW ont à peu près accès à tous les points d'accès..

Pour mon dernier exemple sur l'extension de l'administration de PW, j'ai créé un module qui ajoute des boutons à la page d'édition et à l'arbre de page, crée deux nouveaux champs et les ajoute globalement à chaque page. Il nécessite un autre module, LazyCron, pour fonctionner.

Le module PageDeferredPublish, en cliquant sur l'un des Publier plus tard boutons, configure LazyCron pour vérifier le compte à rebours de cette page toutes les minutes et publie la page lorsque son compte à rebours atteint 0. Cela signifie que je peux publier une page environ 24 heures à l'avance (bien entendu, l'intervalle de vérification et le délai peuvent être modifiés en fonction de vos besoins)..

Je l'ai fait par:

  • Création de deux champs dans mon installer() fonction: un champ de case à cocher à définir sur true lorsqu'un bouton est coché pour indiquer que le compte à rebours de la page doit s'afficher, et un champ de compte à rebours pour enregistrer le compte en secondes pour cette page spécifique.
  • Ajout de points d'ancrage à ProcessPageEdit :: buildForm et ProcessPageListActions :: getExtraActions me permettant d'ajouter les deux boutons.
  • Vérifier si l'un des boutons a été cliqué avec ma fonction ready () puis définir la case à cocher de la page correspondante sur true.
  • Utilisation d'une fonction de raccordement LazyCron pour rechercher les cases à cocher vraies dans toutes les pages non publiées, puis comparaison du champ des secondes pour déterminer si la page doit être publiée. Sinon, déduire le temps écoulé en secondes.

Le résultat est un module qui a des paramètres (l'intervalle de temps à vérifier et à publier ultérieurement), qui se connecte à l'administrateur à l'aide de boutons et de champs et nous permet d'utiliser d'autres modules installés dans PW (c'est-à-dire LazyCron)..

Emballer

Souvent, un module dont vous avez besoin a déjà été créé et peut être téléchargé à partir de la page de module de PW. Cependant, si vous vous trouvez dans le besoin, il est bon de savoir qu'il est relativement facile d'intervenir, d'étendre une classe principale et de créer une nouvelle fonctionnalité qui résout votre problème ou modifie la solution par défaut de PW..

J'espère que vous avez trouvé utile ce petit aperçu de la puissance de l'extension PW, et veuillez consulter les autres didacticiels ProcessWire sur Envato Tuts + pour plus de conseils et astuces..

Ressources utiles

  • Introduction d'un débutant à l'écriture de modules dans ProcessWire
  • Docs du module
  • Configuration personnalisée du module
  • Dépendances de modules
  • Crochets implantables