Kategorieliste: Weitere Felder für Selektion

  • Hallo zusammen,

    gerade versuche ich mich an den Customfields von Joomla und merke, dass sie in verschiedenen Bereichen nicht so flexibel sind wie erhofft. Mit Joomla 5.2 möchte ich eine kleine ToDo-Liste erstellen. Jedes ToDo soll als Beitrag abgebildet und über Customfields entsprechend detailliert werden (Priorität, Deadline etc.). Die Beiträge sollen dann über ein Kategorieliste angezeigt werden und dank entsprechender Overridebeispiele hier im Forum werden die Werte der Customfields auch schon in die Übersichtsliste aufgenommen.

    In der Kategorieliste sollen allerdings nur die Beiträge angezeigt werden, die der eingeloggte Benutzer selbst verfasst hat (will nicht noch die ToDos meiner Frau sehen , habe selbst genug fie). Da die normale Kategorieliste alle Beiträge der hinterlegten Kategorie anzeigt, wird also ein zusätzliches Selektionselement benötigt. Wichtig dabei: es soll kein Filter auf die Liste sein, sondern es sollen wirklich nur die Beiträge eines einzelnen Benutzers selektiert werden.

    Vermutung ist, dass sich dies über ein Override lösen lässt, in welchem man über $this->getCurrentUser() den aktuellen User ermittelt und als zusätzliches Kriterium dem Select mitgibt. So ähnlich wie bei Schlagwörtern, nach denen die Kategorieliste nochmals feiner gesteuert werden kann.

    Nur wo und wie müsste man das einbauen bzw. was müsste man overriden? Und, funktioniert das überhaupt so?

    VG

  • Du kannst z.B. auch eine separate Kategorie für deine Frau bzw. für jeden Benutzer anlegen...

    Gib uns doch einfach mal deinen bisherigen Override der Kategorieliste am besten mit der Angabe vom kompletten Dateipfad in der sich der Override befindet.

    Und/Oder Link zum Problem bzw. zur Website ?

  • Hallo Sieger66,

    vielen Dank für die Links zum User-Konzept. Die werde ich noch brauchen.

    Eine eigene Kategorie pro User hatte ich auch schon überlegt, wobei man dann pro Kategorie einen eigenen Menüpunkt braucht und jedem Beitrag die richtige Kategorie zuweisen müsste.

    Ich habe die Seite mal auf einen freie Domain gelegt, die ich noch so hatte und dort etwas rumprobiert, hier der Link . Da liegt ein Verzeichnisschutz drauf ("TestenX" / "TestenX") und der User um Beiträge anzuzeigen ist "TestX" mit pw "test1test2test3"

    Mit dem Menüpunkt "ToDo anlegen" können Beiträge mit Customfields angelegt werden (die momentan warum auch immer nicht eingabebereit sind). Über ein Override wurden davon schon einzelne in die Ansicht der Kategorieliste hinzugefügt, die man mit "Todo anzeigen" auflisten kann (dass auch versteckte Beiträge angezeigt werden irritiert mich gerade, aber erstmal egal)

    Technisch gesehen wurde zum Cassiopeia-Template ein Child-Template angelegt und dort die Customfields im Override als Spalten hinzugefügt ( com_content > category > default_articles.php )

    Man sieht nun alle Beiträge der Kategorie "todoliste", egal von welchem Autor sie angelegt wurden.

    Man könnte im oben genannten override die Beiträge aller anderen User ausfiltern (so vorgeschlagen in https://forum.joomla.org/viewtopic.php?t=997166). Besser fände ich es allerdings, nur die entsprechenden Beiträge zu lesen.

    Nur, wo werden die Artikel gelesen? Eventuell in ( com_content > category > default.php )? Da steht in Zeile 20

    Code
    $this->subtemplatename = 'articles';

    Allerdings stecke ich nicht tief genug in Joomla drin, um dort was anzupassen.

  • Nur, wo werden die Artikel gelesen? Eventuell in ( com_content > category > default.php )? Da steht in Zeile 20

    Nein, diese obige Code-Zeile ruft nur die Datei von "com_content > category > default_articles.php" des Templates auf

    Aber schaue dir daher mal die Zeile 169 und nachfolgende Zeilen dort in der default_articles.php an:

    github.com/joomla/joomla-cms/blob/5.2.0/components/com_content/tmpl/category/default_articles.php#L169

    welche wohl auch in dortiger Datei ist:

    Technisch gesehen wurde zum Cassiopeia-Template ein Child-Template angelegt und dort die Customfields im Override als Spalten hinzugefügt ( com_content > category > default_articles.php )

    Daher meine nochmalige bitte um den kompletten Code dieser Override-Datei wie auch schon in #2

  • Hallo Sieger66,

    danke für den Hinweis zur Stelle in der Datei. Im Override "com_content > category > default_articles.php" habe ich nun innerhalb der von dir genannten Schleife eine zusätzliche Abfrage auf die weiter oben ermittelte UserID eingebaut. Wenn der Eintrag nicht vom eingeloggten User erstellt wurde, geht es gleich zum nächsten Schleifendurchlauf.

    <?php foreach ($this->items as $i => $article) : ?>
    <?php
      if ($article->created_by !== $userId ) {
         continue;
      }
    ?>

    So funktioniert es. Muss mir nur noch ein Kriterium einfallen lassen, um das Coding nur im aktuellen Menüpunkt zu durchlaufen (Zusatzabfrage auf die Kategorie oder ein eigenes Layout oder so).

    Eine Frage noch zur Performance. Ist bei meinen wenigen Einträgen sicher irrelevant, aber interessehalber.

    Ich interpretiere es so, dass zu diesem Zeitpunkt bereits alle Einträge aus der Datenbank gelesen wurden und nun mit foreach drüber geloopt wird, um die relevanten zu auszugeben. Gäbe es bspw. 100.000 Einträge würde jeder der 100.000 Einträge gelesen, um dann zum Beispiel 2 davon anzuzeigen.

    Wäre es aus Gründen der Performance nicht besser, nur die 2 relevante Einträge aus der Datenbank zu lesen, zumal dort ja ein Index auf dem Feld "created_by" liegt? Und wenn ja, wie kann man diese Selektion bewerkstelligen?

    Oder bin ich mit dem Gedanken auf dem Holzweg?

    PS Im Anhang noch die override Datei

  • Nein es werden nur die Beiträge der Kategorie und Schlagwörter geholt welche du im Menüeintrag gewählt hast.

    Kannst du übrigens sehr leicht selbst ermitteln wenn du zum Test die default_articles.php umbenennst und eine neue default_articles.php erstellst sowie mit nur nachfolgendem Code speicherst und anschließend den Menüeintrag im Frontend neu aufrufst.

    Dann siehst du die in $this->items vorhandenen Beiträge und ihre id sowie alles was in $this->items vorhanden ist...

  • Code
    $menu = Factory::getApplication()->getMenu();
    echo 'Menü-id ist:'. $menu->getActive()->id; 

    gibt dir übrigens z.B. die id des aktiven Menüeintrages aus in selbiger Datei angewendet z.B. für:

    ...Muss mir nur noch ein Kriterium einfallen lassen, um das Coding nur im aktuellen Menüpunkt zu durchlaufen...