Index de l'article

Contrainte/validation de champs

Fabrik propose déjà des méthodes intégrées de validation de champs (notempty, isemail, isunique, areuniques...).

Mais parfois elles sont insuffisantes, ou alors elles suffisent tout-à-fait mais pour des questions de maintenance, vous préférez les centraliser. Les écrire dans des plugins de formulaire sera alors idéal.

Gérer la casse

Bien sûr vous pouvez jouer avec les traditionnels strtolowerucfirstucwords... Mais la méthode ci-dessous est particulièrement efficace pour mettre la 1ère lettre de chaque mot en majuscule, et le reste en minuscule. Avec une bonne gestion de la ponctuation.

Dans une régle de validation PHP d'un élément Fabrik :

return mb_convert_case($data, MB_CASE_TITLE) ;

Ou dans un fichier PHP classique :

$ma_valeur = mb_convert_case($ma_valeur, MB_CASE_TITLE) ;

Caractères spéciaux

Exemple où l'on souhaite supprimer le signe + et les espaces dans un champ d'une table jointe.

Dans un plugin de formulaire, le 1er enregistrement de la table jointe va être déclaré sous la forme formData['table1___champ1'][0] (un tableau donc), puis mis-à-jour en étant appelé sous la forme telephone___code_tel1.0.

// Déclaration des caracteres interdit 
$notallowed_inphone = array(".", " ", "+") ;
 
// Déclaration et traitement du champ concerné
$var_code_tel1_0 = $formModel->formData['telephone___code_tel1'][0];
$var_code_tel1_0 = is_array($var_code_tel1_0) ? $var_code_tel1_0[0] : $var_code_tel1_0;
$var_code_tel1_0 = htmlentities($var_code_tel1_0) ;
$var_code_tel1_0 = str_replace($notallowed_inphone, "", $var_code_tel1_0);
 
// MAJ du champ concerné
$formModel->updateFormData('telephone___code_tel1.0', $var_code_tel1_0, true) ;

Encodage des accents

Utilisons htmlentities dans un plugin de formulaire.

// Déclaration et traitement du champ lastname
$var_lastname = $formModel->getElementData('customer___lastname', true);
$var_lastname = htmlentities($var_lastname) ;
 
// MAJ champ lastname
$formModel->updateFormData('customer___lastname', $var_lastname, true) ;

Limiter la taille d'affichage d'un champ texte

Ce n'est que du pur PHP mais mais parfois on souhaite limiter la taille d'affichage d'un champ texte autrement que par les options natives de Fabrik.

Dans un élément calc par exemple, on affiche ici les 35 premiers caractères, puis 3 petits points si le champ est plus long:

$Title = '{mytable___title}' ;
 
$nbChar = 35; // Nb. de caractères sans '...'
if(strlen($Title) >= $nbChar)
{$ShortTitle = substr($Title, 0, $nbChar).' ...';}
else
{$ShortTitle = $Title ;}

Désencodage de caractères

Parfois des caractères HTML sont présents dans du vocabulaire contrôlé de tables spécifiques par exemple, et la gestion de ces caractères n'est pas toujours automatisé.

Exemple dans un plugin Databasejoin, pour interprêter des caractères comme #39; ... Dans l'onglet Advanced :

$opt->text = htmlspecialchars_decode($opt->text,ENT_QUOTES) ;

ou encore :

$opt->text = html_entity_decode($opt->text,ENT_QUOTES) ;

Remplir un champ selon un formulaire

L'une des façons de diriger les actions utilisateurs est de proposer la modification d'enregistrements à partir de formulaires ou listes différents (d'où nous enclencheront des traitement différents, des filtres différents...).

Un champ caché status par exemple, sera peut-être nécessaire. Et édité si l'utilisateur a utilisé ce formulaire.

Vous pouvez alors forcer un champ directement dans les options de l'élément, mais également dans un plugin de formulaire PHP :

$formModel->updateFormData('ma_table___champs_a_modifier','Nouvelle_Valeur',true);

Remplir un champ selon des données saisies dans un autre champ

À partir de l'exemple précédent, toujours dans un plugin de formulaire PHP, vous pouvez ajouter des variables contenant d'autres champs saisis par l'utilisateur, puis les utiliser dans des conditions d'un autre champ. Vous pouvez le faire en ajoutant une règle Javascript dans les options de l'élément, afin d'aider l'utilisateur pendant la saisie, mais aussi en PHP après la soumission du formulaire, pour corriger l'utilisateur a son insu :

$ma_variable = $formModel->formData['ma_table___mon_champ'];
if ($ma_variable == 'Non')
{$formModel->updateFormData('ma_table___champs_a_modifier','Nouvelle_Valeur',true);}

Sourcer les enregistrements

Identifier l'origine des enregistrements saisis dans une base de données est primordial. Bien sûr les champs de type Date de saisie et Utilisateur ayant saisi sont classiques et sans doute déjà existants dans vos applications. Cependant leur format/stockage n'est pas toujours ergonomique à la lecture, aux exports ou à certains requêtages, reporting...

De même, la définition de vos sources peut varier selon le formulaire de saisi.

Il est donc bel et bon parfois, de remplir un champ source avec disons, le nom de l'utilisateur ayant saisi par exemple (ou son id, email...), la date de saisie et éventuellement d'autres informations textuelles.

Le code suivant, dans l'option Default d'un élément de type Field, récupère puis concatène le nom de l'utilisateur Joomla en majuscule et l'année en cours :

$MonName = '{$my->name}' ;
$MonName = strtoupper($MonName) ;
return $MonName.' '.date('Y') ;

N'oubliez pas de cocher l'option Eval sous l'encart d'insertion du code, et de brider la saisie manuelle via les droits d'accès de l'élément.

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