8768 sujets

Développement web côté serveur, CMS

Bonjour,
J'ai un script php qui récupère les 2 dernières infos enregistrées dans un agenda Google.
Tout fonctionne bien mais ces 2 infos s'affichent dans 2 div identiques à la suite (des rectangles colorés).
Afin de gagner de la place sur ma page, je souhaiterais afficher les 2 infos dans une seule et même div, sous forme de liste par exemple, ou de tableau, je verrai.
Je n'arrive pas à trouver dans mon script, ci-dessous, où intervenir.
Si je modifie le dernier if en passant l'indice à $==1 cela m'affiche seulement la dernière info.
Pourriez-vous, SVP, m'indiquer où je peux intervenir dans ce script pour arriver à ce que je souhaite ?
Un grand merci par avance.
Evelyne31

while(true) {
            $i=0;
              foreach ($events->getItems() as $event) {
                $i=$i+1;
                //Contenu d'un événement
                  if($i==1){
                        echo "<h2>Prochaines manifestations : </h2>";
                    }
                ?>
                 <div id="event" style="margin-left:300px;">
                    
                    <h3><?php echo $event->getSummary(); ?></h3>
                    
                    <h4><?php
                    
                               $start = $event->start->dateTime;
                               if (empty($start)) {
                                 $start = $event->start->date;
                               }
                              
                    setlocale (LC_TIME, 'fr_FR.utf8', 'fra', 'fr', 'fr_FR', 'fr_FR.ISO8859-1');
                    echo $date = strftime("%A %d %B %Y", strtotime($start)); //Output la date en fran?§ais
                    ?> </h4>
                  	
                    <p><?php echo $event->getDescription(); ?></p>
                  
                </div> 
                   
                <?php  
                if($i==2){ //Afin de ne récupérer que deux events 
                    break;   
                }
bah tu as une '<div>' html dans ton foreach, donc forcément à chaque itération une div est créée
Bonjour et merci JENCAL pour ta réponse.

C'est bête de ne pas y avoir pensé !
J'ai donc sorti ma <div> du foreach et je l'ai placée en fin de code, après la fermeture du php.
Mais à présent il n'y a plus que la dernière info qui s'affiche.
J'ai vérifié il y en a plusieurs dans mon GoogleAgenda.
Et la portion de code qui définit le nombre d'infos à récupérer est bonne :
 if($i==2){ //Afin de ne récupérer que deux events 
                    break;   
                }

Une idée ? Merci par avance.
Evelyne31
Bonjour Evelyne31
Evelyne31 a écrit :

J'ai donc sorti ma <div> du foreach et je l'ai placée en fin de code, après la fermeture du php
Peux-tu nous montrer la-dite modification s'il te plaît car j'ai l'intime conviction que tu es allée placer ta div à Perpette-La-Galette (bretonne) ?
Le probleme actuel est que tu créer div à chaque itération de boucle, toi tu les veux 2 par 2 si j'ai bien suivie.
Tu pourrais utiliser une variable te servant de compteur qui, au bout de 2 itération, te ferme la <div> et t'en créer une autre.
en pseudo code :

compteur = 0
Boucle pour tous les items foreach
{ 
    si compteur différent de 0
       {
              alors créer mon contenu qui doit se retrouver dans ma div (mon contenu html);
       }Fin du si

     Si compteur == 2
       {
              Ferme la div
              Ouvre une div
       }Fin du Si

      Si compteur == 0
       {
              Ouvre la premier Div
       }Fin du Si
compteur = compteur + 1
}Fin de la boucle
Fermeture de ma div
Merci beaucoup JENCAL et Greg_Lumiere pour vos réponses.

Je reprends et teste le code de JENCAL ce soir et espère poster en "résolu" pas trop tard !

Je ne pense pas avoir mis ma <div> à perpette ? Je poste malgré tout mon code ci-dessous car il doit bien y avoir une erreur quelque part !

Encore merci,
Evelyne31

 while(true) {
            $i=0;
              foreach ($events->getItems() as $event) {
                $i=$i+1;
                //Contenu d'un événement
                  if($i==1){
                        echo "<h2>Prochaine manifestation : </h2>";
                    }else{
                        echo "<h2>Manifestation suivante : </h2>";   
                    }
                ?>
                                   
                <?php  
                if($i==2){ //Afin de ne récupérer que deux events 
                    break;   
                }
                ?>
                
                
                <div id="event" style="margin-left:300px;">
                    
                    <h3><?php echo $event->getSummary(); ?></h3>
                    
                    <h4><?php
                    
                               $start = $event->start->dateTime;
                               if (empty($start)) {
                                 $start = $event->start->date;
                               }
                              
                    setlocale (LC_TIME, 'fr_FR.utf8', 'fra', 'fr', 'fr_FR', 'fr_FR.ISO8859-1');
                    echo $date = strftime("%A %d %B %Y", strtotime($start)); //Output la date en fran?§ais
                    ?> </h4>
                  	
                    <p></br></br><?php echo $event->getDescription(); ?></p>
                </div> 

              <?php 
                
              } //Ci-dessous ne pas toucher
              $pageToken = $events->getNextPageToken();
              if ($pageToken) {
                $optParams = array('pageToken' => $pageToken);
                $events = $service->events->listEvents('primary', $optParams);
              } else {
                break;
              }
        }
  
   ?>
Bonjour,
Encore merci JENCAL pour tes conseils. J'ai repris mon code selon tes indications et tout fonctionne bien, il y a bien les 2 dernières infos du GoogleAgenda insérées dans la même <div>.
Je copie le code ci-dessous s'il peut servir à d'autres. Suite à une remarque de Greg_Lumiere, je précise que les 2 paramètres pour avoir la date en français sont apparemment inutiles. Mais, prudente, je ne touche à rien !
Très bonne fin de journée,
Evelyne31

while(true) {
            
            ?>
            <div id="event" style="margin-left:300px;">
            
            <?php 
            $i=0;
              foreach ($events->getItems() as $event) {
                $i=$i+1;
                //Contenu d'un événement
                  if($i==1){
                                            }                
                                                    
                if($i==3){ //Afin de ne récupérer que deux events
                 
                    break;   
                }
                ?>
                     <h3><?php echo $event->getSummary(); ?></h3>
                     <p><?php echo $event->getDescription(); ?></p>
                    
                    <h4><?php
                    
                               $start = $event->start->dateTime;
                               if (empty($start)) {
                                 $start = $event->start->date;
                               }
                              
                    setlocale (LC_TIME, 'fr_FR.utf8', 'fra', 'fr', 'fr_FR', 'fr_FR.ISO8859-1');
                    echo $date = strftime("%A %d %B %Y", strtotime($start)); //Output la date en fran?§ais
                    ?></h4>            

              <?php                 
              } //Ci-dessous ne pas toucher
              $pageToken = $events->getNextPageToken();
              if ($pageToken) {
                $optParams = array('pageToken' => $pageToken);
                $events = $service->events->listEvents('primary', $optParams);
              } else {
                break;
              }
        } 
   ?>
</div>