Difference between revisions of "Adding custom fields to core components using a plugin/fr"

From Joomla! Documentation

Line 5: Line 5:
  
 
==Ajout d'un champ personnalisé==
 
==Ajout d'un champ personnalisé==
Il est recommandé de lire au préalable [[S:MyLanguage/Creating a Plugin for Joomla|Création d'un plugin pour Joomla!]] pour plus d'informations sur la façon de créer et installer un plugin, ce qui n'est pas abordé ici.
+
Il est recommandé de lire au préalable [[S:MyLanguage/Creating a Plugin for Joomla|Création d'un plug-in pour Joomla!]] pour plus d'informations sur la façon de créer et installer un plug-in, ce qui n'est pas abordé ici.
  
 
Pour ajouter un champ à un composant du système, vous devez créer un plugin de contenu qui reprend l'événement onContentPrepareForm et insère ses propres champs au JForm donné. Le code suivant est pour Joomla! 3.1 et versions ultérieures. Pour Joomla! 2.5, les fichiers de langue doivent être chargés dans le constructeur (voir [[S:MyLanguage/J2.5:Creating a Plugin for Joomla|J2.5 : création d'un plugin pour Joomla]]).
 
Pour ajouter un champ à un composant du système, vous devez créer un plugin de contenu qui reprend l'événement onContentPrepareForm et insère ses propres champs au JForm donné. Le code suivant est pour Joomla! 3.1 et versions ultérieures. Pour Joomla! 2.5, les fichiers de langue doivent être chargés dans le constructeur (voir [[S:MyLanguage/J2.5:Creating a Plugin for Joomla|J2.5 : création d'un plugin pour Joomla]]).

Revision as of 15:30, 21 May 2015

Other languages:
Deutsch • ‎English • ‎Nederlands • ‎català • ‎español • ‎français • ‎italiano • ‎português do Brasil • ‎русский • ‎فارسی • ‎हिन्दी • ‎বাংলা • ‎中文(台灣)‎

Avez-vous jamais souhaité ajouter un champ pour un numéro de téléphone supplémentaire dans com_contact ou eu besoin d'un champ supplémentaire pour les articles dans com_content ? Joomla! propose une méthode simple pour intégrer de nouveaux champs aux composants du noyau. Tout ce qu'il faut pour atteindre cet objectif, c'est un simple plug-in de contenu et une substitution de votre template.

Cet article montre comment ajouter un champ supplémentaire à un composant natif en utilisant l'exemple de l'ajout aux contacts d'une adresse de courriel supplémentaire dans com_contact.

Ajout d'un champ personnalisé

Il est recommandé de lire au préalable Création d'un plug-in pour Joomla! pour plus d'informations sur la façon de créer et installer un plug-in, ce qui n'est pas abordé ici.

Pour ajouter un champ à un composant du système, vous devez créer un plugin de contenu qui reprend l'événement onContentPrepareForm et insère ses propres champs au JForm donné. Le code suivant est pour Joomla! 3.1 et versions ultérieures. Pour Joomla! 2.5, les fichiers de langue doivent être chargés dans le constructeur (voir J2.5 : création d'un plugin pour Joomla).

<?php
// no direct access
defined ( '_JEXEC' ) or die ( 'Restricted access' );
class plgContentExample extends JPlugin {
	/**
	 * Load the language file on instantiation.
	 * Note this is only available in Joomla 3.1 and higher.
	 * If you want to support 3.0 series you must override the constructor
	 *
	 * @var boolean
	 * @since 3.1
	 */
	protected $autoloadLanguage = true;
	function onContentPrepareForm($form, $data) {
		$app = JFactory::getApplication();
		$option = $app->input->get('option');
		switch($option) {
			case 'com_contact':
				if ($app->isAdmin()) {
					JForm::addFormPath(__DIR__ . '/forms');
					$form->loadFile('contact', false);
				}
				return true;
		}
		return true;
	}
}
?>

Les champs supplémentaires sont chargés à partir du fichier forms/contact.xml dans le répertoire de plugin. Il est important que ces champs soient dans un élément "fields" avec la propriété "name" définie sur "params". Si vous ne définissez pas cela ainsi, les champs s'afficheront dans l'administration du site mais les valeurs ne seront pas enregistrées.

Dans ce cas, nous ajoutons un champ pour une étiquette afin de décrire le champ courriel sur la partie public du site web et un deuxième champ pour la valeur de l'adresse.

<?xml version="1.0" encoding="UTF-8"?>
<form>
	<fields name="params" >
		<fieldset name="params" >
			<field
				name="contact_emaillabel2"
				type="text"
				label="PLG_CONTENT_EXAMPLE_CONTACT_EMAILLABEL2"
				/>
			<field
				name="contact_email2"
				type="text"
				label="PLG_CONTENT_EXAMPLE_CONTACT_EMAIL2"
				filter="email"
			/>
		</fieldset>
	</fields>
</form>

Enfin, nous avons besoin d'un fichier de langue de sorte que les paramètres soient présentés correctement dans l'administration du site et soient traduisibles dans d'autres langues. Ce fichier doit être nommé quelque chose comme en-GB.plg_content_example.ini.

COM_CONTACT_PARAMS_FIELDSET_LABEL="Additional Information"
PLG_CONTENT_EXAMPLE_CONTACT_EMAIL2="Additional email address"
PLG_CONTENT_EXAMPLE_CONTACT_EMAILLABEL2="Additional email label"

Cela permet d'ajouter le champ au com_contact. Si vous installez ce plugin, vous aurez un onglet supplémentaire dans l'édition du formulaire de contact formulaire nommé "Additional Information" comprenant les nouveaux champs. Si vous remplissez les nouveaux champs d'étiquette et d'adresse de courriel pour un contact, vous verrez que le com_contact va stocker et récupérer les informations pour vous.

Le même plugin peut être utilisé pour ajouter des champs supplémentaires à d'autres composants, il suffit d'ajouter le code à la fonction onContentPrepareForm et de créer les fichiers de formulaire XML appropriés.

Afficher le champ personnalisé

Pour afficher le champ personnalisé, vous devez créer une subsitution de mise en page (layout) dans votre template pour le composant concerné. Pour plus d'informations sur la création de templates, voir création d'un template de base pour Joomla. Pour plus d'informations sur les substitutions de mise en page (layout), voir comprendre les substitutions de sortie.

Copiez le fichier <Joomla>/components/com_contact/views/contact/tmpl/default.php dans <template>/html/com_contact/contact/default.php, créez les dossiers dans votre template si nécessaire. Nous allons modifier ce fichier pour inclure les informations supplémentaires. Le composant com_contact va automatiquement charger les champs supplémentaires et ce, dans une variable nommée $this->params. Tout ce que nous avons à faire est de vérifier que les données sont définies et le cas échéant, de les afficher.

To display the field, find the location in <template>/html/com_contact/contact/default.php that corresponds to where you'd like the additional email address to be displayed and add the following code:

<?php if ($this->params->get('contact_emaillabel2', false)) : ?>
	<div>
		<span class="contact-additionalemail"><?php echo $this->params->get('contact_emaillabel2');?>:&emsp;<a href="mailto:<?php echo $this->params->get('contact_email2'); ?>"><?php echo $this->params->get('contact_email2'); ?></a><br/></span>
	</div>
<?php endif; ?>

Si vous ajoutez ce code et installez votre template, alors le champ personnalisé s'affichera sur la partie publique de votre site.