Bonjour !
Bon, voilà ça va être tout simple, mais est-ce que vous auriez un moyen de raccourcir tout ça ?
<?php
if (get_field('pays')=="France"){
echo '<td class="pays" id="fr" valign="top">';
}elseif (get_field('pays')=="USA"){
echo '<td class="pays" id="usa" valign="top">';
}elseif (get_field('pays')=="Allemagne"){
echo '<td class="pays" id="ger" valign="top">';
}else {
echo '<td class="pays" id="oth" valign="top">';
}
?>
Le but du code :
Si ( partie backend ) on selectionne tel ou tel pays, alors on affiche un td avec un id en fonction du pays ( ici fr pour france, ger pour l'allemagne...etc ).
Côté css, un sprite avec tout pleins de drapeaux dessus ( d'ou un id pour chaque td/pays ).
Côté frontend, le drapeau du pays sélectionné affiché.
Il y a une 15aine de pays en tout, donc ça prend de la place. Vous avez une moyen de raccourcir et alléger ce code ?
Merci d'avance :)
ton idée d'un tableau associatif est valable
$pays = array( 'France' => 'fr', 'Allemagne' => 'ger', 'USA' => 'usa' );
array_key_exists(get_field('pays'), $pays) ? echo "<td class='pays' id='{$pays get_field('pays') ]}' valign='top'>"; : echo "<td class='pays' id='oth' valign='top'>";
l'erreur se produit quand le pays est vide, donc faut tester si il n'est pas vide avant d'appliquer array_key_existe car elle ne supporte pas une entrée vide
a tester
$pays = get_field('pays');
$listePays = array( 'France' => 'fr', 'Allemagne' => 'ger', 'USA' => 'usa' );
echo ((!empty($pays) && array_key_exists($pays, $listePays)) ? '<td class="pays" id="'.$listePays$pays].'" valign="top">' : '<td class="pays" id="oth" valign="top">');
Tu parles d'un switch ?
switch(get_field('pays')
{
case 'France':
echo "...";
case 'Allemagne':
echo "...";
default:
break;
}
Aucune idée, je vais tester ça, je cherche surtout à simplifier le code, le minifier.
Dans ma tête, je voyais un truc du genre :
$var = array(
'Allemagne' -> 'ger',
'France' -> 'fr',
etc...
)
<td class="pays" id="<?php $var ?>" valign="top">
Bien sur, il manque la partie get field, select... mais c'est ce que je voyais. Dans mes leçons php, j'ai jamais dépassé la 2eme partie... en clair, je suis débutant confirmé, donc j'ai su écrire ça, je me suis dit que ça faisait long, très long ^^
Edit : Le swich ne fonctionne pas correctement, au lieu de m'afficher un <td> par <tr>, il me les affiche tous dans un <tr>.
Le switch devrait fonctionner tout aussi bien que le if ... elseif ...
Si tu n'as pas le résultat attendu c'est que tu as fait une erreur quelque part dans son utilisation. Par contre il faut mettre des break; a la fin de chaque bloc
@Vallyan je salue ta solution. Par contre juste une petit ajout. Dans le cas de @Estillia, je ne peux savoir comment fonctionne la fonction. Mais si c'est une fonction complexe (lourde) il vaut mieux cacher son résultat une première fois, pour éviter de l'exécuter une nouvelle fois.
En plus, avec une telle solution tu peux même envisager de placer ta liste des pays dans un fichier config.
$pays = get_field('pays');
$listePays = array( 'France' => 'fr', 'Allemagne' => 'ger', 'USA' => 'usa' );
echo (array_key_exists($pays, $listePays) ? '<td class="pays" id="'.$listePays$pays].'" valign="top">' : '<td class="pays" id="oth" valign="top">');
Avec cette solution, j'ai cette erreur :
Warning: array_key_exists(): The first argument should be either a string or an integer
Un idée ?
Le '<td class="pays" id="oth" valign="top">' était censé remplacer une entrée vide :)
Merci pour ta réponse rapide ^^
Edit, 2eme solution parfaitement fonctionnelle ! Merci ! :)
( Au final il va y avoir une 40aine d'entrées et de pays, c'est mieux, beaucoup mieux et beaucoup plus court ^^ )
Justement le code équivaut à
tu test en premier si le pays n'est pas vide, si vide il va directement dans le else
sinon il continue avec array_key_exists pour cherche une clef qui correspond, sinon il va dans else
if (!empty($pays) && array_key_exists($pays, $listePays))
{
echo '<td class="pays" id="'.$listePays$pays].'" valign="top">';
}
else
{
echo '<td class="pays" id="oth" valign="top">';
}
Voila voila,
Bah en tout cas merci, ça m'aide beaucoup :)
Et en plus, j'aurais appris qq chose :p