Limiter l'affichage d'un foreach

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Limiter l'affichage d'un foreach

par AB » 06 mai 2009, 03:36

Ah ok, je comprend mieux ta démarche :wink:

par Merlinwp » 05 mai 2009, 23:03

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

par Merlinwp » 05 mai 2009, 22:40

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

par AB » 05 mai 2009, 20:45

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.

par D4Y » 05 mai 2009, 20:17

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>';
            }
} 

?>

par AB » 05 mai 2009, 20:02

Tu n'as qu'a sortir "Sources" de la boucle.

Limiter l'affichage d'un foreach

par Merlinwp » 05 mai 2009, 19:43

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