Ergebnis 1 bis 8 von 8

Thema: Minikalender: Direktlink der Events auf Reader und Kategorie-ID auslesen

  1. #1
    Administrator Avatar von Nina
    Registriert seit
    04.06.2009.
    Ort
    Hamburg
    Beiträge
    4.756
    Contao-Projekt unterstützen

    Support Contao

    Standard Minikalender: Direktlink der Events auf Reader und Kategorie-ID auslesen

    Ich sollte für einen Minikalender ein paar Änderungen umsetzen. Da vielleicht Teile davon auch für andere Contao-Nutzer spannend sind, poste ich hier den entsprechenden Teil.
    Folgendes wurde umgesetzt:

    • Für jedes Event, wird ein eigenständiger Link generiert. Der Link verweist nicht wie üblich auf eine Event-Liste, sondern direkt auf die Detailseite des Termins (Reader).
    • Außerdem wird für jedes Event ausgelesen, aus welchem Event-Archiv es stammt. Je nachdem, wird die ID des Archivs zu einer CSS-Klasse hinzugefügt. Das ermöglicht, dass man beispielsweise die Events farblich unterschiedlich hinterlegt anzeigt, je nachdem aus welcher Kategorie sie stammen.


    Der Abschnitt aus meinem Template sieht so aus (Update 04.11.2015):
    PHP-Code:
    <table class="minicalendar">
    <thead>
      <tr>
        <th class="head previous"><?php if ($this->prevHref): ?><a href="<?= $this->prevHref ?>" rel="nofollow" title="<?= $this->prevTitle ?>"><?= $this->prevLabel ?></a><?php else: ?>&nbsp;<?php endif; ?></th>
        <th colspan="5" class="head current"><?= $this->current ?></th>
        <th class="head next"><?php if ($this->nextHref): ?><a href="<?= $this->nextHref ?>" rel="nofollow" title="<?= $this->nextTitle ?>"><?= $this->nextLabel ?></a><?php else: ?>&nbsp;<?php endif; ?></th>
      </tr>
      <tr>
        <?php foreach ($this->days as $i=>$day): ?>
          <th class="label<?= $day['class'?>"><?= utf8_substr($day['name'], 0$this->substr?><span class="invisible"><?= utf8_substr($day['name'], $this->substr?></span></th>
        <?php endforeach; ?>
      </tr>
    </thead>
    <tbody>
      <?php foreach ($this->weeks as $class=>$week): ?>
        <tr class="<?= $class ?>">
          <?php foreach ($week as $day): ?>
            <?php if ($day['href']): ?>
              <td class="<?= $day['class'?>">
                <?= $day['label'?>

                <?php foreach($day['events'] as $event) : ?>

                  <?php if (isset($event['href']) && $event['href'] != ''): ?>
                    <a href="<?= $event['href'?>" title="<?= $event['title'?>">
                  <?php endif; ?>

                  <span class="archive-mini archive-<?php echo $event['pid']; ?>"> </span>

                  <?php if (isset($event['href']) && $event['href'] != ''): ?>
                      </a>
                  <?php endif; ?>

                <?php endforeach; ?>

              </td>
            <?php else: ?>
              <td class="<?= $day['class'?>"><?= $day['label'?></td>
            <?php endif; ?>
          <?php endforeach; ?>
        </tr>
      <?php endforeach; ?>
    </tbody>
    </table>
    Die Umsetzung ist sicher nicht perfekt, aber es funktioniert. Vielleicht hat einer der PHP-Pros mal Lust, das noch eleganter zu lösen

  2. #2
    Wandelndes Contao-Lexikon Avatar von tab
    Registriert seit
    22.10.2013.
    Beiträge
    10.198
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Verstehe ich das richtig? Bei mehreren Events an einem Tag wird dann für jeden Event ein eigener Direktlink auf die Detailseite ausgegeben, so dass der Event gleich komplett angezeigt wird? Wie zeigst du das dann an? So wirklich "mini" geht das ja dann nicht mehr, weil ja ohne Weiteres ja auch mal 5+ Events an einem Tag stattfinden können. Und irgendwie sollte man die Links auch noch anklicken können. Ist nicht als Kritik gemeint, es interessiert mich einfach, wie die Anwendung dann hinterher konkret aussehen kann. Meine Minikalender sind bisher meist in einer Seitenspalte, also wirklich eher klein (Breite ~ 200px. Da den Tag anzuklicken ist oft schon schwierig genug. Deine Ausgabe mit potenziell mehreren Links pro Tag wird also wohl deutlich größer ausfallen, oder machst du die Tage einfach entsprechend höher, damit auch mehrere Links noch gut anklickbar sind?

    Bei einem Projekt wäre das eventuell auch noch eine Verbesserung. Da habe ich ebenfalls die Kategorien (3 Archive) als Klasse ausgegeben, die verschiedenfarbige Ausgabe wird da bei mir bisher aber bei einem Link pro Tag für möglicherweise mehrere Events schnell unübersichtlich, wenn man nicht mehrfarbige Hintergründe verwenden will für den Tag. Mit einem Link pro Event ginge das natürlich besser, da lässt sich jeder Link einzeln einfärben. Insofern interessant.

  3. #3
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.706
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Das mit dem implode und den zusammengestückelten SPANs finde ich schwer zu lesen. Hier mal eine Variante:
    PHP-Code:
    ...
    <?php
      $calendars 
    = array();
      foreach(
    $day['events'] as $event) {
         
    $calendars[] = '<span class="archive-mini archive-'.$event['calendar']->id.'"></span>';
      }
      
    $calendars implode(''array_unique($calendars));
    ?>

                <?php if (isset($day['href']) && $day['href'] != ''): ?>
                    <a href="<?= $day['events'][0]['href'?>" title="<?= $day['events'][0]['title'?>">
                <?php endif; ?>

    <?php echo $calendars?>

                <?php if (isset($day['href']) && $day['href'] != ''): ?>
    ...
    Änderungen im ersten PHP-Block und bei der Ausgabe mit echo $calendars.
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  4. #4
    Administrator Avatar von Nina
    Registriert seit
    04.06.2009.
    Ort
    Hamburg
    Beiträge
    4.756
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Zitat Zitat von tab Beitrag anzeigen
    Verstehe ich das richtig? Bei mehreren Events an einem Tag wird dann für jeden Event ein eigener Direktlink auf die Detailseite ausgegeben, so dass der Event gleich komplett angezeigt wird? Wie zeigst du das dann an? So wirklich "mini" geht das ja dann nicht mehr, weil ja ohne Weiteres ja auch mal 5+ Events an einem Tag stattfinden können.
    Das hängt natürlich vom Anwendungsfall ab. Im konkreten Beispiel wurden es maximal 2 Termine an einem Tag. Mir sind die Einschränkungen natürlich klar, es ist nur als Hilfestellung gedacht, falls andere Nutzer auch mal sowas angehen wollen.

  5. #5
    Administrator Avatar von Nina
    Registriert seit
    04.06.2009.
    Ort
    Hamburg
    Beiträge
    4.756
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Ich habe den Template-Code im Startbeitrag nochmal modifiziert, da darin ein Fehler war. Außerdem ist der Code jetzt deutlich gestrafft und wesentlich besser lesbar.

  6. #6
    Contao-Fan
    Registriert seit
    22.10.2009.
    Beiträge
    293

    Standard Änderungen/Anpassungen für Contao 4.x

    Hallo,

    ich möchte das auch unter Contao 4 erreichen. Das gepostete Template aus der 3.5.x funktioniert aber hier nicht mehr. Wen ich dieses verwende, sind in dem Minikalender dann gar keine Links mehr enthalten!

    1. Ich finde nicht heraus, welche Änderungen nötig sind, um dieses Template unter Contao 4 zum Laufen zu bringen.
    2. Welche Weiterleitungsseite wähle ich im Modul mit dem Minikalender?



    Gruß,
    Ignatz

  7. #7
    Alter Contao-Hase
    Registriert seit
    22.06.2009.
    Ort
    Köln
    Beiträge
    1.342

    Standard

    Bei mir funktionieren die Links auch nicht. Gibt es dafür eine Lösung? Ich benutze Contao 3.5.24
    Viele Grüße aus Köln
    Matu

  8. #8
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.706
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Für Links per Event direkt auf den Reader braucht man nur das Template cal_default zu nehmen. Ein Wrapper mit der Klasse des Kalenders ist dann auch schon dabei. Mit CSS dann so gestalten wie man möchte (z.B. mini). Bedenkt, dass ein "Minikalender" kein eigenes Modul ist, es ist nur ein angepasstes Template, welches z.B. die Events zusammenfasst und dann nicht auf den Reader, sondern auf einen Tag verlinkt, anzuzeigen mit z.B. einer Eventliste.
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

Aktive Benutzer

Aktive Benutzer

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

Berechtigungen

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