QuickModels

Les fonctions utilisateur : explication

Ceci est une des fonctionnalités les plus puissantes de QuickModels.

En effet, pour combler certaines limitations du moteur de QuickModels, l'ensemble des balises dynamiques peuvent recevoir l'appel à une fonction utilisateur à la place d'une variable, ce qui autorise la résolution des cas particuliers et une plus grande souplesse dans la gestion des données.

Imaginons qu'on récupère un ensemble d'informations, issues d'une base de données par exemple, sous forme d'un tableau de données (array), et qu'on souhaite faire un certain nombre de manipulations et mises en forme avant de les afficher, il serait assez laborieux, voire parfois impossible, de le faire directement sur le modèle Html, c'est là que l'appel à des fonctions utilisateurs peut rendre service.

La syntaxe d'appel aux fonctions utilisateur s'applique de manière identique à l'ensemble des balises dynamiques de QM, soit :

FonctionsBalise PrincipaleBalise CentraleBalise Finale
Affichage des variables<!--{ma_fonction}--> - -
Inclusion des fichiers<!--[ma_fonction]--> - -
Blocs conditionnels<!--(ma_fonction)--><!--(else)--><!--(end)-->
Blocs de boucles<!--<ma_fonction>--><!--<valeur>--><!--<fin>-->

Évidemment, suivant la balise utilisée, la fonction doit retourner des valeurs compatibles :

FonctionsType de données compatibles
Affichage des variablesvaleurs de type texte, Html ou tableau de données (array)
Inclusion des fichierschemin d'accès relatif ou absolu
Blocs conditionnelsvaleur booléenne vraie ou fausse (true = 1 ; false = 0 zéro)
Blocs de bouclestableau de données (array) ou valeur numérique (itérations)

On peut également passer un ou plusieurs arguments à la fonction utilisateur appelée, la syntaxe est identique à celle des tableaux, c'est à dire, il faut ajouter le nom des variables (préalablement mémorisées dans l'instance utilisée), ou des valeurs numériques ou textuelles simples (sans espaces ni caractères spéciaux) séparés par un point, par ex. :

DonnéesArgumentsBalises
Variablesun<!--{ma_fonction.variable}-->
plusieurs<!--{ma_fonction.variable1.variable2}-->
Nombresun<!--{ma_fonction.25}-->
plusieurs<!--{ma_fonction.25.32.8}-->
Textes simplesun<!--{ma_fonction.texte}-->
plusieurs<!--{ma_fonction.texte1.texte2}-->
Valeurs combinéesplusieurs<!--{ma_fonction.texte.12}-->
plusieurs<!--{ma_fonction.variable.58.texte}-->

ATTENTION !
Bien s'assurer que le nom de la fonction est unique et qu'il ne correspond pas au nom d'une variable mémorisée dans l'instance de QM utilisée, en effet, le programme donne toujours priorité aux variables.


Les fonctions utilisateur : exemples

Formatage des rangées paires dans un tableau

un
deux
trois
quatre
cinq

Formatage des rangées paires et impaires dans un tableau

un
deux
trois
quatre
cinq

Formatage d'un tableau de données (array) dans une boucle

Clé "lang"Clé "abrv"Nombres
françaisfr
  1. un
  2. deux
  3. trois
anglaisen
  1. one
  2. two
  3. three
espagnoles
  1. uno
  2. dos
  3. tres
italienit
  1. un
  2. due
  3. tre
allemandde
  1. a
  2. zwei
  3. drei

Affichage conditionnel suivant le moment de la journée

Bonne après-midi à tous :-)

Affichage d'un calendrier dynamique

< mars 2018 >
lumame jevesadi
    12 34
567 89 1011
121314 1516 1718
192021 2223 2425
262728 2930 31 

Codes sources

(afficher/masquer)Résumé Php-Html

— Php ——————————————————————
// Retourne une class Css lorsque la valeur fournie est paire
function f_paire($nNro) {
	$aClass = array('pair', '');
	return $aClass[$nNro % 2];
}

// Retourne une class Css selon la valeur fournie (paire ou impaire)
function f_impaire($nNro) {
	$aClass = array('pair', 'impair');
	return $aClass[$nNro % 2];
}

// Retourne un tableau formaté
function f_tableau($aArray, $sCle1, $sCle2) {
	$aTable = array();
	foreach ($aArray as $cle => $val) {
		$sCle3 = $val[$sCle2];
		$hList = implode('</li><li>', $val[$sCle3]);
		$hTable = '<td>'.$val[$sCle1].'</td>';
		$hTable .= '<td>'.$sCle3.'</td>';
		$hTable .= '<td><ol style="text-align: left;">';
		$hTable .= '<li>'.$hList.'</li></ol></td>';
		$aTable[] = $hTable;
	}
	return $aTable;
}

// Retourne vrai si l'heure courante est dans la fourchette fournie
function f_heure($nMin, $nMax) {
	$nHeure = (int)date('H');
	if ($nMin > $nMax) {
		return (($nHeure >= (int)$nMin) || ($nHeure < (int)$nMax));
	} else {
		return (($nHeure >= (int)$nMin) && ($nHeure < (int)$nMax));
	}
}

// Retourne un calendrire sous forme de tableau
function f_cal() {
	setlocale (LC_TIME, array('fr_FR.UTF-8', 'fr_FR', 'fr' ));
	list($aCal, $sSid) = array(array(), '?sid='.$_GET['sid']);
	// [..] Voir code Php complet
	return $aCal;
}

// Memorisation d'un tableau (array) simple
$qm->set('aSimple', array('un', 'deux', 'trois', 'quatre', 'cinq'));

// Mémorisation des tableaux (array) imbriqués
$qm->set('aMulti', array(
array('lang'=>'français','abrv'=>'fr','fr'=>array('un','deux','trois')),
array('lang'=>'anglais','abrv'=>'en','en'=>array('one','two','three')),
array('lang'=>'espagnol','abrv'=>'es','es'=>array('uno','dos','tres')),
array('lang'=>'italien','abrv'=>'it','it'=>array('un','due','tre')),
array('lang'=>'allemand','abrv'=>'de','de'=>array('a','zwei','drei'))
));

// Mémorisation du tableau (array) du calendrier
$qm->set('aCal', f_cal());

— Html —————————————————————
<h4>Formatage des rangées paires dans un tableau</h4>
<table align="center" border="0" cellspacing="0" cellpadding="0"
style="width: 200px; margin: 0px auto;">
<!--<aSimple>-->
<tr><td class="<!--{f_paire.<!--<c>-->}-->"><!--<v>--></td></tr>
<!--<end>-->
</table>

<h4>Formatage des rangées paires et impaires dans un tableau</h4>
<table align="center" border="0" cellspacing="0" cellpadding="0"
style="width: 200px; margin: 0px auto;">
<!--<aSimple>-->
<tr><td class="<!--{f_impaire.<!--<c>-->}-->"><!--<v>--></td></tr>
<!--<end>-->
</table>

<h4>Formatage d'un tableau de données (array) dans une boucle</h4>
<table align="center" border="0" cellspacing="0" cellpadding="0"
style="width: 500px; margin: 0px auto;">
<tr><th>Clé "lang"</th><th>Clé "abrv"</th><th>Nombres</th></tr>
<!--<f_tableau.aMulti.lang.abrv>-->
<tr class="<!--{f_paire.<!--<c>-->}-->"><!--<valeur>--></tr>
<!--<fin>-->
</table>

<h4>Affichage conditionnel suivant le moment de la journée</h4>
<!--(f_heure.6.12)-->Bonne matinée à tous :-)<!--(s)--><!--(n)-->
<!--(f_heure.12.18)-->Bonne après-midi à tous :-)<!--(s)--><!--(n)-->
<!--(f_heure.18.22)-->Bonne soirée à tous :-)<!--(s)--><!--(n)-->
<!--(f_heure.22.6)-->Bonne nuit à tous :-)<!--(s)--><!--(n)-->

<h4>Affichage d'un calendrier dynamique</h4>
<table border="0" cellspacing="4" cellpadding="0" align="center"
class="minical_table">
<tr class="minical_titre"><th><a href="<!--{aCal.avant}-->">&lt;</a></th>
<th colspan="5"><a href="<!--{aCal.actuel}-->"><!--{aCal.titre}--></a></th>
<th><a href="<!--{aCal.apres}-->">&gt;</a></th></tr>
<tr class="minical_jours"><th>lu</th><th>ma</th><th>me</th>
<th>je</th><th>ve</th><th>sa</th><th>di</th></tr>
<!--<aCal.mois>-->
<tr class="minical_dates">
<td><!--<v.0>--></td><td><!--<v.1>--></td><td><!--<v.2>--></td>
<td><!--<v.3>--></td><td><!--<v.4>--></td>
<td class="minical_sam"><!--<v.5>--></td><td
class="minical_dim"><!--<v.6>--></td>
</tr>
<!--<end>-->
</table>

(afficher/masquer)Code Php complet


/*—————————————————————————*\
Fonctions utilisateur

NOTE : il faut bien s'assurer que le nom de la fonction 
est unique et qu'il ne correspond pas au nom d'une variable 
mémorisée dans l'instance utilisée.

IMPORTANT : évitez les caractères spéciaux ou accentués,
ainsi que les espaces et les signes de ponctuation
dans les nom des variables ; autorisés [a-zA-Z0-9_]. 
\*—————————————————————————*/
// Retourne une class Css lorsque la valeur fournie est paire
function f_paire($nNro) {
	$aClass = array('pair', '');
	return $aClass[$nNro % 2];
}

// Retourne une class Css selon la valeur fournie (paire ou impaire)
function f_impaire($nNro) {
	$aClass = array('pair', 'impair');
	return $aClass[$nNro % 2];
}

// Retourne un tableau formaté
function f_tableau($aArray, $sCle1, $sCle2) {
	$aTable = array();
	foreach ($aArray as $cle => $val) {
		$sCle3 = $val[$sCle2];
		$hList = implode('</li><li>', $val[$sCle3]);
		$hTable = '<td>'.$val[$sCle1].'</td>';
		$hTable .= '<td>'.$sCle3.'</td>';
		$hTable .= '<td><ol style="text-align: left;">';
		$hTable .= '<li>'.$hList.'</li></ol></td>';
		$aTable[] = $hTable;
	}
	return $aTable;
}

// Retourne vrai si l'heure courante est dans la fourchette fournie
function f_heure($nMin, $nMax) {
	$nHeure = (int)date('H');
	if ($nMin > $nMax) {
		return (($nHeure >= (int)$nMin) || ($nHeure < (int)$nMax));
	} else {
		return (($nHeure >= (int)$nMin) && ($nHeure < (int)$nMax));
	}
}

// Retourne un calendrire sous forme de tableau
function f_cal() {
	setlocale (LC_TIME, array('fr_FR.UTF-8', 'fr_FR', 'fr' ));
	list($aCal, $sSid) = array(array(), '?sid='.$_GET['sid']);
	list($sDateToday, $sDateJob) = array(date('Y-m-d'), date('Y-m-d'));
	if (isset($_GET['date']) && !empty($_GET['date'])) { $sDateJob = $_GET['date'];
}
	list($nAnnee, $nMois, $nJour) = explode('-', $sDateJob);
	if (!($nJourDebut = date('w', mktime(0, 0, 0, $nMois, 1, $nAnnee)))) {
$nJourDebut = 7; }
	$aCal['titre'] = strftime("%B %Y", strtotime($sDateJob));
	$aCal['avant'] = $sSid.'&date='.date('Y-m', mktime(0, 0, 0, (0 + $nMois - 1),
1, $nAnnee)).'-01#minical';
	$aCal['actuel'] = $sSid.'&date='.$sDateToday.'#minical';
	$aCal['apres'] = $sSid.'&date='.date('Y-m', mktime(0, 0, 0, (0 + $nMois + 1),
1, $nAnnee)).'-01#minical';
	if (--$nJourDebut % 7) { $aCal['mois'][] = array_fill(0, $nJourDebut,
'&nbsp;'); } else { $aCal['mois'][] = array(); }
	while (checkdate($nMois, ++$j, $nAnnee)) {
		$nNro = count($aCal['mois']) - 1;
		$aJour = array($j, '<strong>'.$j.'</strong>');
		$aCal['mois'][$nNro][] = $aJour[$sDateToday == date('Y-m-d', mktime(0, 0, 0,
$nMois, $j, $nAnnee))];
		if (!(++$nJourDebut % 7) && checkdate($nMois, ($j +1), $nAnnee)) {
$aCal['mois'][] = array(); }
	}
	if ($nJourDebut % 7) { 
		$aRest = array_fill(0, 7 - ($nJourDebut % 7), '&nbsp;');
		$aCal['mois'][$nNro] = array_merge($aCal['mois'][$nNro], $aRest); 
	}
	return $aCal;
}

/*—————————————————————————*\
Memorisation des variables et valeurs

On utilise la méthode "set()" avec deux arguments :
1. le premier est le nom, ou identifiant, de la variable
2. le second est la valeur à mémoriser puis à afficher

NOTE : il faut entourer les noms et les valeurs avec des 
appostrophes '' ou des guillemets "", si vous avez besoin 
d'un de ces caractères à l'intérieur de la valeur, 
vous devrez le protéger avec un anti-slash \, par ex. \".

IMPORTANT : évitez les caractères spéciaux ou accentués,
ainsi que les espaces et les signes de ponctuation
dans les nom des variables ; autorisés [a-zA-Z0-9_]. 
\*—————————————————————————*/
// Memorisation d'un tableau (array) simple
$qm->set('aSimple', array('un', 'deux', 'trois', 'quatre', 'cinq'));

// Mémorisation des tableaux (array) imbriqués
$qm->set('aMulti', array(
array('lang'=>'français','abrv'=>'fr','fr'=>array('un','deux','trois')),
array('lang'=>'anglais','abrv'=>'en','en'=>array('one','two','three')),
array('lang'=>'espagnol','abrv'=>'es','es'=>array('uno','dos','tres')),
array('lang'=>'italien','abrv'=>'it','it'=>array('un','due','tre')),
array('lang'=>'allemand','abrv'=>'de','de'=>array('a','zwei','drei'))
));

// Mémorisation du tableau (array) du calendrier
$qm->set('aCal', f_cal());

// 

(afficher/masquer)Code Html complet

<!-- |> -->

<h3>Les fonctions utilisateur : exemples</h3>

<h4>Formatage des rangées paires dans un tableau</h4>
<p>
<table align="center" border="0" cellspacing="0" cellpadding="0"
style="width: 200px; margin: 0px auto;">
<!--<aSimple>-->
<tr class="<!--{f_paire.<!--<c>-->}-->"><td><!--<v>--></td></tr>
<!--<end>-->
</table>
</p>

<h4>Formatage des rangées paires et impaires dans un tableau</h4>
<p>
<table align="center" border="0" cellspacing="0" cellpadding="0"
style="width: 200px; margin: 0px auto;">
<!--<aSimple>-->
<tr class="<!--{f_impaire.<!--<c>-->}-->"><td><!--<v>--></td></tr>
<!--<end>-->
</table>
</p>

<h4>Formatage d'un tableau de données (array) dans une boucle</h4>
<p>
<table align="center" border="0" cellspacing="0" cellpadding="0"
style="width: 500px; margin: 0px auto;">
<tr><th>Clé "lang"</th><th>Clé "abrv"</th><th>Nombres</th></tr>
<!--<f_tableau.aMulti.lang.abrv>-->
<tr class="<!--{f_paire.<!--<c>-->}-->"><!--<valeur>--></tr>
<!--<fin>-->
</table>
</p>

<h4>Affichage conditionnel suivant le moment de la journée</h4>
<p>
<!--(f_heure.6.12)-->Bonne matinée à tous :-)<!--(s)--><!--(n)-->
<!--(f_heure.12.18)-->Bonne après-midi à tous :-)<!--(s)--><!--(n)-->
<!--(f_heure.18.22)-->Bonne soirée à tous :-)<!--(s)--><!--(n)-->
<!--(f_heure.22.6)-->Bonne nuit à tous :-)<!--(s)--><!--(n)-->
</p>

<h4>Affichage d'un calendrier dynamique</h4>
<div id="minical" class="minical_bloc">
<table border="0" cellspacing="4" cellpadding="0" align="center"
class="minical_table">
<tr class="minical_titre"><th><a href="<!--{aCal.avant}-->">&lt;</a></th>
<th colspan="5"><a href="<!--{aCal.actuel}-->"><!--{aCal.titre}--></a></th>
<th><a href="<!--{aCal.apres}-->">&gt;</a></th></tr>
<tr class="minical_jours"><th>lu</th><th>ma</th><th>me</th>
<th>je</th><th>ve</th><th>sa</th><th>di</th></tr>
<!--<aCal.mois>-->
<tr class="minical_dates">
<td><!--<v.0>--></td><td><!--<v.1>--></td><td><!--<v.2>--></td>
<td><!--<v.3>--></td><td><!--<v.4>--></td>
<td class="minical_sam"><!--<v.5>--></td><td
class="minical_dim"><!--<v.6>--></td>
</tr>
<!--<end>-->
</table>
</div>

<!-- <| -->

QuickModels - 0.02016 - sico