4 Möglichkeiten der Navigation durch eine geänderte Artikelübersicht
Auf einer Joomla-Homepage gibt es von Haus erst einmal nur 2 Möglichkeiten der Artikelübersicht bei einem Seitenumbruch:
- die der Seitenanzeige bis zu einer Anzahl von zehn Seiten oder
- eine Artikelübersicht, die sich seitlich des Contents befindet.
Auf meiner Homepage Sylvis bunte Seite enthalten einige meiner Rebus-Beiträge bis zu 50 Bilderrätsel, die jeweils durch einen Seitenumbruch einzeln angezeigt werden. Ich empfand das Navigieren als sehr umständlich, da anfangs immer nur 10 einzelne Rebusse angewählt werden konnten. In diesem Beitrag werde ich beschreiben, wie man diese eingeschränkte Navigation ändern kann.
Warum überhaupt Seitenumbruch?
Wie bereits angedeutet, wird die Einzelanzeige bei den meisten Rebusarten auf meiner Homepage durch einen Seitenumbruch erzeugt.
Warum ich diese Einstellung gewählt habe? Einerseits wären die Seitenladezeiten immens hoch, wenn z. B. 50 Rebusse in einer Seite gleichzeitig geladen würden. Andererseits wollte ich nicht für jedes Rebus einen separaten Beitrag erstellen. Die Beitragszahl wäre enorm und im Backend ginge im Laufe der Zahl die Übersichtlichkeit verloren.
Allerdings war es schon anfangs sehr umständlich, vom ersten bis zum letzten Rebus durchzublättern. Ich konnte ja immer nur 10 anwählen. Wollte man also zu Rebus Nr. 38, musste ich immer erst das 10. in der Reihe anklicken und mich in Zehnerschritten vorantasten, bis ich irgendwann endlich bei Nr. 38 angelangt war.
Die andere Alternative wäre noch die Artikel in einer kompletten Übersicht anzuzeigen, was allerdings rein optisch für mich keine gelungene Umsetzung eines Inhaltsverzeichnisses darstellt. Sobald z. B. ein Rebus die gesamte Breite des Content-Bereiches ausfüllt, wird die Übersicht darüber „geklatscht“.
Die Einstellung von Seitennavigation auf Artikelübersicht wird im Backend in dem Plugin Inhalt – Seitenumbruch vorgenommen.
Leider gibt es hier keine Möglichkeit, die Anzeige der Artikelübersicht auf eine horizontale Anzeige zu ändern.
Änderung der Anzeige nur durch kleine Hacks möglich
Die vorgegebenen Anzeigemöglichkeiten gefallen mir nicht, daher muss ich kleine Änderungen im Code vornehmen, damit meine Besucher jedes einzelne Rebus anwählen können.
Anzeige aller Seiten
Vielen Homepage-Besitzern reicht es vielleicht, nicht nur 10 sondern alle anwählbare Seiten unter dem Beitrag aufzulisten. Dazu muss ich die Datei pagination.php ändern. Zu finden ist diese in dem Verzeichnis Name_der_Webseite\libaries\joomla\html\pagination.php:
// Set the pagination iteration loop values. $displayedPages = 10; $this->set('pages.start', $this->get('pages.current') - ($displayedPages / 2)); if ($this->get('pages.start') < 1) { $this->set('pages.start', 1); }
(Bei mir ist dieser Code ab Zeile 95 zu finden)
Die Zeile
$displayedPages = 10;
habe ich z. B. in der Weise geändert:
$displayedPages = 100;
Ggf. muss noch in dem CSS zum Template die Breite zu pagination geändert werden z. B. in 99 %, damit die Seitenaufzählung sich über die gesamte Contentbreite erstreckt. Immerhin ist es nun schon einmal möglich, jede einzelne Seite anzusteuern.
Artikelübersicht optimieren
Optimal war das aber für meine Homepage immer noch nicht. Ich wollte, dass nicht die Seitenbezeichnung eines Rebusses angezeigt werden, sondern die Titelbezeichnung. Die Problematik bei mir besteht z. B., dass bei meinen Rebussen 51-100 die Seitennummerierung wieder bei 1 beginnt. Z. B. war Rebus 51 auf Seite 1 zu finden und Rebus 75 auf Seite 25. Ich wollte nun erreichen, dass Rebus 75 auch unter dem Titel Rebus 75 zu finden ist.
Also ist die Einstellung in dem Plugin Inhalt – Seitenumbruch „Seitentitel anzeigen = ja“ im Ansatz schon mal richtig. Nur die vertikale Darstellung störte mich. Daher habe ich mir die Datei pagebreak.php in dem Verzeichnis Name_der_Webseite\plugins\content genauer angeschaut.
// TOC Header $row->toc = ' <table cellpadding="0" cellspacing="0"> <tr> <th>' . JText::_( 'Article Index' ) . '</th> </tr> '; // TOC First Page link $class = ($limitstart === 0 && $showall === 0) ? 'toclink active' : 'toclink'; $row->toc .= ' <tr> <td> <a href="'. JRoute::_( '&showall=&limitstart=') .'">' . $heading . '</a> </td> </tr> '; $i = 2; foreach ( $matches as $bot ) { $link = JRoute::_( '&showall=&limitstart='. ($i-1) ); if ( @$bot[0] ) { $attrs2 = JUtility::parseAttributes($bot[0]); if ( @$attrs2['alt'] ) { $title = stripslashes( $attrs2['alt'] ); } elseif ( @$attrs2['title'] ) { $title = stripslashes( $attrs2['title'] ); } else { $title = JText::sprintf( 'Page #', $i ); } } else { $title = JText::sprintf( 'Page #', $i ); } $class = ($limitstart == $i-1) ? 'toclink active' : 'toclink'; $row->toc .= ' <tr> <td> <a href="'. $link .'">' . $title . '</a> </td> </tr> '; $i++; } // Get Plugin info $plugin =& JPluginHelper::getPlugin('content', 'pagebreak'); $params = new JParameter( $plugin->params ); if ($params->get('showall') ) { $link = JRoute::_( '&showall=1&limitstart='); $class = ($showall == 1) ? 'toclink active' : 'toclink'; $row->toc .= ' <tr> <td> <a href="'. $link .'">' . JText::_( 'All Pages' ) . '</a> </td> </tr> '; } $row->toc .= '</table>'; }
(Bei mir ist dieser Code ab Zeile 177 zu finden)
Wie man gut erkennen kann, ist die Artikelübersicht in eine Tabelle eingebettet. Ich habe die Tabellenstruktur entfernt, so dass der Code nun so aussieht:
// TOC Header $row->toc = ' <h4><th>' . JText::_( 'Article Index' ) . '</th></h4> '; // TOC First Page link $class = ($limitstart === 0 && $showall === 0) ? 'toclink active' : 'toclink'; $row->toc .= ' <strong><a href="'. JRoute::_( '&showall=&limitstart=') .'">' . $heading . '</a></strong> '; $i = 2; foreach ( $matches as $bot ) { $link = JRoute::_( '&showall=&limitstart='. ($i-1) ); if ( @$bot[0] ) { $attrs2 = JUtility::parseAttributes($bot[0]); if ( @$attrs2['alt'] ) { $title = stripslashes( $attrs2['alt'] ); } elseif ( @$attrs2['title'] ) { $title = stripslashes( $attrs2['title'] ); } else { $title = JText::sprintf( 'Page #', $i ); } } else { $title = JText::sprintf( 'Page #', $i ); } $class = ($limitstart == $i-1) ? 'toclink active' : 'toclink'; $row->toc .= ' <a href="'. $link .'">' . $title . '</a> '; $i++; } // Get Plugin info $plugin =& JPluginHelper::getPlugin('content', 'pagebreak'); $params = new JParameter( $plugin->params ); if ($params->get('showall') ) { $link = JRoute::_( '&showall=1&limitstart='); $class = ($showall == 1) ? 'toclink active' : 'toclink'; $row->toc .= ' <strong><a href="'. $link .'">' . JText::_( 'All Pages' ) . '</a></strong> '; } $row->toc .= ''; }
Dieser Eingriff führte nun dazu, dass alle in dem Beitrag enthaltenen Rebusse anwählbar sind und mit dem jeweiligen Titel aufgeführt sind. Ich gebe zu, die Darstellung könnte noch etwas schöner sein. Damit werde ich mich wohl als nächstes befassen müssen.
Hey Sylvi,
klasse gelöst, Dein Problem und wie immer sehr anschaulich beschrieben!
LG
Pauli
Hallo Pauli,
danke für Dein Statement. Es ist für mich enorm wichtig zu wissen, dass meine Beschreibungen auch verständlich sind. :-)
LG Sylvi