# Créer des pages de type personnalisé

Etendre `Zend_Navigation_Page` ne nécessite pas forcément de réécrire le constructeur ou les méthodes `setOptions()` ou `setConfig()`. Le constructeur prend un seul paramètre de type Array ou `Zend_Config` et il est passé à `setOptions()` ou `setConfig()` respectivement. Ces méthodes appellerons par la suite les setters `set()` qui distribueront leurs options. Si l'option `internal_id` est présente, alors la méthode `setInternalId()` sera évaluée si présente, et l'option en question lui sera passée. Si une telle méthode n'existe pas, l'option sera alors vue comme une propriété de la page et sera accessible sous `$internalId = $page->internal_id;` ou `$internalId = $page->get('internal_id');`.

## La page personnalisée la plus simple possible

La seule chose à définir dans une page personnalisée est la méthode `getHref()`.

    class My_Simple_Page extends Zend_Navigation_Page
    {
        public function getHref()
        {
            return 'Quelquechose-ici--ce-que-je-veux';
        }
    }

## Une page personnalisée avec des propriétés

Ajouter des propriétés à vos pages étendues ne nécessite pas de réécrire `setOptions()` ou `setConfig()`.

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

    // can now construct using
    $page = new My_Navigation_Page(array(
        'label'   => 'Les noms des propriétés sont dirigés vers les setters',
        'foo'     => 'bar',
        'foo_bar' => 'baz'
    ));

    // ...or
    $page = Zend_Navigation_Page::factory(array(
        'type'    => 'My_Navigation_Page',
        'label'   => 'Les noms des propriétés sont dirigés vers les setters',
        'foo'     => 'bar',
        'foo_bar' => 'baz'
    ));