07 ago2011

Adicionando rotas a uma página com Zend Navigation

por Matias Rezende

Opa… Tudo certo por aí?

Já viu os outros posts da série? É melhor começar por eles… :D

Hoje vamos ver como adicionar rotas a uma página que está em um menu. Não sabe criar rotas ou não sabe o que é uma rota? Dá uma lida aqui antes de prosseguir. Para o nosso caso, vamos incluir utilizando o método mais simples, que é pelo application.ini.

;; Rota - notícias
resources.router.routes.categoria.route = "/categoria/:categoria"
resources.router.routes.categoria.defaults.controller = "noticias"
resources.router.routes.categoria.defaults.action = "index"
resources.router.routes.categoria.defaults.categoria = null

Com isto, precisamos informar ao Zend Navigation em qual rota está cada página. Para isto, utilizamos o código abaixo em nosso navigation/default.ini:

noticias.pages.esportes.route = "categoria"

Fácil, né? Pois é… Só que aí aparece um problema nas outras páginas. Quando você entra em uma categoria de notícias, todas as páginas do menu ficam indicando para a própria página. Estranho, né? Isto acontece porque, quando não definimos uma rota específica para uma página, o View Helper URL pega a rota da página que está sendo exibida neste momento para criar a URL. Quando você não tem nenhuma rota, isto não é um problema. A partir do momento que você tem mais de uma rota (nosso caso) é um problema chato.

Como resolver??

Simples!!!! Definindo a rota das outras páginas como default. Olha como é fácil.

noticias.route = "default"

Fazendo isto em todas as páginas resolvemos o problema. Depois disto, o navigation/default.ini ficou assim:

;; Página Início
home.label = "Início"
home.controller = "index"
home.action = "index"
home.class = "home"
home.title = "Página Inicial"
home.route = "default"
;; Página A empresa
empresa.label = "A empresa"
empresa.controller = "empresa"
empresa.action = "index"
empresa.title = "Informações sobre a empresa"
empresa.route = "default"
        ;; História
        empresa.pages.historia.label = "História"
        empresa.pages.historia.controller = "empresa"
        empresa.pages.historia.action = "historia"
        empresa.pages.historia.title = "História da empresa"
        empresa.pages.historia.route = "default"
        ;; Missão
        empresa.pages.missao.label = "Missão"
        empresa.pages.missao.controller = "empresa"
        empresa.pages.missao.action = "missao"
        empresa.pages.missao.title = "Missão da empresa"
        empresa.pages.missao.route = "default"
        ;; Visão
        empresa.pages.visao.label = "Visão"
        empresa.pages.visao.controller = "empresa"
        empresa.pages.visao.action = "visao"
        empresa.pages.visao.title = "Visão da empresa"
        empresa.pages.visao.route = "default"
;; Página Notícias
noticias.label = "Notícias"
noticias.controller = "noticias"
noticias.action = "index"
noticias.title = "Notícias sobre o mercado"
noticias.route = "default"
        ;; Categoria Esportes
        noticias.pages.esportes.label = "Esportes"
        noticias.pages.esportes.controller = "noticias"
        noticias.pages.esportes.action = "index"
        noticias.pages.esportes.title = "Notícias sobre Esportes"
        noticias.pages.esportes.route = "categoria"
        noticias.pages.esportes.params.categoria = "esportes"
        ;; Categoria Entretenimento
        noticias.pages.entretenimento.label = "Entretenimento"
        noticias.pages.entretenimento.controller = "noticias"
        noticias.pages.entretenimento.action = "index"
        noticias.pages.entretenimento.title = "Notícias sobre Entretenimento"
        noticias.pages.entretenimento.route = "categoria"
        noticias.pages.entretenimento.params.categoria = "entretenimento"
        ;; Categoria Tecnologia
        noticias.pages.tecnologia.label = "Tecnologia"
        noticias.pages.tecnologia.controller = "noticias"
        noticias.pages.tecnologia.action = "index"
        noticias.pages.tecnologia.title = "Notícias sobre Tecnologia"
        noticias.pages.tecnologia.route = "categoria"
        noticias.pages.tecnologia.params.categoria = "tecnologia"
;; Página Contato
contato.label = "Contato"
contato.controller = "contato"
contato.action = "index"
contato.title = "Entre em contato conosco"
contato.route = "default"

Isto gerou um menu assim

<ul class="navigation">
    <li class="active">
        <a title="Página Inicial" class="home" href="/navigation/public/">Início</a>
    </li>
    <li>
        <a title="Informações sobre a empresa" href="/navigation/public/empresa">A empresa</a>
        <ul>
            <li>
                <a title="História da empresa" href="/navigation/public/empresa/historia">História</a>
            </li>
            <li>
                <a title="Missão da empresa" href="/navigation/public/empresa/missao">Missão</a>
            </li>
            <li>
                <a title="Visão da empresa" href="/navigation/public/empresa/visao">Visão</a>
            </li>
        </ul>
    </li>
    <li>
        <a title="Notícias sobre o mercado" href="/navigation/public/noticias">Notícias</a>
        <ul>
            <li>
                <a title="Notícias sobre Esportes" href="/navigation/public/categoria/esportes">Esportes</a>
            </li>
            <li>
                <a title="Notícias sobre Entretenimento" href="/navigation/public/categoria/entretenimento">Entretenimento</a>
            </li>
            <li>
                <a title="Notícias sobre Tecnologia" href="/navigation/public/categoria/tecnologia">Tecnologia</a>
            </li>
        </ul>
    </li>
    <li>
        <a title="Entre em contato conosco" href="/navigation/public/contato">Contato</a>
    </li>
</ul>

Legal né? Já está gostando mais de usar o Zend Navigation? Ainda tem MUITA coisa para aprender nele. Fiquem ligados nas novidades

2 respostas para “Adicionando rotas a uma página com Zend Navigation”

Deixe um Comentário

O seu endereço de email não será publicado Campos obrigatórios são marcados *

*

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>