# Общие функциональные возможности страниц

Все классы страниц должны расширять `Zend_Navigation_Page`, таким образом они будут наследовать один общий набор функциональных возможностей и свойств.

Для опций есть соотвествующие установочные методы с префиксом `set`. Это означает, что опции `order` соответствует метод `setOrder()`, а опции `reset_params` - метод `setResetParams()`. Если для опции нет соответствующего метода для установки, то она будет устанавливаться как пользовательское свойство страницы.

Более подробную информацию о расширении `Zend_Navigation_Page` читайте в разделе о создании своих типов страниц.

## Общие опции страниц

Ключ | Тип | Значение по умолчанию | Описание
--- | --- | --- | ---
`label` | String | `NULL` | Наименование страницы, например, "Главная" или "Блог".
`id` | String | `int` | `NULL` | Идентификатор, который может использоваться при рендеринге данной страницы, обычно в качестве атрибута id в элементе ссылки.
`class` | String | `NULL` | Класс CSS, который может использоваться при рендеринге данной страницы, обычно в элементе ссылки.
`title` | String | `NULL` | Краткое описание страницы, обычно оно используется в качестве атрибута `title` ссылки.
`target` | String | `NULL` | Задает целевой фрейм для страницы, обычно используется в качестве соответствующего атрибута ссылки.

`rel`

Array

`array()`

Определяет "направленные вперед" связи (forward relations) для страницы, т.е. отношение текущего ресурса к тому, на который ссылается страница. Все элементы в массиве являются парами ключ-значение, где ключ обозначает тип связи, а значение является указателем на связанную страницу. Примером такой пары ключ-значение может быть `'alternate' => 'format/plain.html'`. С целью обеспечения полной гибкости на значения из пар ключ-значение не накладывается никаких ограничений. Значение не обязательно должно быть строкой. Для получения более подробной информации об опциях `rel` и `rev` читайте раздел о помощнике ссылок.

`rev` | Array | `array()` | Определяет "обратные" связи (reverse relations) для страницы, т.е. отношение ресурса, на который ссылается данная страница, к текущему. Работает в точности так же, как `rel`.

`order`

String | `int` | `NULL`

`NULL`

Работает так же, как одноименная опция для элементов форм в `Zend_Form`. Страницы будут обходиться в указанном через эту опцию порядке, это значит, что вы можете сделать так, чтобы страница была первой в итерации, присвоив атрибуту `order` какое-то наименьшее значение, например, -100. Если передается строка, то она должна преобразовываться в валидный `int`. В случае значения `NULL` будет использоваться порядок, в котором страницы были добавлены в контейнер.

`resource` | String | `Zend_Acl_Resource_Interface` | `NULL` | `NULL` | Ресурс ACL, который требуется связать со страницей. Более подробную информацию читайте в разделе об интеграции ACL в помощники видов.
`privilege` | String | `NULL` | `NULL` | Привилегия ACL, которую требуется связать со страницей. Более подробную информацию читайте в разделе об интеграции ACL в помощники видов.
`active` | `bool` | `FALSE` | Должна ли страница считаться активной для текущего запроса. Если эта опция равна `FALSE` или не передана, то страница MVC будет сверять свои свойства с объектом запроса во время вызова `$page->isActive()`.
`visible` | `bool` | `TRUE` | Должна ли страница быть видимой для пользователя или просто быть частью структуры. Невидимые страницы пропускаются в помощниках видов.
`pages` | Array | `Zend_Config` | `NULL` | `NULL` | Дочерние по отношению к данной страницы. Это может быть массив или объект `Zend_Config`, содержащий либо опции страниц, которые могут быть переданы фабричному методу, либо сами экземпляры `Zend_Navigation_Page`. Массивы опций страниц и объекты `Zend_Navigation_Page` могут комбинироваться друг с другом.

## Пользовательские свойства

Все страницы поддерживают установку и получение пользовательских свойств путем использования "магических" методов `__set($name, $value)`, `__get($name)`, `__isset($name)` и `__unset($name)`. Пользовательские свойства могут иметь любые значения и будут включаться в массив, возвращаемый методом `$page->toArray()`. Последнее значит, что страницы могут успешно подвергаться сериализации/десериализации даже в том случае, если они содержат свойства, не определенные в классе страницы.

Как предопределенные, так и пользовательские свойства могут устанавливаться через метод `$page->set($name, $value)` и извлекаться через метод `$page->get($name)`, также можно использовать "магические" методы.

## Пользовательские свойства страницы

Данный пример показывает, как могут использоваться пользовательские свойства.

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

    echo $page->foo;

    if ($page->meaning != 42) {
        // должны быть какие-либо действия
    }