terça-feira, 18 de outubro de 2011

Que cara é essa ? :: Mudando o layout de suas páginas


Muito mais que mudar apenas o CSS, as vezes lidamos com a situação em que a própria estrutura da página têm de ser diferente das outras - ou talvez queiramos ( por algum motivo MUITO especial ) que todas as páginas tenham um layout diferente umas das outras.

Um exemplo bem simples é um site com login logo na entrada. Na primeira página, o layout é o apropriado para o login, e as páginas a seguir ao login possuem o layout padrão.

Pois bem, assim como nos outros posts, vou mostrar que a coisa não é um bicho de sete cabeças no Zend.

Primeiro, habilite seus layouts com zend tools

$ zf enable layout

Agora, vai ser cirado na pasta "application/layouts" o arquivo padrão de layout do zend, o "layout.phtml", edite como você quiser.

Nessa mesma pasta, crie um arquivo "layout2.phtml" e edite com o layout alternativo que deseja.

Vá até o controller onde está a action da página onde será aplicado o layout alternativo e coloque nessa action a linha

...
$this->_helper->layout->setLayout('layout2');
...

E pronto. Basta abrir o action e terá seu layout alternativo para ele. Se for usar um css alternativo também, basta colocar na action

...
$this->_helper->layout->setLayout('layout2');
$this->view->headLink()->appendStylesheet( $this->view->baseUrl('caminho_do_css/estilo_alternativo.css' )  );
... 

E pode repetir essa situação pra quantas views desejar e pra quantos layouts você quiser.

Felizes ? Espero que sim. Abraços a todos e até a próxima.



Referências:

Felipe Djin : Zend_Layout: Templates no Zend Framework

Zend Manual : Zend_Layout Configuration Options


terça-feira, 11 de outubro de 2011

Pra onde vamos ? :: Modificar os links de suas paǵinas com roteamento estático

É comum que as vezes precisamos mudar o endereço de uma página em particular de nossa aplicação, de forma a ser mais amigável.

Por exemplo, se tivermos "por acaso" uma url da forma

http://meusite.com/secao1/secao2/secao3/secao4

mas a página "secao4" é tão importante, que precisamos facilitar sua escrita na url ( por questões de SEO ) da forma mais simples possível, assim
 
http://meusite.com/mysection

ou seja, queremos que a url "secao1/secao2/secao3/secao4" tenha o nome "mysection" mas que aponte para "secao1/secao2/secao3/secao4".

Para fazer isso, é muito simples.
Num cenário de exemplo, temos os seguintes links que queremos mudar as urls

http://meusite.com/secao/subsecao1
http://meusite.com/secao/subsecao2
http://meusite.com/secao/subsecao3

e queremos mudar para

http://meusite.com/mysection1
http://meusite.com/mysection2
http://meusite.com/mysection3

Para fazer isso, coloque em seu 'Bootstrap.php'


//
// Inicializa o rotamento pelo bootstrap.
// 
protected function _initRouter(){
		
     // Pega a instância do controller.
     $front_controller = Zend_Controller_Front::getInstance();
     $router = $front_controller->getRouter();
		
     // Cria os alias para os roteamentos.
     $link1  = new Zend_Controller_Router_Route_Static('mysection1',array('controller' => 'secao', 'action' => 'subsecao1') );
     $link2  = new Zend_Controller_Router_Route_Static('mysection2',array('controller' => 'secao', 'action' => 'subsecao2') );		
     $link3  = new Zend_Controller_Router_Route_Static('mysection3',array('controller' => 'secao', 'action' => 'subsecao3') );
		
     // Adiciona as rotas.
     $router->addRoute('myroute1', $link1);
     $router->addRoute('myroute2', $link2);
     $router->addRoute('myroute3', $link3);		
}

Explicando: '$link1' é o roteamento do endereço '/secao/subsecao1' para o nome 'mysection1' e 'myroute1' é o nome do roteamento que você irá usar para o zend_navigation.

Sim, se você criou menus com o zend_navigation, vai ter de mudar umas coisinhas se não quiser ter problema.

Supondo que você criou seus menus com um arquivo xml, então você deve ter uma seção para o link '/secao/subsecao1' dessa forma


secao
subsection1

Agora não têm mistério, basta acrescentar '<route>myroute1</route>' nessa parte de seu xml:

secao
subsection1
myroute1

e o link do menu irá pegar o roteamento para 'secao/subsection1'.
Nos outros links do menu, você DEVE acrescentar '<route>default</route>' , pois se não fizer isso, todos os links do menu vão ser roteados para o último router que você definiu no Bootstrap.

Para outros links normais de seu site que apontem para '/secao/subsecao1', não é preciso modificar nada, pois o roteamento é automatico para eles.

Esse roteamento do zend é estático, isso é, apenas para links que não requerem parâmetros. Para outros tipos de roteamento, aguarde próximos artigos.

Até lá =)



Referências:

Zend Manual : The standart router
 

domingo, 9 de outubro de 2011

Aos seus pés :: Como colocar seu javascript no fim da página

Quem lida com javascript sabe que de vez em sempre, é uma boa prática colocar o seu script no fim da página.


Com o Zend Framework temos mais essa facilidade, e bota fácil nisso.

Para colocar qualquer código javascript no corpo da página, vá em seu arquivo 'layout.phtml', coloque na parte que deseja o view helper inlineScript


<?php print $this->inlineScript(); ?>


E a partir dai, em qualquer view, acrescente o javascript que precisar dessa forma:


<?php $this->inlineScript()->appendFile($caminhodeseujavascript); ?>

E pronto, o seu script vai ser impresso exatamente na posição onde foi colocado o método inlineScript() no seu layout.

Essa mal teve graça de tão simples. Até a próxima dica.




Referências: