3.1.3 Navigation

Es gibt unterschiedliche Möglichkeiten, eine Navigation festzulegen.

Externe Links

In Templates

Links auf externe Seiten werden in einem Template in der folgenden Form festgelegt:

<a href="http://www.redaxo.de">zur REDAXO Hompage</a>

In Modulen

In den Modulen hängt die Schreibweise für einen externen Link davon ab, wie die Ein- und Ausgabe definiert sind, welche REDAXO-Variablen verwendet werden und ob eine automatische Umwandlung bestimmter Signalwörter vorgesehen ist. Hier muss berücksichtigt werden, mit welchem Modul man aktuell arbeitet.

Interne Links, manuell definiert

Soll in einem Template auf interne Seiten verlinkt werden, wird die gewünschte Artikel-ID als Parameter übergeben.

<a href="<?php echo rex_getUrl(22) ?>">Interner Link Artikel 22</a>

Mit dieser Schreibweise funktionieren die Links auch, wenn RexRewrite aktiv ist. Für erweiterte Mod-Rewrite-Features steht das Url-Rewrite Addon zur Verfügung.

Interne Links, dynamisch erzeugt

Statt einer manuell erzeugten Navigation kann man diese auch dynamisch erstellen lassen. Dazu bieten sich mehrere Möglichkeiten an. Man kann sowohl das OO-Konzept von Redaxo nutzen als auch die Struktur mit Hilfe von SQL-Befehlen ermitteln und darstellen.

Im Downloadbereich findet man bei den Templates einige Beispiele für Navigationen. Diese Navigationen werden als neues Template angelegt und im default-Template eingefügt. Am Anfang des default-Templates wird die Template-ID der Navigation festgelegt.

// Allgemeine Navigation
$navTemplateId = "3";

Neben einer Navigation kann man auch zwei oder mehrere Navigationen einbinden.

Beispiel für diese Nutzung wäre, dass auf der Startseite eine horizontale Navigation angezeigt wird und auf den Inhaltsseiten eine Doppelnavigation. Wobei die Hauptnavigation horizontal und die Subnavigation vertikal verteilt wird.

// Navigation Startseite im vertikalen Block

if ($REX['START_ARTICLE_ID'] == $this->getValue("article_id")) {
$navTemplateId = "3";
} // Navigation Inhaltsseiten horizontal / vertikale
else {
$navTemplateId = "2";
}

Das Einfügen (includen) des Navigation Template geschieht wie folgt.

$navTemplate = new rex_template($navTemplateId);
include $navTemplate->getFile();

Oder mittels REDAXO-Variable:

REX_TEMPLATE[2]

Ab dieser Stelle hat man die Möglichkeit, auf die Variablen des Navigation Templates zuzugreifen.
Beispiel für das Einbinden der Variablen $ navLeftCol. In dieser wird im Navigationstemplate die Navigation reingeschrieben.

<?php print $navLeftCol; ?>

Das Template sieht an dieser Stelle dann wie folgt aus:

<?php
// Notices ausschalten
// error_reporting(E_ALL ^ E_NOTICE);

// Allgemeine Navigation

$navTemplateId = "3";
// Code

$article = OOArticle::getArticleById($REX['START_ARTICLE_ID'], $REX['CUR_CLANG']);
$articleK = $article->getValue("_keywords");
$articleD = $article->getDescription();

// Einbinden des Navigation Template
$navTemplate = new rex_template($navTemplateId);
include $navTemplate->getFile();

if($this->getValue("description") != "") {
$meta_beschreibung = htmlspecialchars($this->getValue("description"));
} else {
$meta_beschreibung = htmlspecialchars($articleD);
}
if($this->getValue("keywords")!= "") {
$meta_suchbegriffe = htmlspecialchars($this->getValue("keywords"));
} else {
$meta_suchbegriffe = htmlspecialchars($articleK);
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
<title><?php print $REX['SERVERNAME'].' | '.$this->getValue("name"); ?></title>
<meta name="keywords" content="<?php print $meta_suchbegriffe; ?>" />
<meta name="description" content="<?php print $meta_beschreibung; ?>" />

<link rel="stylesheet" type="text/css" href="<?php echo $REX['HTDOCS_PATH'] ?>files/main.css" media="screen" />
?>
</head>
<body >
<div id="site-content">
<div id="content">
<div id="main-content">
<div id="nav">
<?
/* hier wird die Navigation eingebunden; */
print $navLeftCol;
?>
</div>
<div id="main">
<? print $this->getArticle(1); ?>
</div>
</div>
</div>
</body>
</html>

Sitemap, dynamisch generieren

Nach dem gleichen Prinzip kann man eine Sitemap dynamisch generieren lassen. Das hat den Vorteil, dass die Sitemap bei Änderungen an der Kategorie- oder Artikelstruktur automatisch aktualisiert wird.