6 minutes reading time (1113 words)

Ajouter un champ au com_content, la méthode propre

Ajouter un champ au com_content, la méthode propre

J'ai récemment travaillé sur un projet sur lequel je devais ajouter une fonctionnalité pour les témoignages des utilisateurs. Je voulais les afficher en utilisant le format shema.org/Review. En recherchant des solutions, tout ce que je trouvais était trop important pour ce dont j'avais besoin. Mon but était de proposer quelque chose de simple pour que mon client l'utilise, mais également avec la possibilité d'utiliser le bon format. L'approche la plus simple pour mon client était d'ajouter un champ aux Articles (com_content) de Joomla. Bien sûr, je ne souhaitais pas modifier le code du  com_content ou la table #_content dans Joomla. Cela aurait mené vers une lourde maintenance et des problèmes lors des prochaines mises à jour. Donc les plugins viennent à la rescousse.

L'architecture de plugin Joomla! est extrêmement flexible et permet de faire de nombreuses choses sans modifier le code core (natif).

Objectifs du plugin

J'ai décidé les objectifs suivants pour ce plugin :

  1. Ajouter des champs au formulaire existant du gestionnaire d'articles permettant au client d'entrer des données additionnelles pour les témoignages.
  2. Les témoignages devront tous être placés dans une catégorie spécifique ou une de ses catégories enfants.
  3. Afficher les données lorsque la page est affichée sur le Frontend dans le format schema.org/Review.

Je peux remplir les deux premiers buts avec le plugin. Le troisième pourra être résolu en utilisant une surcharge d'affichage.

La structure de fichier

Le plugin aura la structure suivante

ksextras
|-> ksextras.php
|-> ksextras.xml
|-> extras
	|-> ksextras.css
	|-> testimonial.xml
|-> language
	|-> en-GB
		|-> en-GB.plg_content_ksextras.ini
		|-> en-GB.plg_content_ksextras.sys.ini
|-> sql
	|-> install.mysql.utf8.sql
	|-> uninstall.mysql.utf8.sql
	|-> update
		|-> install.mysql.utf8.sql

N'hésitez pas à télécharger ces fichiers à partir de mon compte github, à l'adresse :

https://github.com/katalystsol/plg_content_ksextras

Fichier XML d'installation

https://github.com/katalystsol/plg_content_ksextras/blob/master/plugins/content/ksextras/ksextras.xml

Même si nous n'avons pas le temps de couvrir chaque partie du fichier, nous nous concentrerons sur quelques uns parmi les plus importants.

Le groupe de plugin content indique à Joomla! de quel type est ce plugin, et détermine quel déclencheur nous pouvons utiliser.

Puisque nous allons stocker les données dans une base séparée, nous allons inclure l'option avec les fichiers SQL en relation. Nous incluons également les options pour une utilisation future dans le cas où nous décidions de désinstaller le plugin ou de le mettre à jour. Cette option lancera SQL pour supprimer la table. Le fichier peut contenir le SQL pour mettre à jour le schéma de la table.

Nous allons régler quelques paramètres dans le bloc que nous pourrons utiliser avec le plugin, comme ça nous n'aurons pas à coder en dur cette information dans le code lui-même. Cela va inclure l'Organisation, c'est l'entreprise qui possède le site web. Nous allons inclure plusieurs champs qui sont requis par le format shema.org/Review. Nous pourrons régler la catégorie dans laquelle les champs de témoignages seront affichés et peut-être inclure ses catégories enfants.

Fichier PHP du plugin

Le fichier principal pour le plugin est ksextras.php.

Quelques éléments à remarquer

_construct

Dans la méthode _construct, nous souhaitons seulement utiliser ce plugin pour le composant com_content. Donc nous aurons une option en paramètres, et s'il ne s'agit pas du com_content, nous ferons demi-tour et ne traiterons pas le reste du plugin.

onContentPrepareForm

Cette méthode va préparer le formulaire de champs pour ajouter un écran d'édition au gestionnaire d'article. Il ajoutera le champ complémentaire dans des onglets séparés. Le texte du label pour cet onglet est contrôlé à travers le fichier de langue en utilisant la chaine “PLG_CONTENT_KSEXTRAS_SLIDER_LABEL” dans le fichier principal de langue, le fichier .ini.

Premièrement, nous allons vérifier si l'ID de la catégorie est réglé. Si ce n'est pas le cas, nous avançons et affichons le formulaire de champs supplémentaires car l'utilisateur peut souhaiter le régler pour la catégorie Témoignages. Si la catégorie est réglée sur autre chose que la catégorie désignée dans les paramètres du plugin, les champs supplémentaires ne seront pas affichés.

A partir d'ici, nous obtenons le formulaire de champs à partir du fichier extras/testimonial.xml. Ensuite, s'il y a un ID existant pour l'article, nous sommes dans le mode édition et devons intérroger la base de données pour obtenir les données.

onContentPrepareData

Cette méthode permet de récupérer et de préparer les données.

setKSFields

Cette méthode met en place un tableau de champs pour pouvoir les utiliser dans les données. Nous utilisons ces champs pour les afficher dans le formulaire de données dans le onContentPrepareForm. Si vous modifiez ces champs dans le fichier Form XML (voir ci-dessous), vous devrez ajouter ces champs dans le tableau ksfields. C'est grâce à cela que nous n'aurons pas à ajouter du code à la fin de la méthode onContentPrepareData et cela nous permet de créer des boucles à travers les champs et de définir automatiquement les valeurs.

Pour en savoir plus à propos de cela, vous pouvez regarder :

http://docs.joomla.org/Plugin/Events/Content

Fichier Form XML

Dans les fichiers supplémentaires, nous avons un fichier Jform XML qui définit les champs utilisés pour ce plugin. Ce sont les champs qui seront affichés dans l'onglet de l'édition de l'article. Vous pouvez ajouter des champs ou modifier les champs que vous utilisez. Assurez-vous que la méthode setKSFields correspond aux champs du fichier XML.

Pour en savoir plus sur les différents types de champs, vous pouvez regarder :

http://docs.joomla.org/Form_field

Fichiers de langue

Idéalement, vous allez régler votre plugin pour qu'il puisse accepter différents langages. Vous pouvez faire cela à travers les fichiers ini placés dans language/en-GB/en-GB.plg_content_ksextras.ini.

Usage: Layout Overrides

Pour utiliser les champs dans les sorties de votre site, vous devrez créer une surcharge de layout.

Accessing Articles Attributes / KSExtras data

Pour accéder aux données de la surcharge de votre article, vous pouvez utiliser quelque chose similaire au code suivant :

$ksattribs = json_decode($this->item->attribs);
$testimonial_by = $ksattribs->testimonial_by;
$author_job_title = $ksattribs->author_job_title;

Si vous utilisez ceci dans une surcharge de module, votre code sera légèrement différent. A la place de “$this->item->”, vous utiliserez “$item->”.

$ksattribs = json_decode($item->attribs);
$testimonial_by = $ksattribs->testimonial_by;
$author_job_title = $ksattribs->author_job_title;
 

Accessing Plugin Parameters:

Pour obtenir les paramètres du plugin, vous pouvez utiliser quelque chose comme :

$plgParams = new JRegistry();
$plugin = JPluginHelper::getPlugin('content', 'ksextras');
if ($plugin && isset($plugin->params))
{
    $plgParams->loadString($plugin->params);
}
$this->organization = $plgParams->get('organization', 'org was not found');
$this->organization_type = $plgParams->get('organization_type', 'Organization');

Pour en connaitre d'avantage sur les surcharges, vous pouvez visiter :

http://docs.joomla.org/Layout_Overrides_in_Joomla

Une fois que vous installez le plugin, vous devrez premièrement régler les paramètres pour ce plugin en vous rendant dans Extensions => Gestion des plug-ins.

Conclusion

Même si nous avons couvert de nombreuses parties, je suis sûr qu'il y a de nombreuses manières pour améliorer ce plugin.
Donc, expérimentez et faites-vous plaisir !

Traduction libre par Simon Grange de l'article original : Adding Fields to com_content The Smart Way par Don Cranford
0
Joomla! pour mon entreprise (partie 2)
CMS-Garden en plein essor !
 

Comments

Already Registered? Login Here
No comments made yet. Be the first to submit a comment

By accepting you will be accessing a service provided by a third-party external to https://magazine.joomla.org/