4 raisons de choisir ProcessWire comme prochain CMS

Il y a quelques semaines, je suis tombé sur un article de A List Apart intitulé «Gestion de votre système de gestion de contenu». Il donne des recommandations sur la manière de limiter et d'adapter la liberté des utilisateurs dans un back-end de système de gestion de contenu (CMS) afin de le rendre aussi facile que possible à utiliser.. 

En lisant ces recommandations et en les comparant aux possibilités techniques des principaux acteurs du paysage actuel des systèmes de gestion de contenu, je constate de nombreuses limites. La plupart de ces CMS ne disposent tout simplement pas de ce type de fonctionnalités et ne peuvent pas fournir le niveau d'options permettant de personnaliser de manière optimale une interface utilisateur back-end. Mais en travaillant avec ProcessWire depuis quelques années maintenant, je pense avoir trouvé le refuge pour les développeurs et les utilisateurs qui veulent exactement cela..

ProcessWire est un CMS PHP et un système de gestion de contenu (Content Management Framework) CMF (Content Management Framework) gratuits et à venir. Il repose essentiellement sur quelques concepts simples et fournit des outils extrêmement faciles à utiliser et extrêmement puissants. Dans cet article, je souhaite vous présenter certains de ces outils et concepts. Voici quatre raisons de choisir ProcessWire comme prochain CMS.

1. Il est basé sur trois concepts de base simples: pages, champs et modèles.

L'entrée et la sortie des données sont basées sur seulement trois concepts de base, et rien d'autre. Cela signifie qu'une fois que vous avez compris ces concepts, vous comprenez en gros tout ce qui concerne ProcessWire et la philosophie qui le sous-tend. Assez cool, non? Alors, laissez-moi vous présenter des pages, des champs et des modèles.

Des pages

Sur la page de démarrage de votre installation ProcessWire, vous voyez une seule arborescence de pages hiérarchique:

Les liens que vous voyez dans l’arbre sont appelés des pages. Les pages dans le back-end reflètent généralement la page vue dans le front-end. Par exemple, la page «À propos de» de la capture d’écran est accessible en mode frontal en ouvrant votre-domaine.com/about/

Mais les pages ne doivent pas nécessairement avoir une contrepartie sur le front-end. Ils peuvent également simplement exister dans le back-end et servir de conteneurs de données pour d'autres pages. Laissez couler la phrase que vous venez de lire: Le concept de pages uniquement disponible dans le back-end est assez puissant car il ouvre des possibilités infinies pour structurer votre site Web et interagir avec les données saisies..

Vous pouvez et devez utiliser des pages pour presque tout. Par exemple, vous pouvez avoir une page de paramètres masquée, dans laquelle vous enregistrez des éléments tels que la navigation principale ou un texte général tel que le nom, le slogan, la mention de copyright, etc. de votre site Web. Un autre exemple serait les balises et les catégories d'articles de blog (équivalentes aux taxonomies dans WordPress). Vous ne feriez que créer des pages pour chaque tag ou catégorie d'un article de blog. Permettez-moi de citer Joss Sanglier en ce qui concerne les pages de ProcessWire:

Les pages dans ProcessWire sont utilisées pour toutes sortes de choses. Ils peuvent être utilisés comme un marqueur dans votre liste de pages. Ils peuvent être utilisés en tant que parent de groupe pour d'autres pages. Ils peuvent être utilisés en tant que catégories, balises, listes ou utilisateurs. Et ils peuvent même être utilisés pour de simples sélections par liste déroulante - juste pour fournir une étiquette et une valeur..

Ouvrons et modifions la page "À propos" susmentionnée..

Vous examinez maintenant le prochain concept de base de ProcessWire: champs.

Des champs

Les pages contiennent des champs. Mais les champs doivent être vus sous deux angles différents. Optiquement, ils font partie de la page, car lorsque vous ouvrez une page, vous voyez des champs avec lesquels vous pouvez travailler. Techniquement, ces champs font partie du modèle de la page. Je décrirai le concept de modèles plus tard. comprenons d'abord les champs.

Les champs dans ProcessWire sont les conteneurs dans lesquels vous insérez des données ou dans lesquels vous sélectionnez des données, telles que du texte, des zones de texte, des nombres, des courriels, des téléchargements de fichiers, d'autres pages, etc. Le nombre de champs qu'une page contient dépend entièrement de vous. Il peut n’en avoir qu’un seul (par exemple un champ pour le titre de la page), ou aucun champ que ce soit (peu pratique), ou plus de 50 ou 100 champs. 

ProcessWire n’a pas la notion de champs personnalisés, contrairement à WordPress, car chaque champ de ProcessWire est un champ personnalisé. Vous créez un champ et décidez quel type vous souhaitez (voir capture d'écran ci-dessous). C'est tout!

Vous pouvez attribuer à un champ une étiquette, une description et des notes pour des informations supplémentaires qui apparaissent en dessous. Chaque type de champ a ses propres paramètres. Examinons trois types de champs et certains paramètres que vous pouvez définir pour vous en faire une idée:

  • Textarea type de champ: Vous pouvez décider s'il est rendu comme un texte simple ou comme un éditeur de texte enrichi (CKEditor par défaut). Vous pouvez décider quels boutons doivent apparaître dans la barre d’outils de CKEditor et même saisir des options de configuration personnalisées directement dans l’interface graphique d’administrateur..
  • Page type de champ: vous pouvez lier une page à une autre et créer ainsi une relation entre elles. Vous pouvez lier une page (relation un à un) ou plusieurs pages (relation un à plusieurs). Vous pouvez même autoriser la création de nouvelles pages à partir d'un champ de page.
  • Image type de champ: Vous pouvez spécifier quel type d'image (extension) peut être chargé. Vous pouvez spécifier la hauteur et la largeur minimales et / ou maximales nécessaires pour le téléchargement..

La ligne de fond est la suivante: chaque champ que vous créez est hautement personnalisable pour répondre exactement à vos besoins et aux besoins des personnes qui créent et modifient le contenu dans les éléments suivants:.

Mais comment une page sait-elle quels champs elle a en elle-même? Alors, regardons les modèles.

Modèles

Lorsque vous créez une nouvelle page, vous devez sélectionner un modèle. Le modèle contient toutes les informations dont la page a besoin pour connaître son contenu (quels sont ses champs, comment ces champs sont rendus et comment ils se comportent).

Ci-dessous, vous voyez les champs du modèle page de base.

Un clic sur un champ ouvre une fenêtre modale dans laquelle vous pouvez modifier les paramètres du champ avec précision pour ce modèle..

Un modèle peut être associé à un fichier physique PHP du même nom. Ces fichiers modèles sont situés dans / site / templates /. Dans un tel fichier, vous écrivez le code PHP et le balisage HTML qui affichent le contenu de la page et rendent les éléments qu'un visiteur voit sur la page de votre site Web.. 

Si un modèle ne possède pas un tel fichier, une page qui lui est associée ne peut pas être rendue seule dans le frontal. Cela ne signifie pas que vous ne pouvez pas obtenir les données de cette page et les exporter ailleurs: vous pouvez le faire en utilisant un fichier de modèle existant d'une autre page..

Résumons les relations techniques entre les pages, les champs et les modèles: vous ajoutez des champs aux modèles et vous sélectionnez un modèle lorsque vous créez de nouvelles pages. Les champs que vous voyez lors de l'édition d'une page sont les champs que vous avez ajoutés au modèle sélectionné..

2. Il a une API à tomber en amour avec

Le code dans vos fichiers modèles sera principalement composé de quelques constructions PHP basiques telles que l’assignation de valeurs à des variables, si conditions, pour chaque les boucles et le balisage HTML, d'une part, et l'utilisation de l'API ProcessWire, d'autre part. 

Vous pouvez considérer l’API comme un jQuery pour PHP. Il fournit des méthodes, des sélecteurs, des fonctions de chaînage (interface fluide) et de parcours..

L’API est probablement la chose qui me surprend le plus à propos de ProcessWire: c’est simple à utiliser, facile à comprendre, expressif et puissant à la fois. Mais surtout, il vous permet de vous développer rapidement et facilement, et vous avez en fait amusement interagir avec elle. C'est logique.

L'API Cheatsheet est une excellente référence. Il montre toutes les méthodes disponibles, vous pouvez travailler avec.

Permettez-moi maintenant de vous présenter les deux variables exposées à l'API que vous allez traiter le plus pendant le développement de modèles: $ page et $ pages.

La variable $ page

le $ page La variable contient tous les champs spécifiques à la page affichée. Cela inclut les champs intégrés, qui sont communs à toutes les pages, ainsi que les champs spécifiques à cette seule page..

Mais comment accéder aux champs d'une page? Voyons maintenant quelques exemples simples..

Affiche le contenu du champ de texte nommé Titre:

echo $ page-> get ("titre"); // ou echo $ page-> title;

Affichez le nom du modèle de la page:

echo "Cette page utilise le template:". $ page-> template-> name; // ou echo "Cette page utilise le modèle: $ page-> modèle-> nom";

Générez une navigation dans le fil d'Ariane:

écho "
    "; foreach ($ page-> parents en tant que $ parent) echo"
  • url "> $ parent-> titre
  • "; écho "
";

Depuis la version 2.5.27, vous pouvez également écrire ce qui précède comme suit:

écho "
    "; echo $ page-> parents-> chacun ("
  • Titre
  • "); écho "
";

Produire une image uniquement si elle a effectivement été téléchargée:

if ($ page-> image) echo "";

Remarque: vous devez configurer votre champ d'image pour qu'il ne contienne qu'une image pour que cela fonctionne..

Vous trouverez ci-dessous quelques exemples de cas où un champ d'image est défini pour contenir plusieurs images..

Prenez et sortez la première image:

$ image = $ page-> images-> first (); if ($ image) echo "";

Prenez et sortez une image aléatoire:

$ image = $ page-> images-> getRandom (); if ($ image) echo ""; 

Parcourez toutes les images, créez une grande image avec une largeur de 500 pixels avec une hauteur proportionnelle et une vignette en 100 × 100 avec des paramètres de qualité et de rognage spécifiques, puis indiquez le lien de la vignette vers la grande variante:

$ options = array ("quality" => 90, "rognage" => "sud-est"); foreach ($ page-> images en tant que $ image) $ large = $ image-> width (500); $ thumb = $ image-> taille (100, 100, $ options); echo "url">"; 

Remarque: ProcessWire créera vos images à n’importe quelle taille à la volée, puis en gardera une mémoire cache..

La variable $ pages

le $ pages variable est une référence de toutes les pages de votre site. Cela vous permet d'accéder à tout le contenu et aux pages de votre site, où que vous soyez..

Pour les exemples suivants, je me référerai au site de démonstration standard de ProcessWire, qui propose une collection de gratte-ciels aux États-Unis..

Obtenir une page spécifique et afficher son titre:

echo $ pages-> get ("/ villes / chicago / sears-tower /") -> titre;

Remarque: / villes / chicago / tour sears / est le chemin complet pointant vers la page de la tour Sears dans la hiérarchie de l'arborescence des pages de ProcessWire.

Trouvez tous les gratte-ciel dont la hauteur est supérieure à 500 ft et inférieure ou égale à 1 000 ft:

$ skyscrapers = $ pages-> find ("template = gratte-ciel, hauteur> 500, hauteur<=1000");

Remarque: la taille est un champ contenu dans le modèle gratte ciel.

Trouvez tous les gratte-ciel construits avant 1950 avec plus de 10 étages, triés par année, puis par étage:

$ skyscrapers = $ pages-> find ("template = gratte-ciel, année<1950, floors>= 10, sort = -year, sort = -floors ");

Remarque: année et les planchers sont des champs contenus dans le modèle gratte ciel.

Trouvez tous les gratte-ciel de Chicago avec plus de 60 étages triés par ordre croissant:

$ skyscrapers = $ pages-> get ("/ cities / chicago /") -> find ("floors> = 60, sort = floors");

Trouvez tous les gratte-ciel des architectes David Childs ou Renzo Piano et triez-les par hauteur en descendant:

$ david = $ pages-> get ("/ architects / david-childs /"); $ renzo = $ pages-> get ("/ architects / renzo-piano /"); $ skyscrapers = $ pages-> find ("template = gratte-ciel, architectes = $ david | $ renzo, sort = -height");

Remarque: architectes est un champ contenu dans le modèle gratte ciel.

3. Il repose sur une architecture modulaire et facilement extensible.

ProcessWire lui-même consiste en un petit noyau (essentiellement l’essentiel de ProcessWire qui permet les fonctionnalités de base) et un ensemble de modules pré-packagés, fournis avec chaque installation. Certains de ces modules de base sont installés et d'autres sont désinstallés par défaut. Pensez aux modules ProcessWire en tant que plugins WordPress: ils étendent et personnalisent le système.

La nature modulaire de ProcessWire présente quelques avantages intéressants:

  • La base de code est plus maintenable car les fonctionnalités de base sont isolées et découplées des autres parties du système, ce qui augmente également considérablement le Sécurité.
  • Le développement de nouvelles fonctionnalités est en train d'être simplifié, et les bugs peuvent être ciblés et corrigés beaucoup plus facilement et rapidement.
  • Les mises à niveau vers les versions les plus récentes de ProcessWire ou de modules individuels ne posent généralement pas de problèmes, et vous n'avez pas à vous inquiéter du fait que tout est cassé après une mise à niveau.

Installation de modules

L’installation d’un module est aussi simple que de faire glisser ses fichiers vers le / site / modules / répertoire puis en cliquant sur Installer dans l'interface graphique d'administration. Mais il existe en réalité beaucoup plus de façons d'installer un module à partir du répertoire modules. 

Par exemple, vous pouvez installer le gestionnaire de modules, qui vous permet de parcourir, télécharger, installer et mettre à jour des modules directement dans l'interface graphique de l'administrateur..

Quantité de modules: Qualité sur quantité

Au moment de la rédaction de ce manuel, il existe environ 370 modules pour ProcessWire. Vous pouvez maintenant comparer ce nombre aux quelque 40 500 plugins WordPress existants, et cette comparaison est en effet intéressante et révélatrice en même temps. Ensuite, on peut tirer quelques conclusions sur la nature générale de ProcessWire et de ses modules, et sur leur comparaison avec les plugins d’autres CMS:

  • ProcessWire n’est pas aussi populaire et répandu que WordPress, Joomla, Drupal et d’autres.
  • Les modules ProcessWire ont généralement une qualité de code assez élevée. Ils font une chose et le font bien.
  • Le cœur de ProcessWire est si puissant et flexible qu’il n’est tout simplement pas nécessaire d’ajouter une tonne de modules supplémentaires pour l’étendre. Par exemple, vous n'avez pas besoin de modules pour créer des diaporamas de galeries, de modules pour obtenir le premier enfant de quelque chose, de modules pour générer des vignettes, etc. Tout cela (et bien plus encore) est déjà couvert par les fonctionnalités de base de ProcessWire..

Crochets

Bien que les points d'ancrage soient un sujet assez avancé, il convient de noter que cela montre que les fonctionnalités de ProcessWire sont censées être très faciles à modifier et à étendre. ProcessWire contient des centaines de méthodes auxquelles vous pouvez vous connecter, afin de modifier le comportement d'une méthode..

Supposons que nous ayons créé un formulaire de contact simple à l'aide de l'API ou du Form Builder, et que certains champs sont marqués comme requis par le back-end. Nous voulons également ajouter le balisage frontal HTML5 approprié aux champs de formulaire requis. ProcessWire rend cela assez facile. Nous nous connectons simplement à la méthode de rendu des champs de saisie et définissons ce que nous voulons personnaliser: Demandez si le champ est obligatoire, ajoutez l'attribut frontal souhaité et placez un astérisque à la fin du libellé de saisie..

$ formes-> addHookBefore ("Inputfield :: render", fonction ($ événement) $ champ = $ événement-> objet; if ($ champ-> requis) $ champ-> attr ("requis", "requis" ); $ field-> label. = "*";);

4. Il ne vous gêne pas et fournit des outils pour créer des interfaces personnalisées et conviviales

Une des principales choses que les gens aiment chez ProcessWire: Ça ne vous gêne pas. Il se comporte comme vous le souhaitez et s'adapte à votre style de développement de site Web. 

Par exemple, vous avez un contrôle total sur la sortie du balisage et vous n'êtes pas obligé de développer un modèle spécifique sur le système de fichiers. Si vous connaissez le style de développement WordPress, vous pouvez continuer comme d'habitude. Ou si vous souhaitez créer une architecture plus sophistiquée, vous pouvez utiliser une approche inspirée de MVC, et cela fonctionnera tout aussi bien..

Comme je l'ai mentionné précédemment, les pages n'ont pas un ensemble de champs obligatoires pour permettre à ProcessWire de comprendre la structure d'une page. (Du moins non visibles. Il y a quelques champs intégrés tels que des références au parent de la page ou au nombre d'enfants de la page, etc.) Vous pouvez mettre 100 champs sur une page si vous le souhaitez, ordonnez-les comme vous le souhaitez vous voulez spécifier quels sont les éléments requis et ceux qui ne le sont pas et vous pouvez les placer dans différents ensembles de champs ou onglets pour une meilleure expérience d'interface utilisateur.

L’autre chose que les gens aiment beaucoup dans ProcessWire: Il fournit naturellement des outils pour créer des interfaces personnalisées et conviviales. Je vous ai donné un aperçu de cela dans le paragraphe précédent. Le niveau de personnalisation des modèles est époustouflant. Une fois que vous en aurez fait l'expérience, vous comprendrez pourquoi ProcessWire est plus un CMF qu'un CMS.. 

Par exemple: Chaque champ est associé à un contexte spécifique au modèle. Cela signifie que vous pouvez spécifier qu'un même champ a une étiquette, une description et un comportement donnés dans un modèle, ainsi qu'une étiquette, une description et un comportement complètement différents dans un autre modèle..

Les dépendances de zone de saisie constituent un autre exemple: elles vous permettent de spécifier les conditions dans lesquelles un champ particulier de l’éditeur de page est affiché ou requis..

Et un autre exemple est le module PageTableExtended: il permet à un utilisateur de visualiser, éditer et modifier les différentes parties de la page de votre site Web (que vous définissez en tant que développeur) de manière visuelle et intuitive..

C'est pour moi la définition d'élégante et profondément responsabilisante.

Conclusion

Cet article ne peut qu'effleurer ce que vous pouvez faire avec ProcessWire et ce qu'il a à offrir. La liste des fonctionnalités intéressantes est, en termes simples, trop longue et dépasserait le cadre de cet article. Laissez-moi vous en donner un aperçu:

  • ProcessWire dispose d'excellents mécanismes de mise en cache (par exemple, cache de modèle et de balisage ou ProCache) et fonctionne très bien. L'évolutivité est également assez impressionnante. Vous pouvez littéralement avoir des millions de pages sur une seule installation.
  • ProcessWire a une communauté petite mais fantastique. Le forum de discussion est le lieu central pour discuter des questions et des problèmes.
  • ProcessWire a un support stellaire multilingue. Les modules multilingues font partie des modules de base pré-emballés. C'est très facile à installer et à entretenir.
  • ProcessWire dispose d'excellentes fonctionnalités intégrées de gestion des utilisateurs avec des paramètres très détaillés et faciles à gérer en même temps. Par exemple, vous pouvez créer un rôle pour les utilisateurs qui ont le droit exclusif de modifier des champs en français, et dans aucune autre langue..
  • Vous pouvez choisir parmi de nombreux thèmes d'administrateur pour modifier l'apparence de l'interface graphique d'administration..
  • La sécurité est une priorité absolue pour ProcessWire.
  • ProcessWire a une feuille de route transparente et le développement est très actif. Il y a de nouvelles versions mineures presque chaque semaine.

Plus vous utilisez ProcessWire et plus vous intériorisez les concepts de base, l'API et son architecture modulaire, plus vous aurez du plaisir à l'utiliser. Vous vous rendrez compte à quel point les outils et les workflows de ProcessWire sont incroyablement puissants. On pourrait dire que la seule chose qui vous empêche d'atteindre un certain objectif avec ProcessWire est votre propre imagination..

Permettez-moi de terminer en citant le créateur de ProcessWire, Ryan Cramer: 

ProcessWire est un système qui vous récompense en étant curieux. Notre objectif est de vous montrer comment pêcher pour attraper le gros poisson.

Où aller en partant d'ici

Liens utiles et outils autour de ProcessWire: 

  • La section documentation du site Web de ProcessWire est un excellent moyen de commencer votre aventure pour en apprendre davantage sur ProcessWire. Vous y trouverez des informations sur l'API, la structure des répertoires, les fichiers modèles, les sélecteurs, la prise en charge multilingue et la sécurité..
  • ProcessWire Weekly est la source hebdomadaire de nouvelles et de mises à jour de ProcessWire.
  • ProcessWire.tv est une collection interrogeable de vidéos de tutoriel ProcessWire..
  • wireshell est une interface de ligne de commande pour ProcessWire basée sur le composant Symfony Console.
  • Padloper est une plateforme de commerce électronique basée sur ProcessWire..
  • ProcessWire Module Generator est un moyen visuel de commencer le développement de modules avec de nombreuses bonnes pratiques de développement de modules.
  • ProcessWire Recipes est un répertoire qui vise à rassembler des mini-tutoriels pour les tâches et problèmes ProcessWire courants et pas si communs, présentés dans un format concis et concis pour vous aider à développer votre maîtrise de ProcessWire..
  • ProcessWire Cheatsheet est un aide-mémoire très utile pour toutes les méthodes d'API disponibles..
  • Visitez grap.pw pour télécharger la dernière version stable de ProcessWire..
  • Vous trouverez de nombreux contenus utiles et intéressants sur le contenu le plus apprécié des forums de discussion officiels de ProcessWire..
  • Découvrez ce que les autres ont à dire sur ProcessWire dans les revues ProcessWire.
  • Découvrez quelques sites propulsés par ProcessWire.