Cet article fait suite à celui traitant des layouts qu'il est conseillé de lire au préalable (au moins l'introduction) si l'on veut bien comprendre le concept.

Ici nous allons voir comment modifier le champ de sélection du nombre d'éléments à afficher pour les listes.

Pour cela nous allons faire un overide du layout list qui se trouve de base dans /layouts/joomla/searchtools/default/list.php

Si vous avez lu mon article traitant des layouts de Joomla vous urez compris que list est en fait un layout (donc un sous-élément ou un sous-bloc de champs) du layout searchtools (qui est lui même un bloc de layouts d'une vue de type list d'items en général).

Les fenêtres de Joomla se découpant ainsi en petits bloc réutilisables.

Donc ce bloc list.php comprend 2 champs du groupe list :

  • fullordering
  • limit

Nous allons nous intéresser au champ limit qui est du type Limitbox.

Le code de ce champ de formulaire se trouvant en /librairies/src/Form/Field/LimitboxField.php

Nous allons donc copier /layouts/joomla/searchtools/default/list.php dans le dossier d'override de notre template donc dans :

  •  /templates/nom_du_template_actif_en_front/html/layouts/joomla/searchtools/default/list.php pour la partie frontale du site
  • /administrator/templates/nom_du_template_admin/html/layouts/joomla/searchtools/default/list.php pour la partie admin du site, si on le souhaite

On ajoutera en ligne 14 juste après

defined('_JEXEC') or die;
$data = $displayData;

Ceci

$data['view']->filterForm->setFieldAttribute('limit', 'showall', 'false','list');
$data['view']->filterForm->setFieldAttribute('limit', 'default', '100','list');
// a noter que la valeur retenue sera celle dans le cookies de l'utilisateur, s'il a déjà valide un formulaire
$data['view']->filterForm->setFieldAttribute('limit', 'remove', '500','list');
$data['view']->filterForm->setFieldAttribute('limit', 'append', '250,300','list');

et donc juste avant

// Load the form list fields
$list = $data['view']->filterForm->getGroup('list');

Les champs et leurs valeurs sont définis de base dans les xml des filtres des différentes vues des composants.

Ici dans l'override du layout on force ces valeurs d'une façon générale.

La premiere ligne force l'attribut showall à false, ce qui a pour effet de supprimer le 'tous'.

La 2ème ligne force la valeur par défaut à 100 (valeur qui doit bien sûr figurer dans la liste), en prenant en compte le commentaire que j'y ai porté.

La ligne 'remove' supprime une option de la liste, alors que la ligne append en ajoute une.
Dans ces 2 attributs, pour traiter plusieurs options, il suffit de les séparer par des virgules (tout en faisant bien attention à ne pas placer d'espaces).