Listes backoffice personnalisées
De Wiki.
Il est possible de personnaliser (ajouter) les outils accessibles pour chaque entrée d'une liste en back-office.
Principe
De même que pour les recherches back-office personnalisées, l'inclusion automatisée va chercher un éventuel prepend_script situé dans /include/bo/cms/, à côté des fichiers XML de surcharge des classes. Le nom du prepend_script doit correspondre à prepend.list_ma_classe.php (et il sera automatiquement appelé).
Le prepend_script décrit :
- Un bloc Javascript pouvant altérer la soumission du formulaire standard de la liste afin de basculer vers le traitement personnalisé.
- Le bloc HTML d'action incluant un éventuel pictogramme à ajouter à la suite des actions présentes (voir, éditer, supprimer, etc.)
- Une série de motifs conditionnels permettant de comparer/calculer à partir de valeurs de l'enregistrement courant et donc de rendre disponible (ou non) l'outil en question pour cet enregistrement.
Tout ceci est stocké dans une table de hashage php nommée $aListCustom (action globale sur la liste) $aCustom (action locale sur l'enregistrement) qui sera interprété par le script standard d'affichage des listes.
A noter :
- La construction du bloc Javascript ($tmp["JS"], une chaine) dispose d'un certain nombre de variables héritées de la classe et de l'enregistrement courants (##classePrefixe##, ##id##) qui seront remplacées à la restitution de la liste dans la page.
- Le bloc conditionnel ($tmp['Filter']['pile'], une liste) peut permettre d'empiler plusieurs tests/conditions a appliquer suivant le mode AND ou OR ($aCustom['Filter']['mode'], une chaine).
- Il faut, bien sûr, produire un script cible pour la soumission altérée du formulaire, script qui effectuera l'action personnalisée désirée.
Exemple de personnalisation d'une liste :
// Array for global list actions (on selected rows) $aListCustom = array(); // Array for local row actions $aCustom = array(); ///////////////////////////////////////////////// // Local action example $tmp = array(); $tmp["JS"] = " // js function voirDetail(id) { document.##classePrefixe##_list_form.display.value = id; document.##classePrefixe##_list_form.actiontodo.value = \"REPONDRE\"; document.##classePrefixe##_list_form.action = \"/backoffice/raujolles/clone_shp_produit.php?display=\"+id; document.##classePrefixe##_list_form.submit(); }"; $tmp["Action"] = "<a href=\"javascript:voirDetail(##id##);\" title=\"Mon Action custom\"><img src=\"/backoffice/cms/img/add.gif\" width=\"14\" height=\"14\" alt=\"Mon action custom\" border=\"0\" /></a>"; // Ajout d'un système de filtre sur les valeurs de chaque enregistrement pour activer ou non l'outil custom // Modes disponibles : AND, OR $tmp["Filter"] = Array( 'mode' => 'AND', 'pile' => Array() ); // tests disponibles : equals, differ, lower_than, higher_than, lower_or_equals, higher_or_equals $tmp["Filter"]['pile'][] = Array( 'getter' => 'get_id_unite', 'test' => 'lower_than', 'value' => 3); $tmp["Filter"]['pile'][] = Array( 'getter' => 'get_id_type', 'test' => 'equals', 'value' => 1); $aListCustom[] = $tmp; ///////////////////////////////////////////////// // Global action example $tmp = array(); $tmp["JS"] = " // js function processAllRecords(_id) { var list = $(".record_check:checked").map(function () { return this.value; }).get(); alert(list); } '; $tmp['Action'] = '<input type="button" onclick="processAllRecords();" value="Action groupée sur les éléments sélectionnés" />'; // No filter needed for global list action $aListCustom[] = $tmp;