Affichage automatique des champs

Chacun des champs disponibles possède un paramètre intitulé Affichage automatique qui peut être réglé sur l'une des valeurs suivantes :

  • Après le titre
  • Avant le contenu affiché
  • Après le contenu affiché
  • Ne pas afficher automatiquement

Si ce dernier élément est sélectionné, le champ ne s'affiche pas à moins de créer une surcharge de template pour gérer vous-même l'affichage. Vous pouvez aussi ajouter dans un article pour placer le champ où vous le souhaitez. Mais il faut alors penser à le faire dans chaque article.

Cet exemple montre comment créer une surcharge de template pour un contact. Les méthodes s'appliquent aussi aux composants Contenu et Utilisateur.

Créer une surcharge de template

Depuis le menu Administration :

  • Sélectionner Système / Templates du site / Détails et fichiers de Cassiopeia
  • Sélectionner l'onglet Créer des surcharges.
  • Sélectionner com_contact dans le panneau Composants
  • Sélectionner Contact dans la liste des vues disponibles. Il s'agit de la mise en page d'un contact unique.

Dans le panneau Éditeur :

  • Sélectionner html / com_contact / contact / default.php qui est le fichier définissant la mise en page générale de la page de contact unique.
  • Faire défiler ce fichier et remarquer une série de blocs <php if (...) : ?>. Chacun affichera ou masquera une section de texte selon les paramètres du contact.
  • Remarquer les lignes contenant
    <?php echo $this->item->event->afterDisplayTitle; ?> (ligne 73)
    <?php echo $this->item->event->beforeDisplayContent; ?> (ligne 98)
    <?php echo $this->item->event->afterDisplayContent; ?> (ligne 189)

Une de ces variables, ou aucune d'entre elles, est renseignée selon la valeur du champ Affichage automatique.

Utiliser les champs dans votre surcharge

Tous les champs correspondant à l'élément actuel sont accessibles via une propriété $this->item->jcfields, qui est un tableau contenant les données suivantes pour chaque champ (cet exemple concerne un champ Éditeur) :

    Array
    (
        [4] => stdClass Object
            (
                [id] => 4
                [title] => article-editor
                [name] => article-editor
                [checked_out] => 0
                [checked_out_time] => 0000-00-00 00:00:00
                [note] =>
                [state] => 1
                [access] => 1
                [created_time] => 2017-04-07 12:08:59
                [created_user_id] => 856
                [ordering] => 0
                [language] => *
                [fieldparams] => Joomla\Registry\Registry Object
                    (
                        [data:protected] => stdClass Object
                            (
                                [buttons] =>
                                [width] =>
                                [height] =>
                                [filter] =>
                            )

                        [initialized:protected] => 1
                        [separator] => .
                    )

                [params] => Joomla\Registry\Registry Object
                    (
                        [data:protected] => stdClass Object
                            (
                                [hint] =>
                                [render_class] =>
                                [class] =>
                                [showlabel] => 1
                                [disabled] => 0
                                [readonly] => 0
                                [show_on] =>
                                [display] => 2
                            )

                        [initialized:protected] => 1
                        [separator] => .
                    )

                [type] => editor
                [default_value] =>
                [context] => com_content.article
                [group_id] => 0
                [label] => article-editor
                [description] =>
                [required] => 0
                [language_title] =>
                [language_image] =>
                [editor] =>
                [access_level] => Public
                [author_name] => Super User
                [group_title] =>
                [group_access] =>
                [group_state] =>
                [value] => Bar
                [rawvalue] => Bar
            )
    )

Afficher le champ

La fonction FieldsHelper::render() est utilisée pour afficher chaque champ. Ajouter d'abord une instruction use Joomla\Component\Fields\Administrator\Helper\FieldsHelper; à la liste des instructions use situées en haut du fichier de surcharge :

defined('_JEXEC') or die;

use Joomla\CMS\Helper\ContentHelper;
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Layout\FileLayout;
use Joomla\CMS\Layout\LayoutHelper;
use Joomla\CMS\Plugin\PluginHelper;
use Joomla\CMS\Router\Route;
use Joomla\Component\Contact\Site\Helper\RouteHelper;
use Joomla\Component\Fields\Administrator\Helper\FieldsHelper;

Ensuite, à l'endroit où vous souhaitez placer les champs dans votre template, utiliser le code suivant :

<?php foreach ($this->item->jcfields as $field) : ?>
    <?php echo FieldsHelper::render($field->context, 'field.render', array('field' => $field)); ?><br>
<?php endforeach ?>

Ou pour une surcharge brute, qui ne traduit pas le libellé :

<?php foreach ($this->item->jcfields as $field) : ?>
    <?php echo $field->label . ':' . $field->value; ?><br>
<?php endforeach ?>

Chargement de champs individuels

Pour ajouter des champs individuels à votre contenu, commencez par choisir des noms spécifiques pour vos champs personnalisés, en utilisant le champ Nom, qui sera utilisé pour référencer directement votre champ dans le code de la surcharge. Dans l'onglet Paramètres, sélectionnez Non dans le champ Affichage automatique pour l'empêcher d'être affiché automatiquement dans l'une des positions standard.

Ensuite, pour permettre l'accès direct par nom aux champs personnalisés dans une surcharge, placez le code ci-dessous au début de votre fichier. Vous devez le faire pour chaque fichier PHP de surcharge sur lequel vous souhaitez placer des champs personnalisés individuels.

<?php foreach($this->item->jcfields as $jcfield) {
    $this->item->jcFields[$jcfield->name] = $jcfield;
} ?>

Et enfin, vous devez ajouter le code de placement du champ à l'endroit où vous souhaitez que le nom ou la valeur du champ soit affiché.

Pour ajouter le nom du champ à votre surcharge, insérez le code ci-dessous, en remplaçant name-of-field par le nom du champ.

<?php echo $this->item->jcFields['name-of-field']->label; ?>:&nbsp;

Pour ajouter la valeur du champ à votre surcharge, insérez le code ci-dessous, en remplaçant name-of-field par le nom du champ.

<?php echo $this->item->jcFields['name-of-field']->rawvalue; ?>

Vous pouvez ajouter ce code à n'importe quelle partie de votre surcharge. Exemples : le contenu d'une div, le src dans une balise img, au sein d'un attribut de classe CSS, etc.