Contao-Camp 2024
Ergebnis 1 bis 12 von 12

Thema: Link zu Event-Details

  1. #1
    Contao-Fan
    Registriert seit
    26.03.2010.
    Beiträge
    327

    Standard Link zu Event-Details

    Moin!

    "Nicht schon wieder!" dachte ich vorhin. Ich mache zwar inzwischen einigermaßen artig meine Updates, habe aber immer noch nicht den Schritt auf Contao 4.x gewagt - das ist für den Sommer-Urlaub geplant.
    Nun schaut man sich nach einem Bugfix-Update ja nicht JEDE Seite seiner ganzen Präsenz an. So ist es erst jetzt aufgefallen, dass - seit wann auch immer - mein modifiziertes Template cal_default schon wieder nicht mehr richtig funktioniert. Das selbe Symptom wie in einem alten Thread von mir schon mal diskutiert.
    Ich möchte im Kalender das Event NICHT verlinkt haben, wenn das Event KEINE DETAILS hat.
    Leider hat mich dies' Mal
    PHP-Code:
    <?php $this->showTemplateVars() ?>
    nicht nach vorne gebracht, weil ich diesen ganzen Wust von (strukturierten) Objekten und Variablen nicht mehr überblicke bzw. verstehe.
    Ist jemand bitte so nett und gibt mir einen Tipp (Codeschnipsel) um das alte gewünschte Verhalten wieder herzustellen.
    PHP-Code:
    <?php if ($event['hasDetails']): ?>
    funktioniert augenscheinlich nicht mehr ;-(

    TIA
    purzel

    ERGÄNZUNG (einige Stunden später):
    Ich habe den alten Thread nochmal genauer betrachtet; dort war der Vorschlag mit
    PHP-Code:
    <?php if ($this->hasDetails): ?>
    und ich hatte seinerzeit geantwortet, das führte zu nichts. Jetzt führt es zu was, nämlich dass GAR KEIN Link mehr erzeugt wird - auch wenn das Event Details hat. Das ist aber auch nicht das Gewünschte.
    Geändert von purzel (18.05.2019 um 15:56 Uhr)

  2. #2
    Contao-Fan
    Registriert seit
    26.03.2010.
    Beiträge
    327

    Standard

    Ich habe jetzt einen Entschluss gefasst und die gesamte Verlinkung von Events aus dem Kalender (cal_default) entfernt und somit keinen Link auf nicht existente Details mehr
    Das Stück im Template ist jetzt nur noch
    PHP-Code:
    <div class="event cal_<?= $event['parent'?><?= $event['class'?>">
        <?= $event['link'?>
    </div>
    Geändert von purzel (19.05.2019 um 17:19 Uhr)

  3. #3
    Contao-Fan
    Registriert seit
    26.03.2010.
    Beiträge
    327

    Standard auch 4.4 betreffend!

    Das Ding lässt mir keine Ruhe, inzwischen auch in der (noch Testinstanz) 4.4

    Wenn ich das Template event_list um meine Bedingung <?php if ($this->hasDetails): ?> ergänze, werden Events mit Details anklickbar, Events ohne Details eben nicht. Im Grunde genau wie es sein soll.
    Im Template cal_default funktioniert die Bedingung nicht.

    Meine Vermutung ist nun, dass dieses "hasDetails" => Closure beim Kalender "tiefer" im $this vergraben ist als in der Eventliste - und meine Kenntnisse im (objektorientierten) PHP nicht weit genug reichen um im Fall Kalender das "hasDetails" zu "erreichen". Außerdem kapiere ich nicht, was ein "Closure" ist, aber ich denke (hoffe!) das ist hier egal.

    Kann mir jemand helfen? Bitte!

  4. #4
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.896
    Partner-ID
    10107

    Standard

    Poste dein aktuelles cal_default Template.

  5. #5
    Contao-Fan
    Registriert seit
    26.03.2010.
    Beiträge
    327

    Standard

    Außer der Schleife habe ich nichts verändert, deswegen poste ich der Übersichtlichkeit wegen nur die.
    Dies funktioniert NICHT (in cal_default):
    PHP-Code:
              <?php foreach ($day['events'] as $event): ?>
                <div class="event cal_<?= $event['parent'?><?= $event['class'?>" itemscope itemtype="http://schema.org/Event">
                  <?php if ($this->hasDetails): ?><a href="<?= $event['href'?>" title="<?= $event['title'?> (<?php if ($event['day']) echo $event['day'] . ', '?><?= $event['date'?><?php if ($event['time']) echo ', ' .  $event['time']; ?>)"<?= $event['target'?> itemprop="url"><span itemprop="name"><?php endif; ?><?= $event['link'?></span><?php if ($this->hasDetails) echo '</a>'?>
                </div>
              <?php endforeach; ?>
    Aus Verlegenheit (siehe auch 19.5.) behelfe ich mir (in cal_default) mit
    PHP-Code:
              <?php foreach ($day['events'] as $event): ?>
                <div class="event cal_<?= $event['parent'?><?= $event['class'?>" itemscope itemtype="http://schema.org/Event">
                  <?= $event['link'?>
                </div>
              <?php endforeach; ?>
    Im Template event_list klappt das mit der Bedingung:
    PHP-Code:
    <div class="event layout_list<?= $this->classList ?>" style="margin-left: 10px;">

      <p class="time"><strong><?= $this->date ?><?php if ($this->time): ?><?= $this->time ?><?php endif; ?>: </strong> 

      <?php if ($this->hasDetails): ?><a href="<?= $this->href ?>" title="<?= $this->title ?> (<?php if ($this->day) echo $this->day ', '?><?= $this->date ?><?php if ($this->time) echo ', ' $this->time?>)"<?= $this->target ?>><?php endif; ?><?= $this->link ?><?php if ($this->hasDetails) echo '</a>'?></p>

      <div class="ce_text block">
        <?= $this->teaser ?>
      </div>
    </div>

  6. #6
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.896
    Partner-ID
    10107

    Standard

    $this->hasDetails ist natürlich falsch, du willst an dieser Stelle ja abfragen, ob das Event Details hat, nicht das Kalender Template.
    Geändert von Spooky (10.06.2019 um 17:15 Uhr)

  7. #7
    Contao-Fan
    Registriert seit
    26.03.2010.
    Beiträge
    327

    Standard

    Zunächst mal vielen Dank (habe ich vorhin vergessen), dass Du zu helfen versuchst!

    Zitat Zitat von Spooky Beitrag anzeigen
    $this->hasDetails ist natürlich faksch, du willst an dieser Stelle ja abfragen, ob das Event Details hat, nicht das Kalender Template.
    Das klingt zwar irgendwie einleuchtend, bringt mich aber insofern nicht weiter dass ich ja trotzdem auch im Kalender die Events OHNE Details NICHT verlinkt haben will. "Früher" ging das, siehe auch https://community.contao.org/de/show...l=1#post412876

    Mit dem ganz oben und im alten Thread genannten <?php if ($event['hasDetails']): ?> haben auch Events ohne Details den Link, das sollen sie aber wie gesagt nicht.

    Das Kalender-Template benutzt doch aber irgendwie die Events; man müsste (so man das kapiert, ich leider nicht) "nur" da
    PHP-Code:
    <tbody>
      <?php foreach ($this->weeks as $class=>$week): ?>
        <tr class="<?= $class ?>">
          <?php foreach ($week as $day): ?>
            <td class="<?= $day['class'?>">
              <div class="header"><?= $day['label'?></div>
              <?php foreach ($day['events'] as $event): ?>
                <div class="event cal_<?= $event['parent'?><?= $event['class'?>" itemscope itemtype="http://schema.org/Event">
                  <a href="<?= $event['href'?>" title="<?= $event['title'?> (<?php if ($event['day']) echo $event['day'] . ', '?><?= $event['date'?><?php if ($event['time']) echo ', ' .  $event['time']; ?>)"<?= $event['target'?> itemprop="url"><span itemprop="name"><?= $event['link'?></span></a>
                </div>
              <?php endforeach; ?>
            </td>
          <?php endforeach; ?>
        </tr>
      <?php endforeach; ?>
    </tbody>
    das Event 'raus orakeln (was ja im Grunde schon gemacht wird) und fallabhängig das <a href...> Ding ausgeben oder eben nicht. Leider ist ja $event['hasDetails'] keine "normale" Variable oder Array mehr sondern dieses Closure - was ich ebenfalls nicht kapiere. Trotz Google.

    Warum es hingegen beim event_list klappt ist mir völlig schleierhaft. Da ist $event['hasDetails'] ja auch ein Closure.

  8. #8
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.896
    Partner-ID
    10107

    Standard

    Closure ist einfach eine Funktion. Existiert die tatsächlich unter $event['hasDetails']?

  9. #9
    Contao-Fan
    Registriert seit
    26.03.2010.
    Beiträge
    327

    Standard

    Interpretiere ich jedenfalls so, wenn ich <?php $this->showTemplateVars() ?> in das cal_default Template schreibe und im FE dann die schwarze Box "auseinanderfalte": (recht weit unten)

    Code:
    array:14 [?
      "intYear" => "2019"
      "intMonth" => "06"
      "prevHref" => "kalender.html?month=201905"
      "prevTitle" => "Mai 2019"
      "prevLink" => "&lt; Mai 2019"
      "prevLabel" => "&lt;"
      "current" => "Juni 2019"
      "nextHref" => "kalender.html?month=201907"
      "nextTitle" => "Juli 2019"
      "nextLink" => "Juli 2019 &gt;"
      "nextLabel" => "&gt;"
      "days" => array:7 [?]
      "weeks" => array:5 [?
        "week_0 first" => array:7 [?]
        "week_1" => array:7 [?]
        "week_2" => array:7 [?
          15 => array:3 [?]
          16 => array:3 [?]
          17 => array:3 [?]
          18 => array:3 [?]
          19 => array:3 [?]
          20 => array:5 [?
            "label" => 15
            "class" => "days active weekend"
            "href" => "kalender.html?day=20190615"
            "title" => "1 Event(s)"
            "events" => array:1 [?
              0 => array:56 [?
                "id" => "1009"
                "pid" => "4"
                "tstamp" => "1558164512"
                "title" => "Pflichtveranstaltung"
                "alias" => "pflichtveranstaltung--sfv"
                "startDate" => "1560549600"
                "endDate" => "1560549600"
                "addTime" => ""
                "startTime" => "1560549600"
                "endTime" => "1560635999"
                "recurring" => ""
                "repeatEach" => ""
                "repeatEnd" => "0"
                "recurrences" => "0"
                "published" => "1"
                "author" => "1"
                "teaser" => ""
                "addImage" => ""
                "singleSRC" => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
                "size" => ""
                "alt" => ""
                "caption" => ""
                "floating" => "above"
                "imagemargin" => ""
                "fullsize" => ""
                "addEnclosure" => ""
                "enclosure" => ""
                "source" => "default"
                "jumpTo" => "0"
                "url" => ""
                "target" => ""
                "start" => ""
                "stop" => ""
                "imageUrl" => ""
                "articleId" => "0"
                "cssClass" => ""
                "noComments" => ""
                "location" => ""
                "overwriteMeta" => ""
                "imageTitle" => ""
                "date" => "15.6.2019"
                "time" => ""
                "datetime" => "2019-06-15"
                "day" => "Samstag"
                "month" => "Juni"
                "parent" => "4"
                "calendar" => CalendarModel {#401 ?}
                "link" => "Pflichtveranstaltung"
                "href" => "termindetails/pflichtveranstaltung--sfv.html"
                "class" => " upcoming"
                "until" => ""
                "begin" => "1560549600"
                "end" => "1560635999"
                "details" => Closure {#407 ?}
                "hasDetails" => Closure {#414 ?}
                "hasTeaser" => false
              ]
            ]
          ]
          21 => array:3 [?]
        ]
        "week_3" => array:7 [?]
        "week_4 last" => array:7 [?]
      ]
      "substr" => "2"
    ]
    (Das Fragezeichen macht das Forum anstatt der Dreiecke)

    Brauchst Du zur weiteren Diagnose auch die templatevars aus event_list?

  10. #10
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.896
    Partner-ID
    10107

    Standard

    Dann einfach if ($event['hasDetails']())

  11. #11
    Contao-Fan
    Registriert seit
    26.03.2010.
    Beiträge
    327

    Daumen hoch Gelöst!

    Hurra! Hurra! Es geht! Vielen vielen Dank!!!

    Etwas Ähnliches hatte ich ja auch schon probiert:
    <?php if ($event['hasDetails']): ?>
    Das funktionierte aber nicht.
    Jetzt hab' ich
    <?php if ($event['hasDetails']()): ?>
    und das funktioniert.

    Entscheidend sind wohl die (roten) Klammern. Da muss man erstmal drauf kommen, dass eine Array-Variable einen Index haben kann der eine Funktion ist *kopfschüttel*
    Ich bin jedenfalls jetzt begeistert. Vielen Dank nochmal!

  12. #12
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.896
    Partner-ID
    10107

    Standard

    So hatte ich es ja auch geschrieben .

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
  •