Bestimmte Kategorien in Sektionen anzeigen

Post Reply
yakari
Master Bludit
Posts: 84
Joined: Sun Apr 10, 2022 10:33 am
Has thanked: 7 times
Been thanked: 4 times

Derzeit werden bei den meisten Themes Beiträge, Seiten (oder wie auch immer die Inhalte bei Bludit heißen) aller Kategorien zugleich, vermischt angezeigt.

Ich will aber auf der Startseite so eine Art Sektionen, Abschnitte mit jeweils bestimmten Kategorien haben.
Also z.B.:
Alle Inhalte der Kategorie "Aktuell"
Alle Inhalte der Kategorie "Wirtschaft"
Alle Inhalte der Kategorie "Politik"

Dazu habe ich ein paar Dokumentationen studiert (diese und diese) und auch einige Foreneinträge.

So beschreibt dieses Thema genau mein Vorhaben, doch diese Lösung zeigt nur den Kategorie-Namen und die Titel der enthaltenen Beiträge. Sonst leider nichts ...

Ebenso scheint das Thema auch zu passen, jedoch ist die folgende Lösung nur bei einem bestimmten Kategorienamen erfolgreich.:

Code: Select all

if ($page->category()=="category1" || $page->category()=="category2") {
   Was in diesem Fall gemacht werden soll.
};
Konkret habe ich das so gemacht:

Code: Select all

<?php foreach ($content as $page) : ?>
    <?php
    if ($page->category()=="general") { ?>
            <article id="post-1">
                <div>
                    <header>
                        <?php if ($page->coverImage()) : ?>
                            <figure>
                                <a href="<?php echo $page->permalink(); ?>" rel="bookmark"><img src="<?php echo $page->coverImage(); ?>"></a></figure>
                        <?php endif ?>
                        <h2><a href="<?php echo $page->permalink(); ?>" rel="bookmark"><?php echo $page->title(); ?></a></h2>
                        <?php echo $page->contentBreak(); ?>
                        <?php if ($page->readMore()) : ?>
                            <a href="<?php echo $page->permalink(); ?>"><?php echo $L->get('Read more'); ?></a>
                        <?php endif ?>
                    </header>
                </div>
            </article>
    <?php }; ?>

<?php endforeach ?>
Das ist nicht elegantes PHP und ohne Classen usw, ist nur ein Test.
Jedenfalls klappt das so mit dem Kategorienamen "general" nicht - wohl aber mit anderen Namen.
Ich finde keinen Unterschied, warum eine Kategorie auf diese Abfrage if ($page->category()=="kategoriename") reagiert und andere nicht. Die Namen stimmen, alle Inhalte sind jeweils gleich eingestellt bez. statisch, fixiert usw.

Aber evtl. ist das mit der Abfrage ohnehin nicht der optimale Weg, um Inhalte bestimmter Kategorien auf der Startseite zu zeigen?
User avatar
CrazyBread
Master Bludit
Posts: 73
Joined: Tue Jan 19, 2016 9:51 pm
Location: Germany
Has thanked: 4 times
Been thanked: 5 times
Contact:

Ich habe so etwas ähnliches auch gebraucht: Auf meiner Hauptseite gibt es neben der Hauptspalte eine Spalte rechts mit Beiträgen aus der Kategorie "Aktuelles".

Schau dir mal die Doku an (leider nur auf Englisch verfügbar):
https://docs.bludit.com/en/dev-snippets/categories
(Abschnitt "List all pages related to a particular category").

Code: Select all

<?php
        // Category key
        $categoryKey = 'example';

        // The category is an Category-Object
        $category = getCategory($categoryKey);

        // Print the category name
        echo 'Category name: ' . $category->name();

        // Print the pages title related to the category "example"
        foreach ($category->pages() as $pageKey) {
            $page = new Page($pageKey);
            echo $page->title();
        }
?>
Damit könntest du für jede Sektion Beiträge einer bestimmten Kategorie laden.
yakari
Master Bludit
Posts: 84
Joined: Sun Apr 10, 2022 10:33 am
Has thanked: 7 times
Been thanked: 4 times

Danke, aber das meinte ich so nicht.

Die verlinkte Anleitung ist die gleiche, die ich eh auch verlinkte und das zeigt, wie gesagt nur den Kategorie-Namen und die Titel der enthaltenen Beiträge. Sonst leider nichts ...

Ich will ja die Kategorie-Inhalte je nach Kategorie segmentiert anzeigen.

Meine Lösung (s. 2. Code meines Eingangsposts) ab "Konkret habe ich das so gemacht:" funktionierte.

Die Abfrage

Code: Select all

if ($page->category() =="kategoriename") { ...
macht(e) was ich will!
Aber nur bei einem Kategorie-Namen.

Die Lösung, um jeden Kategorie-Namen abfragen zu können, war aber nun simpel:
Man muss die Bedingung genauso schreiben, wie der Name eben ist. Ich machte den Fehler, alles klein zu schreiben.

Also wenn eine Kategorie "General" heisst, dann muss man das auch so schreiben:

Code: Select all

if ($page->category() =="General") { ...

Code: Select all

if ($page->category() =="general") { ...
funkt nicht.
User avatar
CrazyBread
Master Bludit
Posts: 73
Joined: Tue Jan 19, 2016 9:51 pm
Location: Germany
Has thanked: 4 times
Been thanked: 5 times
Contact:

Ja das stimmt.
Die Schreibweise wird im Admin-Panel ersichtlich. Unter Kategorien siehst du wie sie angelegt werden. Das ist auch nützlich, wenn du eine Kategorie mit z.B. einem Leerzeichen hast.
Wenn du ganz sichergehen willst, kann man auch die "strtolower" Funktion von PHP verwenden.

Vielleicht hab ich deine Anforderung noch nicht komplett verstanden, aber du hast doch nachdem du das Page-Objekt mithilfe des Keys erzeugt hast Zugriff auf sämliche Felder?

Code: Select all

(...)
// Print the pages title related to the category "example"
foreach ($category->pages() as $pageKey) {
    $page = new Page($pageKey);
    echo $page->title(); //$page->content(), $page->permalink(), usw...
}
Damit kannst du unabhängig voneinander deine Sektionen mit Inhalten bestimmter Kategorien füllen?
yakari
Master Bludit
Posts: 84
Joined: Sun Apr 10, 2022 10:33 am
Has thanked: 7 times
Been thanked: 4 times

Ich habe eine Test Kategorie einfach klein geschrieben angelegt, die anderen waren normal geschrieben und reagierten auf die klein geschriebenen Abfragen nicht.
strtolower würde da gut sein, stimmt.

Ja, vllt. geht das auch eleganter.
Aber nachdem auch Edi dies so lösen würde, wie eben hier steht, und es so auch funzt, dann bleibe ich mal dabei.

Sicherlich könnte sich während der Spielerei mit Bludit mehr Verständnis für die Struktur ergeben und sofern ich durchschaut habe, was man alles wie nutzen kann, dann fällt mit vllt. noch eine elegantere Methode ein.

Ja, dieses Objekt, was dann eigentlich ein Kategorie-Objekt ist? hätte alles möglich auf Abruf. Titel, Inhalte, Links, ... Das klappt auch ganz einfach.
Nur schaffte ich es so nicht, die Inhalte auch darzustellen.

Aber klar, wenn man nur alle heiligen Zeiten, vllt. 2, 3 x im Jahr dazu kommt mit Bludit zu experimentieren. Das ist etwas zu wenig, aber auch eine Auszeit, Erholung.
Post Reply