Index de l'article

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;) :

  1. <?php
  2. // No direct access
  3. defined('_JEXEC') or die('Restricted access');
  4.  
  5. $group = $this->group;
  6.  
  7. if (!$group->newGroup) :
  8.  
  9. // only output if there the group is not empty
  10. if (count($group->subgroups) > 0) :
  11. ?>
  12. <legend class="legend">Orders</legend>
  13. <table class="table table-striped repeatGroupTable">
  14. <thead>
  15. <tr>
  16. <?php
  17.  
  18. // Add in the table heading
  19. $firstGroup = $group->subgroups[0];
  20. foreach ($firstGroup as $el) :
  21. $style = $el->hidden ? 'style="display:none"' : '';
  22. ?>
  23. <th <?php echo $style; ?> class="<?php echo $el->containerClass?>">
  24. <?php echo $el->label_raw?>
  25. </th>
  26. <?php
  27. endforeach;
  28.  
  29. // This column will contain the add/delete buttons
  30. if ($group->editable) : ?>
  31. <th data-role="fabrik-group-repeaters"></th>
  32. <?php
  33. endif;
  34. ?>
  35. </tr>
  36. </thead>
  37. <tbody>
  38. <?php
  39.  
  40. // Load each repeated group in a <tr>
  41. $this->i = 0;
  42. foreach ($group->subgroups as $subgroup) :
  43. $this->elements = $subgroup;
  44. echo $this->loadTemplate('repeatgroup_row');
  45. $this->i ++;
  46. endforeach;
  47.  
  48. endif;
  49.  
  50. ?>
  51. </tbody>
  52. </table>
  53. <?php
  54. 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 :

  1. ...
  2. foreach ($group->subgroups as $subgroup) :
  3.  
  4. // TO HIDE A GROUP IF A FIELD city IS EQUAL TO MOSCOW
  5. // var_dump($subgroup['city']);
  6. if (array_key_exists('city', $subgroup)):
  7. // var_dump($subgroup['city']);
  8. if ($subgroup['city']->value === 'MOSCOW'):
  9. continue ;
  10. endif;
  11. endif;
  12.  
  13. ...

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();
?>

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 !

Liens ou pièces jointes
Accéder à cette adresse URL (http://fabrikar.com/forums/index.php?wiki/troubleshooting-tools/)Wiki Fabrik sur les troubleshooting tools[Article]0 Ko
Accéder à cette adresse URL (http://fabrikar.com/forums/index.php?wiki/calculation-element/)Wiki Fabrik sur les champs calc pour débogage[Article]0 Ko
Accéder à cette adresse URL (http://fabrikar.com/forums/index.php?wiki/php-form-plugin/)Wiki Fabrik sur le plugin PHP pour les formulaires[Article]0 Ko
Accéder à cette adresse URL (http://fabrikar.com/forums/index.php?wiki/filtering-lists-tables/)Filtres de listes[Article officiel Fabrik sur les pré-filtres de listes]0 Ko
Accéder à cette adresse URL (https://api.joomla.org/cms-3/classes/JDatabaseDriver.html)Joomla! API[Documentation Joomla]0 Ko
Accéder à cette adresse URL (https://docs.joomla.org/Selecting_data_using_JDatabase)Selecting data using JDatabase[Documentation Joomla]0 Ko