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

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

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)

<?php // Previous/Next node paging by title
// See <a href="http://2bits.com">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-&gt;nid, $type);
  $data = db_fetch_object($result);
  if (!isset($data-&gt;nid) || !$data-&gt;nid) {
    return NULL;
  }
  return l($data-&gt;title, "node/$data-&gt;nid", array('html' =&gt; TRUE));
}
?>

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.

<!-- Node paging start. Add this to your node.tpl.php and/or node-TYPE.tpl.php --> <?php if (!$teaser) : ></p>
 
<div class="navpn">
<div class="pnlaquo">«</div>
 
<div id="pnprev"><?php print phptemplate_prev_next($node, 'p') ??????????????????????????????????????????????????????></div>
 
<div id="pnmain">| <a href="&lt;?php print base_path() ?&gt;">Home</a> |</div>
 
<div id="pnnext"><?php print phptemplate_prev_next($node, 'n') ??????????????????????????????????????????????????????></div>
 
<div class="pnraquo">»</div>
</div>
<?php endif; ><!-- Node paging end -->

 

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

/* 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; }

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.