Zum Inhalt

REDAXO Modul/Template zum Artikel blättern

Hier geht es um ein Modul oder Template für REDAXO (Redaxo Artikel blättern), mit dem man in den Artikeln einer Kategorie vor und zurück blättern kann. Nützlich ist sowas immer dann wenn eine Kategorie eine grössere Anzahl Artikel enthält die miteinander verbunden sein sollen, wie z.B. eine umfangreiche Anleitung die über mehrere Seiten geht oder auch mehrere Verzeichnis-Seiten die durchklickbar sein sollen. Im Folgenden sind 3 Beispiel zu sehen. Jedes dieser Beispiele kann sowohl in ein Modul wie auch in ein Template geschrieben werden.

Die folgende Beschreibung basiert auf PHP 5.4 und REDAXO 4.5

Einfaches vor und zurück blättern

Button Darstellung Redaxo Artikel blättern

Mit folgendem Code bindet man lediglich zwei Links ein (Bild rechts). Einen zum vor blättern und einen zum zurück blättern sofern ein Artikel vorhanden ist.

$number = 0;
$current_number = 0;
$category_id = $this->getValue('category_id');
$current_article_id = $this->getValue('article_id');
$articles = array();
$output = '';

foreach (OOArticle::getArticlesOfCategory($category_id, true) as $article) { // alle Artikel dieser Kategorie die online sind
    if (is_object($article)) {

        $number++; // zählen

        if ($article->getId() == $current_article_id) { // aktueller Artikel
            $current_number = $number;
            $prev_number = $number + 1;
            $next_number = $number - 1;
        }
        $articles[$number] = $article; // neues Array mit allen Artikeln
    }
}

if (is_object($articles[$next_number])) { // falls nächster Artikel existiert
    $nextart = ' <a href="' . rex_getUrl($articles[$next_number]->getId()) . '">weiter</a> ';
}

if (is_object($articles[$prev_number])) { // falls vorheriger Artikel existiert
    $prevart = ' <a href="' . rex_getUrl($articles[$prev_number]->getId()) . '">zurück</a> ';
}

if (isset($nextart) || isset($prevart)) { // falls ein weiterer Artikel existiert
    $output = '<div class="prevnext">' . $prevart . ' ||| ' . $nextart . '</div>';
}
echo $output;

In der Schleife werden alle Artikel der aktuellen Kategorie durchlaufen. Dabei wird nach dem aktuellen Artikel gesucht um dadurch den vorherigen und den nächsten Artikel zu ermitteln. Ausserdem wird zugleich ein neues Array erstellt, welches alle Artikel enthält. Der Array-Key ist ab 1 durch nummeriert, was auch der Priorität der Artikel entspricht.

Artikel blättern über Seitennummer

 

Button Darstellung Redaxo Artikel blättern

Bei folgendem Beispiel wird für jeden Artikel der aktuellen Kategorie ein Link in form einer Seitennummer ausgegeben. Der Aktuelle Artikel bekommt die Klasse “current”.

$output = '';
$number = 0;
$category_id = $this->getValue('category_id');
$current_article_id = $this->getValue('article_id');

foreach (OOArticle::getArticlesOfCategory($category_id, true) as $article) { // alle Artikel dieser Kategorie die online sind
    if (is_object($article)) {

        $number++; // zählen

        if ($article->getId() == $current_article_id) { // aktueller Artikel
            $output .= ' <a class="current" href="' . rex_getUrl($article->getId()) . '">' . $number . '</a> ';
        } else {
            $output .= ' <a href="' . rex_getUrl($article->getId()) . '">' . $number . '</a> ';
        }
    }
}
echo $output;

Die Seitennummerierung entspricht der Artikel-Priorität.

Navigation über Seitennummern

Button Darstellung Redaxo Artikel blättern

In folgendem Beispiel wird das ganze noch etwas umfangreicher gestaltet. Die angezeigten seiten können limitiert werden, ausgehend vom aktuellen Artikel. Es werden also nur x weitere und vorhergehende Seitennummern angezeigt. Zusätlich werden noch folgende Links angezeigt; “<<” zum ersten Artikel, “<” ein Artikel zurück, “>” ein Artikel weiter und “>>” zum letzten Artikel.

$output = '';
$number = 0;
$current_number = 0;
$category_id = $this->getValue('category_id');
$current_article_id = $this->getValue('article_id');
$articles = array();
$cat_articles = OOArticle::getArticlesOfCategory($category_id, true);
$count = count($cat_articles);
$nextart = '';
$prevart = '';
$firstart = '';
$lastart = '';
$max_numbers = 5; // maximal so viele nummern werden in jede Richtung angezeight inkl. aktueller nummer 

foreach ($cat_articles as $article) { // alle Artikel dieser Kategorie die online sind
    if (is_object($article)) {

        $number++; // zählen

        if ($article->getId() == $current_article_id) { // aktueller Artikel
            $current_number = $number;
            $prev_number = $number - 1;
            $next_number = $number + 1;
        }
        $articles[$number] = $article; // neues Array mit allen Artikeln
    }
}

if (is_object($articles[$next_number])) { // falls nächster Artikel existiert
    $nextart = ' <a href="' . rex_getUrl($articles[$next_number]->getId()) . '">&GT;</a> ';
}

if (is_object($articles[$prev_number])) { // falls vorheriger Artikel existiert
    $prevart = ' <a href="' . rex_getUrl($articles[$prev_number]->getId()) . '">&LT;</a> ';
}

if (is_object($articles[1])) { // falls vorheriger Artikel existiert
    $firstart = ' <a href="' . rex_getUrl($articles[1]->getId()) . '">&LT;&LT;</a> ';
}

if (is_object($articles[$count])) { // falls vorheriger Artikel existiert
    $lastart = ' <a href="' . rex_getUrl($articles[$count]->getId()) . '">&GT;&GT;</a> ';
}

foreach ($articles as $key => $article) { // das neue Array durchlaufen
    if (is_object($article)) {

        if ($key < $current_number + $max_numbers && $key > $current_number - $max_numbers) {

            if ($key == $current_number) { // aktueller Artikel
                $output .= ' <a class="current" href="' . rex_getUrl($article->getId()) . '">' . $key . '</a> ';
            } else {
                $output .= ' <a href="' . rex_getUrl($article->getId()) . '">' . $key . '</a> ';
            }
        }
    }
}

echo $firstart . $prevart . $output . $nextart . $lastart;

Weiterführende Links:

Veröffentlicht inTipp's

Neueste Beiträge

Themen: