Drupal

Vor- und Zurückblättern-Link in Drupal-Blog-Postings

Schlagworte:

Drupal besitzt standardmäßig Funktionen, um ein Blog zu betreiben. Wer seine Seite mit den Standardeinstellungen installiert hat stellt allerdings sehr schnell fest, dass Drupal da doch einiges fehlt, dass Spezialisten wie Wordpress von Haus aus mitbringen. Wenn man beispielsweise ein Blogposting liest, so gibt es keine Möglichkeit, zum vorherigen oder nächsten Blogposting weiterzublättern. Man muss erst zurück auf die Übersichtsseite, um dort dann den nächsten Beitrag aufrufen zu können. Aber es gibt ja fast nicht, was man Drupal nicht nachträglich beibringen könnte. Und so gehts:

 

Als erstes muss man in der template.php des verwendeten Themes die Funktion definieren, die später die Navigation zum Vor- und Zurückblättern erstellen soll (Code von https://2bits.com)

[code]<?php // Previous/Next node paging by title // See http://2bits.com for details.; // Add this function to the end of the template.php of your theme; function phptemplate_prev_next($current_node = NULL, $op = 'p') { // Node types to include in paging; $node_types = array('blog'); if ($op == 'p') { $sql_op = ''; $order = 'ASC'; } else { return NULL; } $output = NULL; foreach($node_types as $type) { $quoted_types[] = "'" . $type . "'"; } $sql = "SELECT nid, title FROM {node} n WHERE nid $sql_op %d AND type IN (" . implode(',', $quoted_types) . ") AND status = 1 ORDER BY nid $order LIMIT 1"; $result = db_query($sql, $current_node->nid, $type); $data = db_fetch_object($result); if (!isset($data->nid) || !$data->nid) { return NULL; } return l($data->title, "node/$data->nid", array('html' => TRUE)); } ?>[/code]

Will man diese Navigation nur bei einem Inhaltstyp einsetzen, so erstellt man für diesen eine eigene node-TYPE.tpl.php - in diesem Falle soll die Navigation nur in Beiträgen vom Typ "Blog" erscheinen, daher wird die Datei  node.tpl.php in node-blog.tpl.php kopiert und man baut den folgenden Code zusätzlich ein.

[code] <?php if (!$teaser) : >

« <?php print phptemplate_prev_next($node, 'p') ??????????????????????????????????????????????????????> | Home | <?php print phptemplate_prev_next($node, 'n') ??????????????????????????????????????????????????????> » <?php endif; >[/code]

 

Zum Abschluss muss die Navigation natürlich noch gestylt werden. Die entsprechenden Einträge gehören in die CSS-Datei style.css des Templates.

[code] /* Add this to your style.css file */ .navpn { width: 500px; margin: 0 auto 0 auto; clear: both; display: block; text-align: center; line-height: 1.5em; } #pnprev { display: block; float: left; text-align: right; width: 200px; white-space: normal; word-wrap: break-word; padding: 0; } .navpn #pnmain { float: left; text-align: center; display: inline; padding: 0 1em 0 1em; } #pnnext { display: block; float: left; text-align: left; width: 200px; white-space: normal; word-wrap: break-word; padding: 0; } .pnlaquo { float: left; width: 10px; } .pnraquo { float: right; width: 10px; } [/code]

Hat man alles richtig gemacht, erscheint nun beim Aufruf eines Blog-Beitrags unter diesem eine Navigation wie man sie z.B. auch von Wordpress kennt und die User können problemlos die Blogbeiträge durchblättern.