Page 1 sur 1

Limiter l'affichage d'un foreach

Posté : 05 mai 2009, 19:43
par Merlinwp
Bonjour,

J'ai à nouveau besoin de vos lumières !

En effet, je dois utiliser une boucle foreach, mais je veux que les éléments ne s'affichent qu'une fois.

Voici mon code de travail :
<?php
$source = get_post_meta($post->ID, 'source', false); 
// Le fonctionnement de mon Cms impose cette ligne
// Mes variables $source sont séparées par des virgules
if ($source)
{
	foreach($source as $ts)
	{
		// "ts" est le nom de la variable temporaire
		list($urlts, $namets) = explode(",", $ts);
		$resultts = count($source);
		if ($resultts == 1)
			{
				echo '<p>';
				echo 'Source :';
				echo $urlts; // Pour simplifier l'exemple, je ne mentionne pas l'affichage de $namets
				echo '</p>';
			}
		else
			{
				echo '<p>';
				echo 'Sources :';
				echo '</p>';
				echo '<ol>';
				echo '<li>"'.$urlts.'"</li>'; // Pour simplifier l'exemple, je ne mentionne pas l'affichage de $namets
				echo '</ol>';
			}
	}
}
Le premier cas (une seule source) fonctionne fort bien.

Cependant, et très "logiquement", dans le deuxième cas, ma boucle est effectuée deux fois, et affiche deux fois Sources, etc... Or, je ne veux qu'un affichage, sinon il ne servirait à rien d'afficher une liste. :)

Peut-être me suis-je égaré...

Merci.

Cordialement,

Merlin

Posté : 05 mai 2009, 20:02
par AB
Tu n'as qu'a sortir "Sources" de la boucle.

Posté : 05 mai 2009, 20:17
par D4Y
Tu dois récupérer les infos à mettre dans la liste dans la boucle mais les afficher en dehors de celle-ci :
<?php
$source = get_post_meta($post->ID, 'source', false); 
// Le fonctionnement de mon Cms impose cette ligne
// Mes variables $source sont séparées par des virgules
if ($source)
{
 $list_url .= "";
    foreach($source as $ts)
    {
        // "ts" est le nom de la variable temporaire
        list($urlts, $namets) = explode(",", $ts);
        $resultts = count($source);

       $list_url .= '<li>"'.$urlts.'"</li>'; 
    }

 if ($resultts == 1)
            {
                echo '<p>';
                echo 'Source :';
                echo $urlts; // Pour simplifier l'exemple, je ne mentionne pas l'affichage de $namets
                echo '</p>';
            }
        else
            {
                echo '<p>';
                echo 'Sources :';
                echo '</p>';
                echo '<ol>';
                echo $list_url
                echo '</ol>';
            }
} 

?>

Posté : 05 mai 2009, 20:45
par AB
D'ailleurs en reprenant l'exemple de D4Y, à mon avis tu pourrais garder le même formatage quelque soit le nombre de résultats. Au pire tu aurais une liste de 1 élément mais je ne pense pas que cela soit contraire à la sémantique.

Posté : 05 mai 2009, 22:40
par Merlinwp
Résolu ! :)

Après test et re-test.

Merci, Messieurs, pour votre aide précieuse et vos suggestions, qui m'aideront à passer une nuit l'esprit serein.

Cordialement,

Merlin

Posté : 05 mai 2009, 23:03
par Merlinwp
Post Scriptum pour AB

Pour t'amuser, et comme tu sembles manier avec bonheur Xhtml à en consulter ton site, je vais t'amuser (enfin, essayer...).

Au départ, mon idée était de créer une liste sous la forme...

Code : Tout sélectionner

<ul> <li>[1] lien no 1,</li> <li>[2] lien no 2,</li> <li>...</li> </ul>
... en générant [1] et [2] grâce à une incrémentation de la valeur avec Php.

J'ai réalisé ensuite (sur le tard !) que la balise ol de Xhtml gérait parfaitement la numérotation !

A ma décharge, en pratique quotidienne, j'utilise davantage les listes simples et les listes de définitions.

Cordialement,

Merlin

Posté : 06 mai 2009, 03:36
par AB
Ah ok, je comprend mieux ta démarche :wink: