Partage
  • Partager sur Facebook
  • Partager sur Twitter

Symfony calendrier Tattali - sélection évènements

Sélection évènements suivant paramètre dans route

    16 novembre 2019 à 15:40:36

    Mon site est multi-client et chaque client nécessite un calendrier séparé.

    J'utilise le calendrier Tattali

    https://packagist.org/packages/tattali/calendar-bundle

    Par exemple pour le client 7, la route /calendrier/7 m'affiche le calendrier

    Dans /src/EventListener/CalendarListener.php, j'ai modifié la méthode load

        public function load(CalendarEvent $calendar )
        {
            $start = $calendar->getStart();
            $end = $calendar->getEnd();
            $filters = $calendar->getFilters();
    
    
            # comment recuperer le parametre client_id de l'url ?
            $client_id = '7'; 
    
            if (True) {
    
                $mes_events = $this->em->getRepository(Evenement::class)
                    ->createQueryBuilder('b')
                    ->andWhere('b.client='.$client_id)
                    ->andWhere('b.beginAt BETWEEN :startDate and :endDate')
                    ->setParameter('startDate', $start->format('Y-m-d H:i:s'))
                    ->setParameter('endDate', $end->format('Y-m-d H:i:s'))
                    ->getQuery()
                    ->getResult();
    
    
                foreach($mes_events as $evenement) {
    
                    $e = new Event(
                        $evenement->getTitle(),
                        $evenement->getBeginAt(),
                        $evenement->getEndAt() 
                    );
    
    
                    $allDay = ($evenement->getEndAt()==''); 
    
                    # https://fullcalendar.io/docs/event-object
                    $e->setOptions([
                        'backgroundColor' => $evenement->getCouleur(),
                        'borderColor' => '#ccc',
                        'allDay' => $allDay , 
                    ]);
    
                    $calendar->addEvent($e);
    
                }
                
            }
    


    Cela fonctionne bien mais comment remplacer $client_id = '7' par l'argument de la route ?

    -
    Edité par MatAlabanana 16 novembre 2019 à 15:45:59

    • Partager sur Facebook
    • Partager sur Twitter
      18 novembre 2019 à 18:25:39

      J'ai trouvé une façon détournée de parvenir à mon but en utilisant la variable $_SERVER.

      Je reste ouvert aux conseils, j'ai le sentiment que ce n'est pas la meilleure façon de faire....

              $url = $_SERVER['HTTP_REFERER']; 
              $x = explode('/',$url); 
              $client_id = end($x); 
      



      • Partager sur Facebook
      • Partager sur Twitter
        19 novembre 2019 à 8:56:16

        MatAlabanana a écrit:

        J'ai trouvé une façon détournée de parvenir à mon but en utilisant la variable $_SERVER.

        Je reste ouvert aux conseils, j'ai le sentiment que ce n'est pas la meilleure façon de faire....

                $url = $_SERVER['HTTP_REFERER']; 
                $x = explode('/',$url); 
                $client_id = end($x); 
        


        tu as le code entier de ta fonction/méthode ?



        • Partager sur Facebook
        • Partager sur Twitter
          20 novembre 2019 à 8:52:48

          Oui, cela donne ça au final

              public function load(CalendarEvent $calendar   )
              {
                  $start = $calendar->getStart();
                  $end = $calendar->getEnd();
                  $filters = $calendar->getFilters();
          
          
          
                  # client_id depuis la route
                  $url = $_SERVER['HTTP_REFERER']; 
                  $x = explode('/',$url); 
                  $client_id = end($x); 
          
                  $client = $this->em->getRepository(Client::class)->find($client_id); 
                  
          
                  if (True && $client) {
          
                      $mes_events = $this->em->getRepository(Evenement::class)
                          ->createQueryBuilder('e')
                          ->leftJoin('e.client','c')
                          ->andWhere('e.affichage <= c.calendrierAffichage')
                          ->andWhere('c = :clt')
                          ->andWhere('e.beginAt BETWEEN :startDate and :endDate')
                          ->setParameter('startDate', $start->format('Y-m-d H:i:s'))
                          ->setParameter('endDate', $end->format('Y-m-d H:i:s'))
                          ->setParameter('clt', $client)
                          ->getQuery()
                          ->getResult();
          
          
                      foreach($mes_events as $evenement) {
          
                          $e = new Event(
                              $evenement->getTitle(),
                              $evenement->getBeginAt(),
                              $evenement->getEndAt() 
                          );
          
          
                          $allDay = ($evenement->getEndAt()==''); 
          
                          # https://fullcalendar.io/docs/event-object
                          $e->setOptions([
                              'backgroundColor' => $evenement->getCouleur(),
                              'borderColor' => '#ccc',
                              'allDay' => $allDay , 
                          ]);
          
                          $calendar->addEvent($e);
          
          #                $calendar->setOptions([
           #                   'timeFormat' => 'H(:mm)',  // uppercase H for 24-hour clock
            #              ]); 
                      }
                      
                  } else { # debug
          
                      $calendar->addEvent(new Event(
                          'debug '.$client_id ,
                          new \DateTime('Tuesday this week'),
                          new \DateTime('Wednesdays this week')
                      ));
          
                      // If the end date is null or not defined, it creates a all day event
                      $calendar->addEvent(new Event(
                          'All day event',
                          new \DateTime('Friday this week')
                      ));
          
                  }
             }
          



          • Partager sur Facebook
          • Partager sur Twitter

          Symfony calendrier Tattali - sélection évènements

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown