OVH Cloud OVH Cloud

Tableaux associatifs...

1 réponse
Avatar
foxbille
Bonjour,
J'ai beaucoup de mal avec les tableaux associatifs en général, mais
si on rajoute SMARTY par dessus, c'est "rien que du bonheur".

Je vous soumet le problème suivant. C'est pas que ça ne marche pas,
mais ça me parait lourdingue et ça montre sans doute bien que je n'ai
pas tout compris (je suis pourtant fana de l'associatif en général) :

Soit un tableau chargé comme ça :
$tatemp["Age du capitaine = "] = $agecap;
$tatemp["Nombre de matelots = "] = $nbmat;

Soit un template SMARTY :
<ul>
{section name="i0" loop=$criteres}
<li>{$criteres[i0].critere}&nbsp;{$criteres[i0].valeur}</li>
{/section}
</ul>

Dans le script d'affichage :
$nIter=0;
while (list ($tckey, $tcval) = each ($tatemp)) {
$temp[$nIter]['critere']=$tckey;
$temp[$nIter++]['valeur']=$tcval;
}
$smarty->assign('criteres',$temp);

Est-ce qu'il y a mieux (et surtout plus malin...) ?
Merci et Bonne journée.
Eric
Sans regrets d'être devant le micro, vu le temps... ça caille dans
les Alpes !!!

1 réponse

Avatar
Bruno Desthuilliers
(snip)

Soit un tableau chargé comme ça :


$tatemp = Array();
$tatemp["Age du capitaine = "] = $agecap;
$tatemp["Nombre de matelots = "] = $nbmat;

Soit un template SMARTY :
<ul>
{section name="i0" loop=$criteres}
<li>{$criteres[i0].critere}&nbsp;{$criteres[i0].valeur}</li>
{/section}
</ul>

Dans le script d'affichage :
$nIter=0;
$temp = Array();

while (list ($tckey, $tcval) = each ($tatemp)) {
$temp[$nIter] = Array();

$temp[$nIter]['critere']=$tckey;
$temp[$nIter++]['valeur']=$tcval;
}
$smarty->assign('criteres',$temp);

Est-ce qu'il y a mieux (et surtout plus malin...) ?



Tu peux déjà l'écrire 'proprement':

$criteres = Array();
foreach($tatemp as $key=>$val) {
$critere[] = Array('critere'=>$key, 'valeur'=>$val);
}
$smarty->assign('criteres',$criteres);


ensuite, tu peux simplifier l'écriture en supprimant $tatemp:

$criteres = Array();
$criteres[] = Array('critere'=> 'age du capitaine =',
'valeur' => $agecap);

$criteres[] = Array('critere'=> 'Nombre de matelots =',
'valeur' => $nbmat);

$smarty->assign('criteres',$criteres);


Enfin, et surtout, il y a beaucoup plus simple:

# traitement.php
$criteres["Age du capitaine"] = $agecap;
$criteres["Nombre de matelots"] = $nbmat;
include "template.php";

# template.php
echo "<ul>n";
foreach( $criteres as $label=>$value) {
echo "<li>$label&nbsp;=&nbsp;$value";</li>n";
}
echo "</ul>n";


PHP *est* un langage de template. Autant je comprends l'intérêt de
langages de templates à attributs (TAL, Nevow...), autant je ne vois pas
l'intérêt d'un langage de template comme smarty, qui n'est pas plus
simple que PHP, pas plus lisible que PHP, et pas plus utilisable pour un
webdesigner que PHP.

Mes deux centimes...