[Cascavel-pm] Catalyst: "Wrapper" e execução de "Private actions"

Ednardo Lobo ednardo em lobo.eti.br
Terça Maio 25 03:36:03 PDT 2010


Lindolfo,

Verifiquei seu projetinho e resolvi meu problema da seguinte forma:

<div id="head">
[% PROCESS head.tt %]
</div>

<div id="menu">
[% PROCESS menu.tt %]
</div>

<div id="content">
[% content %]
</div>

<div id="foot">
[% PROCESS foot.tt %]
</div>

E quando for necessário um pré-processamento do enxerto (ex: acessar um 
Model):

- Controller/Root.pm

sub end : ActionClass('RenderView') {
     $c->forward('Head'); # Call Controller::Root::Head::process
     $c->forward('Menu'); # Call Controller::Root::Menu::process
     $c->forward('Foot'); # Call Controller::Root::Foot::process
}

- Controller/Root/Menu.pm

sub process :Private {
     my ( $self, $c ) = @_;

     $c->stash->{menu} = [
     { name => 'Loja', url => '/loja' },
     { name => 'Funcionário', url => '/funcionario' },
     ];
}

- root/menu.tt

Menu:
<ul>
     [% FOREACH menu %]
     <li>
     <a href="[% url %]">[% name %]</a>
     </li>
     [% END %]
</ul>


Obrigado,

Lindolfo "Lorn" Rodrigues escreveu:
> Ednardo,
> 
> Tenho um projetinho de um blog que usa uma estrutura parecida com o que 
> você quer, está aqui:
> 
> http://github.com/lorn/blog-catalyst/
> Qualquer duvida é só perguntar.
> 
> PS: Um dia o blog sai :P
> 
> 2010/5/21 Alexei Znamensky <russoz em gmail.com <mailto:russoz em gmail.com>>
> 
>     Liga não, ele sempre presume isso
> 
> 
>     2010/5/21 Ednardo Lobo <ednardo em lobo.eti.br
>     <mailto:ednardo em lobo.eti.br>>
> 
>         Daniel,
> 
>         Por que supõe que não li o manual?
> 
>         Daniel de Oliveira Mantovani escreveu:
> 
>             Se você ler o manual do Catalyst, vai ter a noção e muito mais,
>             http://search.cpan.org/~hkclark/Catalyst-Manual-5.8004/lib/Catalyst/Manual/Tutorial/01_Intro.pod
> 
>             O segredo é ler o manual e entender, acompanhar os passos
>             facilita.
>             "Aquilo que não consigo construir, não consigo entender", do
>             físico
>             Richard Feynma
> 
>             2010/5/21 Ednardo Lobo <ednardo em lobo.eti.br
>             <mailto:ednardo em lobo.eti.br>>:
> 
>                 Pessoal,
> 
>                 O template do meu wrapper é algo como segue:
> 
>                 <div id="head">
>                 [% head %]
>                 </div>
> 
>                 <div id="menu">
>                 [% menu %]
>                 </div>
> 
>                 <div id="content">
>                 [% content %]
>                 </div>
> 
>                 <div id="foot">
>                 [% foot %]
>                 </div>
> 
>                 Estou querendo estruturar o meu código para enxertá-lo
>                 com os seguintes
>                 controladores abaixo:
> 
>                 package Root::Head
>                 sub <action> : ...  {
>                 }
> 
>                 package Root::Menu
>                 sub <action> : ... {
>                 }
> 
>                 package Root::Foot
>                 sub <action> : ... {
>                 }
> 
>                 Talvez esteja fazendo algo estúpido, porém estou usando
>                 o que tenho em mãos,
>                 ou seja, no raio do meu conhecimento atual sobre o Catalyst.
> 
>                 O enxerto referente ao "content" já é provido da forma
>                 mágica e tradicional,
>                 isto é, pela ação mapeada para respectiva URL.
>                 Infelizmente não descobri
>                 ainda como executar essas três ações sempre que uma
>                 requisição for feita,
>                 independente da URL e assim prover os outros enxertos.
>                 Nem mesmo descobri
>                 como direcionar o resultado de suas Views para as
>                 respectivas variáveis.
> 
>                 A idéia que veio foi utilizar um das "special private
>                 actions": begin, end,
>                 default e auto, encadeada a ação dos meus controladores
>                 Head, Menu e Foot. A
>                 dificuldade é que não tenho a mínima idéia de como fazer
>                 isto, nem mesmo por
>                 qual ação iniciar o encadeamento.
> 
>                 Isso funcionaria? Há algum outro método recomendado?
> 
> 
>                 Grato,

-- 
     Ednardo Lobo

     www.lobo.eti.br


Mais detalhes sobre a lista de discussão Cascavel-pm