Zend_Navigation incluye dos tipos de página:
Páginas MVC – usando la clase
Zend_Navigation_Page_MvcPáginas URI – usando la clase
Zend_Navigation_Page_Uri
Las páginas MVC enlazan a páginas web dentro del sitio, y se definen usando parámetros
MVC (action, controller,
module, route, params). Las páginas
URI se definen mediante una única propiedad uri, que le da
toda la flexibilidad para enlazar páginas fuera del sitio o hacer otras cosas
con los enlaces generados (por ejemplo, un URI que se convierte en
<a href="#">foo<a>).
Todas las clases de página deben extender Zend_Navigation_Page,
y por lo tanto compartirán un conjunto común de características y propiedades. Cabe destacar
que comparten las opciones de la tabla siguiente y el mismo proceso de
inicialización.
Las claves de opciones se corresponden con métodos set. Esto significa que
la opción order se corresponde con el método setOrder(),
y reset_params se corresponde con el método
setResetParams(). Si no hay un método setter para
la opción, se establecerá como propiedad personalizada de la página.
Lea más sobre cómo extender Zend_Navigation_Page en
Creación de tipos de página personalizados.
Tabla 51.1. Opciones comunes de página
| Clave | Tipo | Por defecto | Descripción |
|---|---|---|---|
label |
String | NULL |
Una etiqueta de página, como 'Home' o 'Blog'. |
id |
String | int
|
NULL |
Una etiqueta/atributo id que puede usarse al renderizar la página, típicamente en un elemento anchor. |
class |
String | NULL |
Una clase CSS que puede usarse al renderizar la página, típicamente en un elemento anchor. |
title |
String | NULL |
Una breve descripción de la página, típicamente para usarse
como el atributo title en un anchor.
|
target |
String | NULL |
Especifica un target que puede usarse para la página, típicamente en un elemento anchor. |
accesskey |
String | NULL |
Este atributo asigna una tecla de acceso a un elemento A.
Una tecla de acceso es un único carácter del conjunto de caracteres del documento.
|
fragment |
String | NULL |
El identificador de fragmento (identificador de anchor) que apunta a un anchor dentro de un recurso que es subordinado a otro, recurso primario. El identificador de fragmento se introduce mediante una marca de almohadilla '#'. Ejemplo: http://www.example.org/foo.html#bar ('bar' es el identificador de fragmento) |
rel |
Array | array() |
Especifica relaciones directas (forward) para la página.
Cada elemento del array es un par clave-valor, donde la
clave designa el tipo de relación/enlace, y el valor es
un puntero a la página enlazada. Un ejemplo de par clave-valor
es 'alternate' => 'format/plain.html'.
Para permitir total flexibilidad, no hay restricciones sobre
los valores de relación. El valor no tiene que ser una cadena.
Lea más sobre rel y rev en
la
sección sobre el ayudante Links..
|
rev |
Array | array() |
Especifica relaciones inversas para la página. Funciona exactamente
igual que rel.
|
order |
String | int | NULL
|
NULL |
Funciona como order para elementos en
Zend_Form. Si se especifica,
la página se iterará en un orden específico, lo que significa
que puede forzar que una página se itere antes que otras
estableciendo el atributo order a un número bajo,
p. ej. -100. Si se da un String, debe
parsearse a un int válido. Si se da
NULL, se restablecerá, lo que significa que se usará el
orden en el que la página fue añadida al contenedor.
|
resource |
String | Zend_Acl_Resource_Interface
| NULL
|
NULL |
Recurso ACL a asociar con la página. Lea más en la sección sobre la integración de ACL en los ayudantes de vista.. |
privilege |
String | NULL
|
NULL |
Privilegio ACL a asociar con la página. Lea más en la sección sobre la integración de ACL en los ayudantes de vista.. |
active |
bool |
FALSE |
Si la página debe considerarse activa para la
solicitud actual. Si active es FALSE o no
se indica, las páginas MVC verificarán sus propiedades contra el
objeto request al llamar a $page->isActive().
|
visible |
bool |
TRUE |
Si la página debe ser visible para el usuario, o solo formar parte de la estructura. Los ayudantes de vista omiten las páginas invisibles. |
pages |
Array | Zend_Config |
NULL
|
NULL |
Páginas hijas de la página. Esto puede ser un Array
u objeto Zend_Config que contenga bien
opciones de página que puedan pasarse al método factory(),
o instancias reales de Zend_Navigation_Page,
o una mezcla de ambos.
|
![]() |
Propiedades personalizadas |
|---|---|
|
Todas las páginas admiten establecer y obtener propiedades personalizadas mediante
el uso de los métodos mágicos
Tanto las propiedades nativas como las personalizadas pueden establecerse usando
|
Ejemplo 51.1. Propiedades personalizadas de página
Este ejemplo muestra cómo pueden usarse las propiedades personalizadas.
$page = new Zend_Navigation_Page_Mvc();
$page->foo = 'bar';
$page->meaning = 42;
echo $page->foo;
if ($page->meaning != 42) {
// action should be taken
}
Las páginas MVC se definen usando parámetros MVC conocidos de
el componente Zend_Controller. Una página MVC
usará Zend_Controller_Action_Helper_Url internamente
en el método getHref() para generar hrefs, y
el método isActive() intersectará los parámetros de
Zend_Controller_Request_Abstract
con los parámetros de la página para determinar si la página está activa.
Tabla 51.2. Opciones de página MVC
| Clave | Tipo | Por defecto | Descripción |
|---|---|---|---|
action |
String | NULL |
Nombre de la acción a usar al generar el href de la página. |
controller |
String | NULL |
Nombre del controlador a usar al generar el href de la página. |
module |
String | NULL |
Nombre del módulo a usar al generar el href de la página. |
params |
Array | array() |
Parámetros de usuario a usar al generar el href de la página. |
route |
String | NULL |
Nombre de la ruta a usar al generar el href de la página. |
reset_params |
bool |
TRUE |
Si los parámetros de usuario deben restablecerse al generar el href de la página. |
encode_url |
bool |
TRUE |
Si el href debe codificarse al ensamblar la URL. |
![]() |
Nota |
|---|---|
|
Los tres ejemplos siguientes asumen una configuración MVC por defecto con
la ruta
La URI devuelta es relativa al |
Ejemplo 51.2. getHref() genera el URI de la página
Este ejemplo muestra que las páginas MVC usan
Zend_Controller_Action_Helper_Url internamente
para generar URIs al llamar a $page->getHref().
// getHref() returns /
$page = new Zend_Navigation_Page_Mvc(array(
'action' => 'index',
'controller' => 'index'
));
// getHref() returns /blog/post/view
$page = new Zend_Navigation_Page_Mvc(array(
'action' => 'view',
'controller' => 'post',
'module' => 'blog'
));
// getHref() returns /blog/post/view/id/1337
$page = new Zend_Navigation_Page_Mvc(array(
'action' => 'view',
'controller' => 'post',
'module' => 'blog',
'params' => array('id' => 1337)
));
Ejemplo 51.3. isActive() determina si la página está activa
Este ejemplo muestra que las páginas MVC determinan si están activas usando los parámetros encontrados en el objeto request.
/*
* Dispatched request:
* - 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
/*
* Dispatched request:
* - module: blog
* - controller: post
* - action: view
* - id: 1337
*/
$page = new Zend_Navigation_Page_Mvc(array(
'action' => 'view',
'controller' => 'post',
'module' => 'blog'
));
// returns true, because request has the same module, controller and action
$page->isActive();
/*
* Dispatched request:
* - module: blog
* - controller: post
* - action: view
*/
$page = new Zend_Navigation_Page_Mvc(array(
'action' => 'view',
'controller' => 'post',
'module' => 'blog',
'params' => array('id' => null)
));
// returns false, because page requires the id param to be set in the request
$page->isActive(); // returns false
Ejemplo 51.4. Uso de rutas
Las rutas pueden usarse con páginas MVC. Si una página tiene una ruta, esta
ruta se usará en getHref() para generar la
URL de la página.
![]() |
Nota |
|---|---|
Tenga en cuenta que al usar la propiedad |
// the following route is added to the ZF router
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
)
)
);
// a page is created with a 'route' option
$page = new Zend_Navigation_Page_Mvc(array(
'label' => 'A news article',
'route' => 'article_view',
'module' => 'news', // required for isActive(), see note above
'controller' => 'article', // required for isActive(), see note above
'action' => 'view', // required for isActive(), see note above
'params' => array('id' => 42)
));
// returns: /a/42
$page->getHref();
Ejemplo 51.5. Establecer parámetros a usar al ensamblar la URL
// The following route is added to the ZF router
Zend_Controller_Front::getInstance()->getRouter()->addRoute(
'article_list', // route name
new Zend_Controller_Router_Route(
'blog/:category/:page',
array(
'module' => 'blog',
'controller' => 'article',
'action' => 'list',
'category' => null,
'page' => null,
)
)
);
// A page is created with the 'route' option
$page = new Zend_Navigation_Page_Mvc(array(
'label' => 'Article list',
'module' => 'blog',
'controller' => 'post',
'action' => 'list',
));
// Add multiple parameters at once
$page->addParams(
array(
'category' => 'news',
'page' => 1,
)
);
// Add a single parameter
$page->addParam('category', 'news');
// Set multiple parameters at once (Overwrites any previously set parameters!)
$page->setParams(
array(
'category' => 'news',
'page' => 1,
)
);
// Set a single parameter
$page->setParam('category', 'news');
// Retrieve all parameters
$params = $page->getParams();
// Retrieve a single parameter
$category = $page->getParam('category');
// Remove a parameter
$page->removeParam('page');
// Clear all parameters
$page->clearParams();
Las páginas de tipo Zend_Navigation_Page_Uri pueden
usarse para enlazar a páginas en otros dominios o sitios, o para implementar
lógica personalizada para la página. Las páginas URI son simples; además
de las opciones de página comunes, una página URI solo admite una opción —
uri. El uri se devolverá al
llamar a $page->getHref(), y puede ser una
String o NULL.
![]() |
Nota |
|---|---|
|
Tabla 51.3. Opciones de página URI
| Clave | Tipo | Por defecto | Descripción |
|---|---|---|---|
uri |
String | NULL |
URI de la página. Puede ser cualquier cadena o
NULL.
|
Al extender Zend_Navigation_Page, normalmente
no es necesario sobrescribir el constructor ni los métodos
setOptions() o setConfig(). El constructor de la página
acepta un único parámetro, un Array u
objeto Zend_Config, que se pasa a
setOptions() o setConfig() respectivamente.
Esos métodos a su vez llamarán al método set(), que
mapeará las opciones a propiedades nativas o personalizadas. Si se indica la
opción internal_id, el método primero buscará un
método llamado setInternalId(), y le pasará la opción a este
método si existe. Si el método no existe, la opción se
establecerá como propiedad personalizada de la página, y será accesible mediante
$internalId = $page->internal_id; o
$internalId = $page->get('internal_id');.
Ejemplo 51.6. La página personalizada más simple
Lo único que una clase de página personalizada necesita implementar es el
método getHref().
class My_Simple_Page extends Zend_Navigation_Page
{
public function getHref()
{
return 'something-completely-different';
}
}
Ejemplo 51.7. Una página personalizada con propiedades
Al añadir propiedades a una página extendida, no es necesario
sobrescribir/modificar setOptions() o
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' => 'Property names are mapped to setters',
'foo' => 'bar',
'foo_bar' => 'baz'
));
// ...or
$page = Zend_Navigation_Page::factory(array(
'type' => 'My_Navigation_Page',
'label' => 'Property names are mapped to setters',
'foo' => 'bar',
'foo_bar' => 'baz'
));
Todas las páginas (incluidas las clases personalizadas) pueden crearse usando la fábrica
de páginas, Zend_Navigation_Page::factory(). La fábrica
puede recibir un array con opciones, o un
objeto Zend_Config. Cada clave del
array/config corresponde a una opción de página, como se ve en la
sección sobre Páginas.
Si se indica la opción uri y no se indican opciones MVC
(action, controller, module, route), se creará una página
URI. Si se indica alguna de las opciones MVC, se creará una
página MVC.
Si se indica type, la fábrica asumirá que el valor es
el nombre de la clase que debe crearse. Si el valor es
mvc o uri se creará una página MVC/URI.
Ejemplo 51.8. Creación de una página MVC usando la fábrica de páginas
$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'
));
Ejemplo 51.9. Creación de una página URI usando la fábrica de páginas
$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'
));
Ejemplo 51.10. Creación de un tipo de página personalizado usando la fábrica de páginas
Para crear un tipo de página personalizado usando la fábrica, use la opción
type para especificar un nombre de clase a instanciar.
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'
));
![[Note]](images/note.png)