Seiten

Zend_Navigation wird mit zwei Seiten Typen ausgeliefert:

  • MVC Seiten – diese Verwenden die Klasse Zend_Navigation_Page_Mvc

  • URI Seiten – diese Verwenden die Klasse Zend_Navigation_Page_Uri

MVC Seiten werden auf On-Site Webseiten verlinkt, und definiert indem MVC Parameter verwendet werden (action, controller, module, route, params). URI Seiten werden durch eine einzelne Eigenschaft uri definiert, welche die komplette Funktionalität bietet auf Off-Site Seiten zu verlinken, oder andere Dinge mit erstellten Linkt durchzuführen (z.B. eine URI die zu <a href="#">foo<a> wird).

Übliche Seiten Features

Alle Seiten Klassen müssen Zend_Navigation_Page erweitern, und teilen deshalb ein übliches Set von Features und Eigenschaften. Am ehesten zu beachten ist, das Sie die Optionen in der anbei zu sehenden Tabelle und den gleichen Initialisierungs Prozess teilen.

Options Schlüssel werden zu set Methoden gemappt. Das bedeutet das die Option order auf die Methode setOrder() gemappt wird, und reset_params auf die Methode setResetParams(). Wenn es keine Setter Methode für die Option gibt, wird diese als eigene Eigenschaft der Seite gesetzt.

Lesen Sie mehr über das erweitern von Zend_Navigation_Page in Erstellung eigener Seiten Typen.

Tabelle 120. Übliche Seiten Optionen

Schlüssel Typ Standardwert Beschreibung
label String NULL Ein Seitenlabel, wie 'Home' oder 'Blog'.
id String | int NULL Ein Id Tag/Attribut das verwendet werden kann wenn die Seite dargestellt wird, typischerweise in einem Anker Element.
class String NULL Eine CSS Klasse die verwendet werden kann wenn die Seite dargestellt wird, typischerweise ein Anker Element.
title String NULL Eine kurze Seitenbeschreibung, typischerweise für die Verwendung als title Attribut in einem Anker.
target String NULL Spezifiziert ein Ziel das für die Seite verwendet werden kann, typischerweise ein Anker Element.
rel Array array() Spezifiziert die Weiterleitungs-Relation für die Seite. Jedes Element im Array ist ein Schlüssel-Wert Paar, wobei der Schlüssel den Relation/Link Typ bestimmt, und der Wert ist ein Pointer zu der verlinkten Seite. Ein Beispiel eines Schlüssel-Wert Paares ist 'alternate' => 'format/plain.html'. Um die volle Flexibilität zu erlauben, gibt es keine Einschränkungen an den Relationswerten. Der Wert muß kein String sein. Lesen Sie über rel und rev im Kapitel der Link Helfer.
rev Array array() Spezifiziert die Rückwärts Relation für die Seite. Arbeitet genauso wie rel.
order String | int | NULL NULL Arbeitet die order für Elemente in Works like order for elements in Zend_Form. Wenn spezifiziert, dann wird die Seite in einer speziellen Reihenfolge durchlaufen, was bedeutet das man eine Seite dazu zwingen kann das eine Seite vor anderen durchlaufen wird indem das order Attribut auf eine kleinere Nummer gesetzt wird, z.B. -100. Wenn ein String angegeben wird, muß dieser in einen gültigen int aufgelöst werden können. Wenn NULL angegeben wird, wird er zurückgesetzt, was bedeutet dass die Reihenfolge verwendet wird mit der die Seite im Container hinzugefügt wurde.
resource String | Zend_Acl_Resource_Interface | NULL NULL ACL Ressource die mit der Seite verknüpft werden soll. Lesen Sie mehr im Kapitel ACL Integration in View Helfern.
privilege String | NULL NULL ACL Privileg das mit der Seite assoziiert werden soll. Lesen Sie mehr im Kapitel über ACL Integration in View Helfern.
active bool FALSE Ob die Seite für die aktuelle Anfrage als aktiv betrachtet werden soll. Wenn active FALSE ist oder nicht angegeben wird, werden MVC Seiten Ihr Eigenschaften gegen das Anfrage Objekt prüfen wenn $page->isActive() aufgerufen wird.
visible bool TRUE Ob die Seite für den Benutzer sichtbar sein soll, oder nur ein Teil einer Struktur ist. Unsichtbare Seiten werden von View Helfern übersprungen.
pages Array | Zend_Config | NULL NULL Kind Seiten der Seite. Das sollte ein Array oder Zend_Config Objekt sein das entweder Seiten Optionen enthält die in die factory() Methode übergeben werden können, oder die aktuelle Zend_Navigation_Page Instanz, oder einen Mix von beiden.

Eigene Eigenschaften

Alle Seiten unterstützen das Setzen und Empfangen von eigenen Eigenschaften durch Verwendung der magischen Methoden __set($name, $value), __get($name), __isset($name) und __unset($name). Eigene Eigenschaften können jeden Wert haben, und sind im Array enthalten das von $page->toArray() zurückgegeben wird, was bedeutet das Seiten erfolgreich serialisiert/de-serialisiert werden können, selbst wenn die Seiten Eigenschaften enthalten die nicht nativ in der Seitenklasse sind.

Sowohl native als auch eigene Eigenschaften können gesetzt werden indem $page->set($name, $value) verwendet und empfangen indem $page->get($name) verwendet wird, oder durch die Verwendung der magischen Methoden.

Beispiel 595. Eigene Seiten Eigenschaften

Dieses Beispiel zeigt wie eigene Eigenschaften verwendet werden können.

$page = new Zend_Navigation_Page_Mvc();
$page->foo = 'bar';
$page->meaning = 42;

echo $page->foo;

if ($page->meaning != 42) {
    // Eine Aktion sollte durchgeführt werden
}

Zend_Navigation_Page_Mvc

MVC Seiten werden definiert indem MVC Parameter verwendet werden wie von der Zend_Controller Komponent bekannt. Eine MVC Seite wird intern in der getHref() Methode Zend_Controller_Action_Helper_Url verwenden um hrefs zu erstellen, und die isActive() Methode wird die Parameter von Zend_Controller_Request_Abstract mit den Seiten Parametern verknüpfen um zu erkennen ob die Seite aktiv ist.

Tabelle 121. MVC Seiten Optionen

Schlüssel Typ Standardwert Beschreibung
action String NULL Name der Aktion die verwendet wird wenn eine href zur Seite erstellt wird.
controller String NULL Name des Controllers der verwendet wird wenn eine href zur Seite erstellt wird.
module String NULL Name des Moduls das verwendet wird wenn eine href zur Seite erstellt wird.
params Array array() Benutzer Parameter die verwendet werden wenn eine href zur Seite erstellt wird.
route String NULL Name der Route die verwendet wird wenn eine href zur Seite erstellt wird.
reset_params bool TRUE Ob Benutzer Parameter zurückgesetzt werden sollen wenn eine href zur Seite erstellt wird.

Anmerkung

Die drei Beispiele anbei nehmen ein Standard MVC Setup an mit der default Route an.

Die zurückgegebene URI ist relativ zur baseUrl in Zend_Controller_Front. Im Beispiel ist die baseUrl der Einfachheit halber '/'.

Beispiel 596. getHref() erstellt die Seiten URI

Dieses Beispiel zeigt das MVC Seiten intern Zend_Controller_Action_Helper_Url verwenden um URIs zu erstellen wenn $page->getHref() aufgerufen wird.

// getHref() gibt / zurück
$page = new Zend_Navigation_Page_Mvc(array(
    'action'     => 'index',
    'controller' => 'index'
));

// getHref() gibt /blog/post/view zurück
$page = new Zend_Navigation_Page_Mvc(array(
    'action'     => 'view',
    'controller' => 'post',
    'module'     => 'blog'
));

// getHref() gibt /blog/post/view/id/1337 zurück
$page = new Zend_Navigation_Page_Mvc(array(
    'action'     => 'view',
    'controller' => 'post',
    'module'     => 'blog',
    'params'     => array('id' => 1337)
));

Beispiel 597. isActive() erkennt ob eine Seite aktiv ist

Dieses Beispiel zeigt das MVC Seiten erkennen ob sie aktiv sind indem die Parameter verwendet werden die im Anfrage Objekt gefunden werden.

/*
 * Ausgeführte Anfrage:
 * - module:     default
 * - controller: index
 * - action:     index
 */
$page1 = new Zend_Navigation_Page_Mvc(array(
    'action'     => 'index',
    'controller' => 'index'
));

$page2 = new Zend_Navigation_Page_Mvc(array(
    'action'     => 'bar',
    'controller' => 'index'
));

$page1->isActive(); // returns true
$page2->isActive(); // returns false

/*
 * Ausgeführte Anfrage:
 * - module:     blog
 * - controller: post
 * - action:     view
 * - id:         1337
 */
$page = new Zend_Navigation_Page_Mvc(array(
    'action'     => 'view',
    'controller' => 'post',
    'module'     => 'blog'
));

// Gibt true zurück, weil die Anfrage die gleichen Module, Controller
// und Aktion hat
$page->isActive();

/*
 * Ausgefürte Anfrage:
 * - module:     blog
 * - controller: post
 * - action:     view
 */
$page = new Zend_Navigation_Page_Mvc(array(
    'action'     => 'view',
    'controller' => 'post',
    'module'     => 'blog',
    'params'     => array('id' => null)
));

// Gibt false zurück weil die Seite den id Parameter in der
// Anfrage gesetzt haben muß
$page->isActive(); // gibt false zurück

Beispiel 598. Routen verwenden

Routen können mit MVC Seite verwendet werden. Wenn eine Seite eine Route hat, wird diese Route in getHref() verwendet um die URL für die Seite zu erstellen.

Anmerkung

Beachte, das wenn die route Eigenschaft in einer Seite verwendet wird, man auch die Standard Parameter spezifizieren sollte die diese Route definieren (module, controller, action, usw.), andernfalls ist die isActive() Methode nicht dazu in der Lage zu erkennen ob die Seite aktiv ist oder nicht. Der Grund hierfür ist, das es aktuell keinen Weg gibt die Standardparameter von einem Zend_Controller_Router_Route_Interface Objekt zu erhalten, oder die aktuelle Route von einem Zend_Controller_Router_Interface Objekt.

// Die folgende Route wird den ZF Router hinzugefügt
Zend_Controller_Front::getInstance()->getRouter()->addRoute(
    'article_view', // route name
    new Zend_Controller_Router_Route(
        'a/:id',
        array(
            'module'     => 'news',
            'controller' => 'article',
            'action'     => 'view',
            'id'         => null
        )
    )
);

// Eine Seite wird mit der 'route' Option erstellt
$page = new Zend_Navigation_Page_Mvc(array(
    'label'      => 'A news article',
    'route'      => 'article_view',
    'module'     => 'news',    // wird für isActive() benötigt, siehe oben
    'controller' => 'article', // wird für isActive() benötigt, siehe oben
    'action'     => 'view',    // wird für isActive() benötigt, siehe oben
    'params'     => array('id' => 42)
));

// Gibt /a/42 zurück
$page->getHref();

Zend_Navigation_Page_Uri

Seiten des Typs Zend_Navigation_Page_Uri können verwendet werden um auf Seiten von anderen Domains oder Sites zu verweisen, oder um eigene Logik für die Seite zu implementieren. URI Seiten sind einfach; zusätzlich zu den normalen Seitenoptionen nimmt eine URI Seite nur eine Option - uri. uri wird zurückgegeben wenn $page->getHref() aufgerufen wird, und kann ein String oder NULL sein.

Anmerkung

Zend_Navigation_Page_Uri versucht nicht zu erkennen ob es aktiv ist wenn $page->isActive() aufgerufen wird. Es gibt zurück, was aktuell gesetzt ist. Um also eine URI Seite aktiv zu machen muß man händisch $page->setActive() aufrufen oder active als eine Option der Seite bei der Erstellung spezifizieren.

Tabelle 122. URI Seiten Optionen

Schlüssel Typ Standard Beschreibung
uri String NULL URI zur Seite. Das kann ein String oder NULL sein.

Erstellung eigener Seiten Typen

Wenn Zend_Navigation_Page erweiter wird, besteht normalerweise keine Notwendigkeit den Constructor oder die Methoden setOptions() oder setConfig() zu überladen. Der Constructor der Seite nimmt einen einzelnen Parameter, ein Array oder ein Zend_Config Objekt, welches an setOptions() oder an setConfig() übergeben wird. Diese Methoden rufen dann die set() Methode auf, welche Optionen in native oder eigene Eigenschaften mappt. Wenn die Option internal_id angegeben wird, dann wird zuerst nach einer Methode geschaut die setInternalId() heißt und die Option wird an diese Methode übergeben wenn Sie existiert. Wenn die Methode nicht existiert, wird die Option als eigene Eigenschaft der Seite gesetzt, und ist über $internalId = $page->internal_id; oder $internalId = $page->get('internal_id'); erreichbar.

Beispiel 599. Die einfachste eigene Seite

Das einzige Ding das eine eigene Seite implementieren muß ist die getHref() Methode.

class My_Simple_Page extends Zend_Navigation_Page
{
    public function getHref()
    {
        return 'something-completely-different';
    }
}

Beispiel 600. Eine eigene Seite mit Eigenschaften

Wenn Eigenschaften an eine erweiterte Seite angefügt werden, gibt es keine Notwendigkeit setOptions() oder setConfig() zu Überladen/Modifizieren.

class My_Navigation_Page extends Zend_Navigation_Page
{
    private $_foo;
    private $_fooBar;

    public function setFoo($foo)
    {
        $this->_foo = $foo;
    }

    public function getFoo()
    {
        return $this->_foo;
    }

    public function setFooBar($fooBar)
    {
        $this->_fooBar = $fooBar;
    }

    public function getFooBar()
    {
        return $this->_fooBar;
    }

    public function getHref()
    {
        return $this->foo . '/' . $this->fooBar;
    }
}

// Kann jetzt Erstellt werden mit
$page = new My_Navigation_Page(array(
    'label'   => 'Namen von Eigenschaften werden auf Setter gemappt',
    'foo'     => 'bar',
    'foo_bar' => 'baz'
));

// ...oder
$page = Zend_Navigation_Page::factory(array(
    'type'    => 'My_Navigation_Page',
    'label'   => 'Namen von Eigenschaften werden auf Setter gemappt',
    'foo'     => 'bar',
    'foo_bar' => 'baz'
));

Erstellen von Seiten durch Verwendung der Page Factory

Alle Seiten (also auch eigene Klassen), können durch Verwendung der Page Factory Zend_Navigation_Page::factory() erstellt werden. Die Factory kann ein Array mit Optionen oder ein Zend_Config Objekt annehmen. Jeder Schlüssel im Array/Config entspricht einer Seiten Option, wie im Kapitel Seiten gezeigt. Wenn die Option uri angegeben wird und keine MVC Optionen angegeben werden (action, controller, module, route) wird eine URI Seite erstellt. Wenn eine der MVC Optionen angegeben wird, dann wird eine MVC Seite erstellt.

Wenn type angegeben wird, nimmt die Factory an das der Wert der Name der Klasse ist die erstellt werden soll. Wenn der Wert mvc oder uri ist wird eine MVC/URI Seite erstellt.

Beispiel 601. Erstellen einer MVC Seite durch Verwenden der Page Factory

$page = Zend_Navigation_Page::factory(array(
    'label'  => 'My MVC page',
    'action' => 'index'
));

$page = Zend_Navigation_Page::factory(array(
    'label'      => 'Search blog',
    'action'     => 'index',
    'controller' => 'search',
    'module'     => 'blog'
));

$page = Zend_Navigation_Page::factory(array(
    'label'      => 'Home',
    'action'     => 'index',
    'controller' => 'index',
    'module'     => 'index',
    'route'      => 'home'
));

$page = Zend_Navigation_Page::factory(array(
    'type'   => 'mvc',
    'label'  => 'My MVC page'
));

Beispiel 602. Erstellen einer URI Seite durch Verwendung der Page Factory

$page = Zend_Navigation_Page::factory(array(
    'label' => 'My URI page',
    'uri'   => 'http://www.example.com/'
));

$page = Zend_Navigation_Page::factory(array(
    'label'  => 'Search',
    'uri'    => 'http://www.example.com/search',
    'active' => true
));

$page = Zend_Navigation_Page::factory(array(
    'label' => 'My URI page',
    'uri'   => '#'
));

$page = Zend_Navigation_Page::factory(array(
    'type'   => 'uri',
    'label'  => 'My URI page'
));

Beispiel 603. Erstellung eines eigenen Seiten Typs durch Verwendung der Page Factory

Um einen eigenen Seitentyp zu erstellen mit Hilfe der Verwendung der Factory, muß die Option type verwendet werden um den Klassennamen zu spezifizieren der instanziiert werden muß.

class My_Navigation_Page extends Zend_Navigation_Page
{
    protected $_fooBar = 'ok';

    public function setFooBar($fooBar)
    {
        $this->_fooBar = $fooBar;
    }
}

$page = Zend_Navigation_Page::factory(array(
    'type'    => 'My_Navigation_Page',
    'label'   => 'My custom page',
    'foo_bar' => 'foo bar'
));