Une fois la table créée dans la base de données pour votre collector, et un build pour générer la classe correspondante, vous pouvez l'utiliser directement sur le frontoffice.
Mais qu'en est-il de l'administration des données en backoffice ?
Vous allez pour cela définir un module backoffice.
Prérequis pour la suite Structure des modules
Ce fichier permet de configurer les champs à afficher dans le formulaire de création/modification du backoffice.
Il faut renseigner la propriété fields
de l'objet $form
(elle sera utilisée par le fichier générique gen_edit.php de Gabox).
Voici un exemple de configuration pour un collector :
$form->fields = [
'_info' => t('Informations')
,'lib' => $form->gen_field['lib_i18n']
,'content' => array_merge($form->gen_field['simple_html_i18n'], ['label' => t('Contenu')])
,'date_lib' => array_merge($form->gen_field['calendar'], ['label' => t('Date')])
,'file' => array_merge($form->gen_field['file'], ['label' => t('Media')])
,'_publication' => t('Publication')
,'url' => array_merge($form->gen_field['lib'], ['label' => t('Url') . ' ' . t('(auto fill)')])
,'enabled' => $form->gen_field['ouinon']
,'id_sites' => array_merge($form->gen_field['select'], ['label' => t("Site")],
['arrayValues'=>$gen->collector['sites']->getKv()],
['class'=>'chosen-select'],
['value' => defined('ID_SITE') ? ID_SITE : ''])
,'updated_at' => $form->gen_field['updated_at']
];
Vous remarquerez donc que la configuration du formulaire est un tableau contenant une entrée par champs.
Il existe une exception pour les éléments dont la clé commence par _
comme _info
: il s'agit ici d'une entrée permettant de regrouper les champs par onglet dans le backoffice. Dans l'exemple nous aurons donc un onglet 'Informations' et un onglet 'Publication'
La propriété gen_field
de l'objet $form contient un certain nombre de types de champs prédéfinis. Ces derniers se trouvent dans le fichier admin-common/common-fields.php
de GaboX. En voici quelques exemples :
Il s'agit de l'élément qui sera le plus souvent surchargé car il s'agit du libellé du champ. Vous pouvez encapsuler le libellé dans la fonction de traduction t()
afin de le rendre traductible.
A l'inverse, si vous devez changer cet élément, c'est que vous n'avez pas choisi le bon champ de base, car il s'agit du type de champ HTML (text, hidden, submit...). Il n'est donc normalement jamais surchargé.
En cas de liste déroulante, cette configuration vous permet de préciser les éléments de la liste sous la forme d'un tableau id => valeur.
La méthode
getKv()
de la GenClass est ici très souvent employé car elle retourne les résultats d'un collector au bon format.
Vous pouvez préciser ici une ou plusieurs classes pour votre champ afin de le mettre en forme si besoin de spécifique.
Afin d'utiliser la librairie chosen pour les listes, il faut en général préciser la classe
chosen-select
pour les select.
Permet de définir du style inline si une classe ne peut pas être utilisée.
Il s'agit de la valeur par défaut pour le champ.
Vous pouvez préciser ici le format que doit respecter votre champs pour être valide.
Pour rendre un champ obligatoire, il faut préciser
'pattern' => '^.+'
Comme son nom l'indique
Ce paramétrage sert pour les types de champs relationel_list
qui permettent de lier le collector à un autre avec une relation n-n.
On y précise justement le nom du collector cible. Il s'agit bien souvent du treeview afin de mettre à disposition un champ de catégorisation.
Cet élément va de paire avec le précédent, il permet de définir le nom du champ pour la relation. Si ce dernier n'est pas défini, GaboX utilisera la clé primaire du collector cible.
Mettre cet élément à true pour que la liste soit à choix multiple.
Pour les champs de type autocomplete
, ce paramétrage permet de définir l'url de la requête ajax.
Par défaut, si un élément est supprimé de la liste du champ, la ligne correspondante dans la table de liaison est supprimé.
Si ce paramètre est mis à true
, la ligne n'est pas supprimée et la colonne id_{parent_collector} est mise à NULL.
Ce fichier permet de gérer les fonctions d'édition et de listing dans le backoffice.
En mode édition, le fichier admin-fields.php
doit être inclus, puis le fichier générique gen_edit.php
:
include('admin-fields.php');
$form->lib = t("Edit element");
$form->heading = '';
include(GABOX_GEN_ROOT.'gen_edit.php');
En mode listing, un tableau $listing
doit être paramétré avant d'inclure le fichier générique genlist.php
. Ce tableau contient les entrées suivantes :
Cette entrée contient la liste des champs qui seront présents dans le SELECT de la requête SQL de listing.
Vous pouvez ainsi préciser des alias si des noms de champs se collisionnent.
Contient la liste des tables à inclure dans la requête en tant que jointures.
Cette entrée va de paire avec la précédente pour définir la condition à respecter pour la jointure.
Il s'agit d'un tableau contenant les champs à afficher dans le listing. Chaque entrée doit correspondre à un champ du SELECT (donc présent dans sql
).
La valeur de chaque entrée est un tableau de configuration :
Libellé de l'entête de la colonne.
Si la valeur est true, alors le champ est modifiable directement dans la liste au double clic (principalement pour les champs texte)
Cette entrée permet de préciser un type particulier. Elle est souvent utilisée pour indiquer switch
et avoir un bouton on/off dans la liste.
On précisera ici une fonction de callback pour générer l'affichage du champs. Les fonctions disponibles sont les suivantes (mais vous pouvez écrire les votres) getEnable pour les champs on/off et getMedia pour avoir une vignette du champ image.
Le titre de la page en backoffice.