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;