Escolar Documentos
Profissional Documentos
Cultura Documentos
Categoria: Desenvolvimento
Developers novas para Magento so frequentemente confundidos pelo sistema Layout e
View. Este artigo vai dar uma olhada no layout abordagem / Bloco de Magento, e mostrar-lhe
como ele se encaixa em Magento MVC viso de mundo.
Ao contrrio de muitos sistemas MVC populares, Action Controller do Magento
que no passar um objeto de dados para o visualizar ou definir propriedades no objeto view
(com algumas excees). Em vez disso, o componente Vista faz referncia direta modelos de
sistema para obter as informaes de que necessita para exibio.
Uma das conseqncias dessa deciso de projeto que o Vista foi separada em Blocos e
Modelos. Blocos so objetos PHP, Templates so arquivos "brutos" PHP (com extenso .phtml)
que contm uma mistura de HTML e PHP (onde PHP usada como uma linguagem de
templates). Cada bloco vinculado a um nico arquivo de modelo. Dentro de um arquivo
phtml, do PHP $ thispalavra-chave ir conter uma referncia ao modelo de objeto do bloco.
Um exemplo rpido
D uma olhada um o modelo padro do produto no arquivo em
app / design / frontend / base / default / template / catalog / produto / list.phtml
Voc ver o seguinte cdigo do modelo PHP.
<? Php
forma
como
voc
configurar
http://example.com/helloworld/index/index?showLayout=page
Este o xml layout para a sua pgina / pedido. Ela composta de <bloco />, <referncia /> e
<remover /> tags.Quando voc chama o loadLayout mtodo de sua Action Controller,
Magento ir
Se criarmos um bloco com o mesmo nome de um bloco j existente, a nova instncia do bloco
ir substituir a instncia original. Isto o que temos feito em nosso arquivo local.xml de cima.
< verso de layout = "0.1.0" >
<default>
< bloco
type = "page/html" name = "root" output = "toHtml" template ="magentotutorial/hellow
orld/simple_page.phtml" />
</default>
</ layout >
The Block chamado raiz foi substituda com o nosso bloco, o que aponta para um arquivo de
modelo phtml diferente.
Usando referncias
<Nome refernce = "" /> vai ligar todas as declaraes XML contidos em um bloco existente
com o nome especificado. Contido <bloco /> ns ser atribudo como blocos filho para o bloco
pai referenciado.
< verso de layout = "0.1.0" >
<default>
< bloco tipo = "Pgina / html cottage = "root" output = "" ToHTML template = "page /
2columns-left.phtml" >
<! - .. . sub blocos ... ->
</ bloco >
</ default>
</ o layout >
Em um arquivo de layout diferente:
< verso de layout = "0.1.0" >
<default>
uma nica cadeia. Isso significa que cada mtodo possvel em um Controlador de aco tem
um identificador associado a ele.
Lembre-se que "index" o padro Magento para ambos os controladores de ao e mtodos
de ao, ento o seguinte pedido
http://example.com/helloworld/?showLayout=handles
Tambm ir produzir um identificador chamado helloworld_index_index
Pacote de layout
Voc pode pensar a apresentao da embalagem semelhante configurao global. um
arquivo XML grande que contm todas as configuraes de layout possvel para um Magento
especial instalar. Vamos dar uma olhada nele usando o mdulo Layoutview
http://example.com/helloworld/index/index?showLayout=package
Isso pode demorar um pouco para carregar. Se o seu navegador est engasgada com a
prestao XML, experimente o formato de texto
http://example.com/helloworld/index/index?showLayout=package&showLayoutFormat=text
Voc dever ver um arquivo XML muito grande. Esta a apresentao da embalagem. Esse
arquivo XML criado combinando o contedo de todos os arquivos de layout XML para o tema
atual (ou pacote). Para a instalao padro, esta a
app / design / frontend / base / default / layout /
Nos bastidores h <frontend> <layout> <atualizaes /> e <adminhtml> <layout>
<atualizaes /> sees da configurao global que contm os ns com todos os nomes de
arquivos para carregar para a respectiva rea.Uma vez que os arquivos listados no config ter
sido combinado, Magento iro se fundir em um ltimo arquivo xml, local.xml. Este o arquivo
onde voc capaz de adicionar suas personalizaes para o seu Magento instalar.
Combinando Puxadores e a apresentao da embalagem
Ento, se voc olhar para a apresentao da embalagem, voc ver algumas marcas
conhecidas, como o <bloco /> e <referncia />, mas todos eles esto cercados por tags que se
parecem
<Padro />
< catalogsearch_advanced_index />
etc ...
Estas so todas as tags ala. O layout para um pedido individual gerado por agarrando todas
as sees da apresentao da embalagem que correspondem os identificadores para o
pedido. Assim, em nosso exemplo acima, o nosso layout est sendo gerado, agarrando as tags
a partir das seguintes sees
<Padro
/>
para local.xml significa que tenho substitudo a tag "root". com um bloco diferente. Ao colocar
isso no <default /> Handle temos assegurado que essa substituio vai acontecer para cada
solicitao de pgina no sistema.Isso provavelmente no o que queremos.
Se voc vai para qualquer outra pgina em seu site Magento, voc vai notar que eles esto em
branco ou branco, ou ter o mesmo fundo vermelho que sua pgina Ol mundo faz. Vamos
mudar o seu local.xml arquivo para que ele s se aplica pgina Ol mundo. Ns vamos fazer
isso alterando padro para usar a ala nome da ao integral ( helloworld_index_index ).
< verso de layout = "0.1.0" >
< helloworld_index_index >
< bloco
type = "page/html" name = "root" output = "toHtml" template ="magentotutorial/hellow
orld/simple_page.phtml" />
</ helloworld_index_index >
</ layout >
Limpe o cache do Magento, eo resto de suas pginas devem ser restauradas.
Agora isso s se aplica ao nosso ndice mtodo de ao. Vamos adicion-lo ao adeus Mtodo
de ao tambm.Em sua Action Controller, modificar a ao adeus de modo que parece
funo pblica goodbyeAction () {
$ this -> loadLayout ();
$ this -> renderLayout ();
}
Se voc carregar o seguinte URL, voc vai perceber que voc ainda est recebendo o layout
padro Magento.
http://example.com/helloworld/index/goodbye
Precisamos adicionar uma ala para o nome da ao integral ( helloworld_index_goodbye ) ao
nosso arquivo local.xml. Em vez de especificar um novo <bloxk />, vamos usar a tag atualizao
para incluir ohelloworld_index_index Handle.
< verso de layout = "0.1.0" >
<! - ... ->
< helloworld_index_goodbye >
Estamos adicionando um novo bloco aninhado dentro de nossa raiz. Este um bloco que
distribudo com o Magento, e ir mostrar um formulrio de registro do cliente. Ao incorporar
este bloco dentro do nosso bloco de raiz, ns fizemos disponvel para ser puxado para o
nosso simple_page.html Template. A seguir, vamos usar o mtodo getChildHtml do Bloco em
nossa simple_page.phtml arquivo. Editar simple_page.html para que ele se parece com isso
< corpo >
<? php echo $ this -> getChildHtml ( 'customer_form_register' ); ?>
</ corpo >
Limpe o cache do Magento e recarregue a pgina e voc deve ver o formulrio de registro do
cliente em seu fundo vermelho. Magento tambm tem um bloco chamado top.links. Vamos
tentar incluir isso. Mude o seu arquivo simple_page.html assim que l
< corpo >
< h1 > links </ h1 >
<? php echo $ this -> getChildHtml ( 'top.links' ); ?>
</ corpo >
Quando voc recarregar a pgina, voc ver que suas ligaes <h1> </ h1> ttulo est
rendendo, mas nada est rendendo para top.links. Isso porque ns no adicion-lo
local.xml. O getChildHtml mtodo s pode incluir blocos que so especificados como subblocos no layout. Isso permite que Magento para apenas instanciar os Blocos de que necessita,
e tambm permite que voc defina diferena Templates para os Blocos com base no contexto.
Vamos adicionar as top.links Bloco para a nossa local.xml
< helloworld_index_index >
< bloco
Tipo = "pgina / 'template_links cottage = "top.links" />
< bloco
Limpe seu cache e recarregue a pgina. Agora voc deve ver o mdulo top.links.
Tempo de ao
H mais um conceito importante para cobrir antes de encerrar esta lio, e que o <action />
tag. Usando o <action /> tag nos permite chamar mtodos PHP pblicos das classes de
bloco. Ento, ao invs de mudar o modelo do bloco de raiz, substituindo a instncia do bloco
com a nossa prpria, podemos usar uma chamada parasetTemplate vez.
< verso de layout = "0.1.0" >
< helloworld_index_index >