Personnaliser les formulaires
Modifier l'affichage d'une chaîne à la volée
Pratique pour modifier dynamiquement l'affichage d'un champ selon la page. Telle catégorie par exemple, peut avoir un nom légèrement différent selon la page ou les droits utilisateurs.
Dans un champ calc :
$MyCategory = '{videos___category}' ; if ($MyCategory === 'Preview') { $MyCategory = 'WATCH THE PREVIEW'; } if ($MyCategory === 'Full') { $MyCategory = 'WATCH THE FULL VIDEO'; } if ($MyCategory === 'Academic') { $MyCategory = 'ACADEMIC'; }
Raccourcir l'affichage d'un champ
Si le contenu de votre champ est potentiellement long, mais parfois court, et que vous souhaitez standardiser l'affichage en fonction du nombre de caractère par exemple.
Fabrik permet cela nativement, dans les options d'un champ text par exemple. Cependant il peut arriver que vous souhaitiez faire cela ailleurs (dans un champ calc par exemple) :
Dans un champ calc :
$Title = '{videos___title}' ; $nbChar = 40 ; // Nb. de caractères sans '...' if(strlen($Title) >= $nbChar) {$ShortTitle = substr($Title, 0, $nbChar).' ...';} else {$ShortTitle = $Title ;}
Masquer les champs vides
Fabrik crée par défaut une classe CSS sur les champs vides (fabrikDataEmpty
). En vue détail vous pouvez les masquer avec un display: none;
et en vue formulaire les modifier autrement. Pour ne le faire que sur un seul de vos champs par exemple, un champ texte classique input
:
.fabrikDataEmpty input#ma-table___mon-champ{ background-color: red ; }
Masquer les sous-groupes vides (repeatable group des tables jointes)
En overridant son template, on peut masquer les sous-groupes vides des formulaires en vue détail.
Dans le cas d'un groupe affiché en mode table par exemple, modifiez ainsi son fichier components \ com_fabrik \ views \ form \ tmpl \ MyTEMPLATE \ default_repeatgroup_table.php (ajout de if (!$group->newGroup) :
et de son endif;
) :
<?php // No direct access $group = $this->group; if (!$group->newGroup) : // only output if there the group is not empty ?> <legend class="legend">Orders</legend> <table class="table table-striped repeatGroupTable"> <thead> <tr> <?php // Add in the table heading $firstGroup = $group->subgroups[0]; foreach ($firstGroup as $el) : $style = $el->hidden ? 'style="display:none"' : ''; ?> <th <?php echo $style; ?> class="<?php echo $el->containerClass?>"> <?php echo $el->label_raw?> </th> <?php endforeach; // This column will contain the add/delete buttons if ($group->editable) : ?> <th data-role="fabrik-group-repeaters"></th> <?php endif; ?> </tr> </thead> <tbody> <?php // Load each repeated group in a <tr> $this->i = 0; foreach ($group->subgroups as $subgroup) : $this->elements = $subgroup; echo $this->loadTemplate('repeatgroup_row'); $this->i ++; endforeach; endif; ?> </tbody> </table> <?php endif;
Masquer un groupe selon une valeur
Dans le fichier default_repeatgroup.php d'un template dédié à votre formulaire, ajouter cette condition juste après le foreach
:
... foreach ($group->subgroups as $subgroup) : // TO HIDE A GROUP IF A FIELD city IS EQUAL TO MOSCOW // var_dump($subgroup['city']); // var_dump($subgroup['city']); if ($subgroup['city']->value === 'MOSCOW'): continue ; endif; endif; ...
Créer des boutons dynamiques
Parfois vous avez besoin de créer de nouveaux boutons, autres que les classiques Enregistrer ou Appliquer. Pour mener à un autre formulaire par exemple, lancer une recherche (voir la section sur les recherches dynamiques)...
Vous pouvez alors créer l'URL nécessaire dynamiquement (en utilisant le fameux {rowid}
, voir la section sur les redirections dynamiques) pour récupèrer l'ID de l'enregistrement concerné, puis l'insérer dans un champ Calc sous forme de lien. De cette façon par exemple :
return '<a style="margin:20px" href="booking-list-management-confirm/form/28/{rowid}">Prendre la course ?</a>';
Libre à vous ensuite de le styliser, pour en faire un vrai bouton. Vous pouvez bien sûr mettre plusieurs boutons dans un seul champ Calc.
Afficher des valeurs différenciées
En lecture seule, vous pouvez afficher des valeurs par couleurs, quitte à changer le type de l'élément sur le formulaire concerné uniquement. Passez en type calc, puis par exemple ici sur un booléen, afficher un texte en rouge ou en vert selon la valeur 0 ou 1 :
$MonChampBooleen = '{profiles___certificate_upload}'; if (($MonChampBooleen) == 1) { // Calcul return '<div style="text-align: center ; font-weight : bold ; color : green ; ">Authorized</div>' ;} // Si vide if (($MonChampBooleen) == 0) { return '<div style="text-align: center ; font-weight : bold ; color : red ; ">Not allowed</div>';}
Remplacer le formulaire d'enregistrement utilisateur Joomla par défaut par un formulaire Fabrik
Fabrik peut avantageusement substituer l'enregistrement utilisateur par défaut de Joomla par un formulaire personnalisé. Vous pourrez ainsi ajouter des champs mais également des règles de valisation, déclencher des actions, envoyer des emails très personnalisés...
Pour cela il vous faudra utiliser l'excellent plugin Joomla user form plugin.
Ensuite une bonne pratique est de rediriger le lien https://myweb.site/index.php?option=com_users&view=registration vers votre formulaire Fabrik. Ceci est même obligatoire en terme de sécurité, afin de rediriger d'éventuels robots.
Pour cela modifiez ou créez l'override templates/mytemplate/html/com_users/registration/default.php et mettez-y une redirection. Ainsi par exemple :
header('Location: MyFabrikForm'); exit(); ?>
Où MyFabrikForm est une URL relative.
Faîtes ceci pour tous vous templates frontaux même si non-utilisés. Sans cela un robot utilisant cette adresse par exemple, parviendra au formulaire par défaut de Joomla même si vous n'utilisez pas le template Protostar : https://myweb.site/index.php?option=com_users&view=registration&template=protostar
Ce n'est donc pas optionnel !