Ergebnis 1 bis 4 von 4

Thema: Private Events im Mini-Kalender verstecken (Template-Anpassung ical_mini.html5)

  1. #1
    Contao-Nutzer Avatar von GeorgDerks
    Registriert seit
    20.01.2010.
    Ort
    47906 Kempen
    Beiträge
    70
    Partner-ID
    6516

    Standard Private Events im Mini-Kalender verstecken (Template-Anpassung ical_mini.html5)

    Hallo zesamm!

    Ich habe die Eingabemaske für Eventeinstellungen um eine zusätzliche Checkbox "Privat" erweitert. Wenn "Privat" angehakt ist, soll dieser Termin unsichtbar sein. Oder besser formuliert: Tage sollen nur dann als "aktiv" markiert und anklickbar sein, wenn es (mindestens) einen öffentlichen Termin an diesem Tag gibt.

    Die einzelne Woche wird in ical_mini.html5 so aufgebaut (Original):

    PHP-Code:
        <tr class="<?= $class ?>">
          <?php foreach ($week as $day): ?>
            <?php if ($day['href']): ?>
              <td class="<?= $day['class'?>"><a href="<?= $day['href'?>" title="<?= $day['title'?>"><?= $day['label'?></a></td>
            <?php else: ?>
              <td class="<?= $day['class'?>"><?= $day['label'?></td>
            <?php endif; ?>
          <?php endforeach; ?>
        </tr>
    Ich habe eine zusätzliche Abfrageschleife eingebaut, die pro Tag alle Arrays der einzelnen Events durchforstet. Bei mir sieht's nun so aus:

    PHP-Code:
        <tr class="<?= $class ?>">
          <?php foreach ($week as $day): ?>

          <?php //Abfrage privater Events und Gesamtzahl Events für jeden Tag
          
    foreach($day as $tag) {
            foreach(
    $tag as $event) {
              
    $private $private $event['private'];
              
    $gesamt++;
            }
          }
          
    $public $gesamt-$private;
          
    ?>

            <?php if ($day['href'] && ($public || FrontendUser::getInstance()->groups[0] == 1)): ?>
              <td class="<?= $day['class'?>"><a href="<?= $day['href'?>" title="<?= $day['title'?>"><?= $day['label'?></a></td>
            <?php else: ?>
              <?php $day['class'] = str_replace("days active""days"$day['class']); ?>
              <td class="<?= $day['class'?>"><?= $day['label'?></td>
            <?php endif; ?>
          <?php endforeach; ?>
        </tr>
    Ich könnte mir vorstellen, es gibt einen geschmeidigeren (und erst recht professionelleren) Workflow, doch es funktioniert prima :-). Nur die error.log, die wächst zusehends, und das würde ich gerne ausmerzen.

    Und so sieht ein Eintrag in der error.log aus:

    Code:
    [10-Mar-2016 13:55:03 Europe/Berlin] 
    PHP Warning: Invalid argument supplied for foreach() in /home/www/contao/templates/health_navigator/cal_mini.html5 on line 26
    #0 /home/www/contao/templates/health_navigator/cal_mini.html5(26): __error(2, 'Invalid argumen...', '/home/www/conta...', 26, Array)
    #1 /home/www/contao/system/modules/core/library/Contao/BaseTemplate.php(88): include('/home/www/conta...')
    #2 /home/www/contao/system/modules/core/library/Contao/Template.php(277): Contao\BaseTemplate->parse()
    #3 /home/www/contao/system/modules/core/classes/FrontendTemplate.php(46): Contao\Template->parse()
    #4 /home/www/contao/system/modules/calendar/modules/ModuleCalendar.php(171): Contao\FrontendTemplate->parse()
    #5 /home/www/contao/system/modules/core/modules/Module.php(283): Contao\ModuleCalendar->compile()
    #6 /home/www/contao/system/modules/calendar/modules/ModuleCalendar.php(79): Contao\Module->generate()
    #7 /home/www/contao/system/modules/core/elements/ContentModule.php(59): Contao\ModuleCalendar->generate()
    #8 /home/www/contao/system/modules/core/library/Contao/Controller.php(476): Contao\ContentModule->generate()
    #9 /home/www/contao/system/modules/core/modules/ModuleArticle.php(213): Contao\Controller::getContentElement(Object(Contao\ContentModel), 'right')
    #10 /home/www/contao/system/modules/core/modules/Module.php(283): Contao\ModuleArticle->compile()
    #11 /home/www/contao/system/modules/core/modules/ModuleArticle.php(67): Contao\Module->generate()
    #12 /home/www/contao/system/modules/core/library/Contao/Controller.php(409): Contao\ModuleArticle->generate(false)
    #13 /home/www/contao/system/modules/core/library/Contao/Controller.php(269): Contao\Controller::getArticle(Object(Contao\ArticleModel), false, false, 'right')
    #14 /home/www/contao/system/modules/core/pages/PageRegular.php(133): Contao\Controller::getFrontendModule('0', 'right')
    #15 /home/www/contao/system/modules/core/controllers/FrontendIndex.php(267): Contao\PageRegular->generate(Object(Contao\PageModel), true)
    #16 /home/www/contao/index.php(20): Contao\FrontendIndex->run()
    #17 {main}
    Wüsste da draußen jemand eine Lösung, die diese Fehlermeldung verhindert (mir ist auch nicht klar, woher die Fehlermeldung überhaupt kommt)?
    Herzlichen Gruß,

  2. #2
    Contao-Urgestein Avatar von Franko
    Registriert seit
    22.06.2009.
    Beiträge
    1.503
    Partner-ID
    6122

    Standard

    Hallo,
    wozu die zweite
    PHP-Code:
    foreach($tag as $event) { 
    Schleife?
    In Deiner
    PHP-Code:
    foreach($day as $tag) { 
    müssten doch alle events des jeweiligen Tages aufgeführt werden - $tag['privat'] ...

    Frank
    Freelancer, Digital Design Enthusiast, Contao Aficionado and Tutorial Junkie @MoinFranko - Carpe diem ...

  3. #3
    Contao-Urgestein Avatar von folkfreund
    Registriert seit
    09.04.2010.
    Beiträge
    1.928

    Standard

    Ich hätte vielleicht (ganz ohne Codeänderung und mit Bordmitteln ) unter Events einen eigenen Kalender für private Termine eingerichtet. Im MiniKalender-Modul kannst du dann auswählen, dass diese Termine nicht erscheinen sollen.
    Unabhängig davon können sie, wenn du willst, in der Eventliste, auf die der Minikalender weiterleitet, wieder aktiviert werden.

    Gruß, folkfreund

  4. #4
    Contao-Nutzer Avatar von GeorgDerks
    Registriert seit
    20.01.2010.
    Ort
    47906 Kempen
    Beiträge
    70
    Partner-ID
    6516

    Standard Gelöst!

    Den entscheidenden Tipp zur Lösung habe ich von christian bekommen.

    Zum Vergleich hier noch einmal mein Code:

    PHP-Code:
    <?php //Abfrage privater Events und Gesamtzahl Events für jeden Tag
    foreach($day as $tag) {
      foreach(
    $tag as $event) {
        
    $private $private $event['private'];
        
    $gesamt++;
      }
    }
    ?>
    und im folgenden der korrigierte:

    PHP-Code:
    <?php //Abfrage privater Events und Gesamtzahl Events für jeden Tag
    $day is_array($day) ? $day:array();
    foreach((array)
    $day as $tag) {
      
    $tag is_array($tag) ? $tag:array();
      foreach(
    $tag as $event) {
        
    $private $private $event['private'];
        
    $gesamt++;
      }
    }
    ?>
    Danke dennoch allen Beteiligten für die Antworten!
    Herzlichen Gruß,

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •