# Caractéristiques communes aux pages

Toutes les classes pour des pages doivent étendre `Zend_Navigation_Page`, elles partageront ainsi des caractéristiques communes. Ces options sont représentées dans le tableau ci-après.

Les noms des options (en clés) sont dirigées vers les setters appropriés `set`. Ceci signifie qu'une option appelée `order` sera passée à la méthode `setOrder()`, et une option nommée `reset_params` sera dirigée vers `setResetParams()`. Si aucune méthode setter ne correspond, l'option sera alors évaluée comme un attribut personnalisé de la page.

Documentez vous au sujet de la création de pages `Zend_Navigation_Page` dans la documentation appropriée.

## Options communes aux pages

Clé | Type | Valeur par défaut | Description
--- | --- | --- | ---
`label` | chaine | `NULL` | Un nom de page, comme 'Home' ou 'Blog'.
`id` | chaine | `entier` | `NULL` | Un tag id à utiliser lors du rendu de la page, typiquement pour repérer un élément.
`class` | chaine | `NULL` | Une classe CSS à utiliser lors du rendu de la page.
`title` | chaine | `NULL` | Un titre de page utilisé lors du rendu, utilisé typiquement sous forme d'attribut `title`.
`target` | chaine | `NULL` | La cible à utiliser dans la page.

`rel`

tableau

`array()`

Attribue les relations de la page. Chaque élément dans le tableau est une paire clé-valeur où la clé désigne le type de relation et la valeur un pointeur vers la page. Par exemple `'alternate' => 'format/plain.html'`. Pour une fléxibilité maximale, il n'y a pas de restrictions quant aux valeurs, elles peuvent être autre chose qu'une chaine. Concernant `rel` et `rev`, voyez la section de documentation sur l'aide de vue Links..

`rev` | tableau | `array()` | Spécifie les relations inverses de la page. Fonctionne tout comme `rel`.

`order`

chaine | `entier` | `NULL`

`NULL`

Fonctionne comme order pour les éléments de `Zend_Form`. Si spécifiée, la page sera parcourue dans un ordre précis ce qui signifie que vous pouvez forcer la page à apparaitre avant les autres en utilisant une valeur de `order` basse, comme -100. Si une chaine est passée, elle doit pouvoir être convertie en `entier`. Si `NULL` est utilisé, le paramètre sera remis à zéro, donc l'ordre dans lequel la page a été ajoutée sera utilisé.

`resource` | chaine | `Zend_Acl_Resource_Interface` | `NULL` | `NULL` | Une ressource d'ACL à associer à la page. Voyez la documentation de la section sur les ACL concernant les aides de vue..
`privilege` | chaine | `NULL` | `NULL` | Un privilège d'ACL à associer à la page. Voyez la documentation de la section sur les ACL concernant les aides de vue..
`active` | `booléen` | `FALSE` | Si oui ou non la page doit être considérée comme active. Si à `FALSE` (ou non fourni), les pages MVC vont aller vérifier l'objet requête suite à l'appel à `$page->isActive()`.
`visible` | `booléen` | `TRUE` | Si oui ou non la page doit être visible à l'utilisateur ou juste présente dans la structure mais non représentée visuellement.
`pages` | tableau | `Zend_Config` | `NULL` | `NULL` | Pages enfant de la page en cours. Peut être de type tableau ou `Zend_Config` contenant des options à passer à la méthode `factory()` ou des instances de `Zend_Navigation_Page`, ou un mélange des deux types.

## Propriétés personnalisées

Toutes les pages supportent la gestion de propriétés personnalisées, ceci via les méthodes magiques `__set($name, $value)`, `__get($name)`, `__isset($name)` et `__unset($name)`. Ces propriétés peuvent prendre n'importe quelle valeur et seront incluses dans le tableau retourné par `$page->toArray()`, ce qui signifie que les pages peuvent être dé/sérialisées même si elles comportent des propriétés non natives à leur classe.

Que les pages soient natives ou personnalisées par vos soins, les propriétés peuvent être gérées au moyen des méthodes `$page->set($name, $value)` et `$page->get($name)`, ou encore via des méthodes magiques.

## Propriétés de pages personnalisées

Cet exemple montre comment les propriétés personnalisées des pages peuvent être utilisées.

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

    echo $page->foo;

    if ($page->meaning != 42) {
        // quelque chose à faire ici
    }