Eigene einfache Kalender Komponente, ein kleiner Teil geling mir nicht, brauche Hilfe

  • Liebe Joomla Gemeinde,

    ich brauche Hilfe.

    Ich habe eine kleine einfache Komponente erstellt, 4-5 Eingabe/Ausgabe Felder, ID,Datum,3 Varchar input Fields. Ich zeige Euch mein Problem schnell.


    Die entscheidenden Teile, vereinfacht:


    src/Model/EventsModel.php



    src/View/Events/HtmlView.php


    Code
    public function display($tpl = null)
    {
    
    
    $this->items		= $this->get('Items');
    ......usw.

    tmpl/events/default.php


    Das sieht bis dahin so aus:

    Termine


    Mein Problem:

    Bei Monatswechsel sollte eine Zusatz Zeile ausgegeben werden mit der Angabe des nächsten Monat, z.B Zuoberst Juni 2023, vor dem Ferienpass Juli 2023, November 2023, Dezember je nach Monat halt.

    Kann mir jemand helfen wie ich das möglichst ohne gebastelte (wie ich es jeweils mache :-)) lösen kann?


    Liebe Grüsse aus der Schweiz


    Beat

  • Hallo Beat,


    erstelle dir einen Hilfs-Array und sortiere die Liste nach den Monaten (Schlüssel ist der Monat, Werte sind alle Einträge des jeweiligen Monats). Führe die foreach-Schleife zwei Mal aus (für das Durchlaufen der Monate und der Einträge).

  • Hallo Beat,


    erstelle dir einen Hilfs-Array und sortiere die Liste nach den Monaten (Schlüssel ist der Monat, Werte sind alle Einträge des jeweiligen Monats). Führe die foreach-Schleife zwei Mal aus (für das Durchlaufen der Monate und der Einträge).

    Vielen Dank für deinen Unterstützung.

    Eine foreach schlaufe innerhalb der bestehenden oder eine separate? Könntest du mir das zeigen anhand meiner default.php? Ich hab Stundenlang darang rumgewerkelt und Beispiele gesucht. Bin programmiermässig eine völlige Niete. Wenn ich es einmal gesehen habe dann machts klick....vorher leider nicht :rolleyes:

    Muss vielleicht erwähnen dass ich wohl nahe dran war aber dann gab er den monat zu jedem eintrag dazu anstatt nur beim ersten eintrag des neuen monats.

  • Okay, zuerst bereitest du den Array vor, damit du diese Syntax erhältst:


    Dann kannst du diesen Array einfach ablaufen:


    Code
    foreach ($items as $month => $item) {
        echo '<h3><strong>' . $month . '</strong></h3>';
        echo '<ul>';
    
        foreach ($item as $key => $value) {
            echo '<li>' . $value['title'] . '</li>';
        }
    
        echo '</ul>';
    }

    Ausgabe:



    Viel Spaß!

  • Es soll nach Monat gruppiert mit Überschrift ausgegeben werden.

    https://j4.elternforum-dottikon.ch/termine/events.html
    Vielen Dank!

  • Zitat

    Es können ja jederzeit auch Termine dazukommen, z.B am 7. Oktober oder 12. Mai. Wie soll das gehen wenn ich den Array so vorbereite wie von dir gezeigt?

    Die Liste bereitest du natürlich dynamisch mit allen aktuellen Einträgen vor, sie ist nicht hartkodiert. Wenn du die Einträge aus der Datenbank abholst, dann laufe alle Einträge durch und sortiere sie in diese Liste ein. Deine View sollte die Liste vom Model bereits in diesem sortieren Format erhalten.

  • Die Liste bereitest du natürlich dynamisch mit allen aktuellen Einträgen vor, sie ist nicht hartkodiert. Wenn du die Einträge aus der Datenbank abholst, dann laufe alle Einträge durch und sortiere sie in diese Liste ein. Deine View sollte die Liste vom Model bereits in diesem sortieren Format erhalten.

    Ohh wie peinlich, danke. :rolleyes:

  • Hallo Joomlaner

    Habe eine einfachere Lösung gefunden und gewählt.


    In meiner tmpl/events/default.php


    <?php foreach ($this->items as $item) : ?>


    <tbody>

    <tr>

    <?php

    $lastMonth = $month;

    $month = date("F Y", strtotime($item->datum_beginn));

    $month = JHTML::_('date', $month, "F Y");

    if($lastMonth != $month) { // Kommt der Monat schon vor nix tun, ist es das erste Mal Titel Monat & Jahr

    echo '<th class=monate colspan=3>'.$month.' </th>';

    } ///// und dann wieder durchlaufen bis der Fall Eintritt, vielleicht nicht so elegant aber erfüllt den Zweck

    ?>

    <tr class="irgendwas">

    <td class="item-anlass">

    <a href="<?php echo Route::_('index.php?option=com_simple_calender&view=event&id=' . $item->id . '&Itemid=' . $this->item_id); ?>">

    <?php echo $item->anlass; ?>

    .......usw


    Sieh jetzt so aus, noch etwas CSS und dann abgeben.

    Termine


    Natürlich hätte man es auch mit Beiträgen und Kategorien machen können, aber die Kunden mögen ganz einfache Lösungen. Dann werden auch Einträge gemacht ansonsten leider eher nicht.


    Backend sieht dann so aus:


    Beste Grüsse aus der Schweiz...leider ein ganz Schwarzer Tag, denke für alle Sportler. Für mich als Hobby Fahrer Giro. Tour de Suisse und TDF Fan , sehr traurig.

    RIP GINO

    Gruss

    Beat