8778 sujets

Développement web côté serveur, CMS

Hello

j'ai toujours été un peu perdu avec les opérateurs modulo.

J'ai une liste, je veux que tous les 3 éléments ma liste se ferme et en ouvre une autre , c'est bien comme cela que l'on procède ? cela me génère 2 liste de 3 éléments et une liste vide quand je n'ai que 6 éléments par exemple.


<ul>
<?php $i = 1; ?>
<?php while(have_rows('rows')): the_row(); ?>
    <li>...<li>
    <?php if($i%3 == 0): echo '</ul><ul>'; endif; ?>
    <?php $i++; ?>
<?php endwhile; ?>
</ul>

Modifié par Pedrothelion (22 Jan 2025 - 17:55)
C'est bien le principe du modulo. C'est juste un problème avec ton algo.
Si on trace ce qu'il se passe, arrivé à 6%3 il écrit </ul><ul> puis il termine la boucle et ferme le </ul> sans rien mettre dedans.

Je sais pas ce que c'est exactement ta fonction have_rows, mais je suppose que tu dois pouvoir la rajouter dans ton if pour vérifier qu'il reste des lignes à mettre dans le ul que tu ouvres.
if($i%3 == 0 and have_rows('rows'))

Modifié par Mathieuu (23 Jan 2025 - 09:50)
Merci

j'ai résolu mon problème ainsi :


$i = 1;
while(have_rows('rows')): the_row();
    if($i%3 == 1) :
        echo '<ul>';
    endif;
   
    echo '<li>...<li>';
    
    if($i%3 == 0):
        echo '</ul>';
    endif;
    
    $i++;
endwhile;
Meilleure solution
Tu passes d'un bug à trop d'ouverture d'ul à pas assez de fermeture d'ul Smiley sweatdrop
Si tu ne renvoies pas un multiple de 3 lignes, tu ne fermeras pas le dernier ul Smiley ohwell