Adicionando bloco de conteúdo à Página Inicial, removendo 'std' <div>

9

Quero fazer algumas coisas e sou novo e muito, muito longe de ser proficiente em Magento; o que estou pedindo é a melhor e mais concisa maneira de fazer o seguinte:

  1. Gostaria de editar o conteúdo da minha página inicial - e provavelmente de todas as outras páginas do CMS, à medida que me aprofundar neste projeto - no meu editor de texto e não no painel de administração WYSIWYG. Acho que eu teria um modelo como a home-content.phtmlminha marcação para o meu carrossel e tudo o mais que eu acabasse colocando na minha página inicial. Pareceu-me a maneira mais lógica de fazer isso é anexar minha home-content.phtmlao getChildHtml('content')método no painel Admin -> CMS -> Páginas -> Página Inicial -> guia 'Design' -> xml layout Atualização com um código como este:

    <reference name="content">
                <block type="core/template" name="home-content"
                       as="home-content" template="home-content.phtml" />
    </reference>

    No entanto, isso foi confuso com a próxima coisa que eu queria fazer ...

  2. Na minha opinião, a estrutura HTML padrão do Magento é terrivelmente inchada, com muitos aninhados div( wrapper -> página -> container principal col1-layout -> main -> col-main apenas para acessar o conteúdo de uma página) . Isso torna o estilo com Sass um pesadelo para mim, com todos os estilos dessas classes divididos em 5 partes parciais diferentes. Portanto, estou limpando a estrutura padrão para corresponder aos meus próprios princípios de design. Parte disso significa remover elementos vazios, como os infames <div class="std"> </div>. A maneira mais eficaz de se livrar disso (como não planejo usar o painel de administração para o conteúdo) é usando <remove name="cms.wrapper">o XML de atualização do layout inicial do CMS. O problema é que isso remove tudo o que adiciono com o método acima ( reference name="content").

Basicamente: como posso adicionar conteúdo à minha Home Page com .phtml e remover o <div class="std"> </div>sem conflito? Não entendo como a funcionalidade do admin -> CMS -> atualização de layout XML difere da funcionalidade de layout.xml, ou por que devo usar um sobre o outro (como, por exemplo, não posso <cms index-index>fazer a mesma coisa?) .

Agradecemos antecipadamente a todos.

Ezratic
fonte
No meu caso, .stdadiciona estilos de lista onde eles não são desejados. Previsivelmente com o Magento, é um procedimento demorado a resolver.
rybo111

Respostas:

12

Vamos dividir seu problema em três seções e analisá-lo.

1. Você precisa adicionar um arquivo de modelo à sua página do CMS

O método que você adota aqui funcionará com certeza. Ou seja, você precisa adicionar esse snippet de código na sua página cms, na guia Design

<reference name="content"><block type="core/template" name="home-content"  template="test.phtml" /></reference>

Como seu arquivo de modelo está diretamente contentbloqueado, o conteúdo do seu modelo será renderizado pelo magento. Então você não precisa usar aspropriedades no seu core/template block.

2. Como evitar <div class="std"></div>

Esta div é realmente um elemento div de wrapper para páginas cms. Veja a definição deste bloco aqui.

  <block type="page/html_wrapper" name="cms.wrapper" translate="label">
        <label>CMS Content Wrapper</label>
        <action method="setElementClass"><value>std</value></action>
        <block type="cms/page" name="cms_page"/>
  </block>

Como você pode ver, o cms.wrapperbloco é do tipo page/html_wrapper. O que esse bloco faz é: ele envolverá todo o seu bloco filho com um elemento div (elemento padrão) e renderizará os blocos filho automaticamente.

Para evitar esse bloco, você usou este código

<remove name="cms.wrapper">

No entanto, está completamente errado. Ele remove realmente a div do wrapper. Mas junto com isso também remove o bloqueio filho cms_page. Isso cms_pageé com um tipo cms/page. Isso significa que se refere ao bloco Mage_Cms_Block_Page. Este bloco é o "coração" das páginas do CMS. Portanto, remover o invólucro também eliminou o bloqueio cardíaco do CMS Page. É por isso que você não obteve nenhuma saída na sua página de cms.

Então, o que você deve fazer para evitar esse invólucro? A resposta é muito simples. Escape cms_pagedo invólucro e remova-o com segurança. Então, aqui está o código que você precisa usar na seção de layout da página do cms.

<reference name="content"><remove name="cms.wrapper" /><block type="core/template" name="home-content"  template="test.phtml" /><block type="cms/page" name="cms_page"/></reference>

Como você pode ver no código xml do layout, primeiro removemos o wrapper e, portanto, inserimos o cms_pagebloco no nosso código. Também usamos nosso bloco de modelos, como você pode ver. Isso renderizará o conteúdo do arquivo de modelo primeiro em sua página, depois seguido pelo conteúdo da página cms.

3. Como admin -> CMS -> XML de atualização de layout difere da funcionalidade do layout.xml

Suponha que você gostaria de ter uma aparência especial para uma das páginas do CMS que você possui em seu site. Para isso, o melhor método que você pode optar é adicionar a atualização de layout em admin-> CMS-> Layout. Isso será aplicável exclusivamente à página do CMS.

Mas se você precisar aplicar algumas alterações gerais a todas as páginas do CMS, será fácil continuar layout.xml.

Portanto, geralmente, que método deve ser adotado para alterar o layout depende exclusivamente do que você deseja alcançar. Dependendo disso, você precisa seguir um método. Nem todo método.

espero que ajude

Rajeev K Tomy
fonte
3

Se houver apenas uma página ofensiva, a melhor e mais fácil maneira IMO:

Edite a "Design"guia da página do CMS .

Faça referência ao elemento wrapper, use o setElementClassmétodo para aplicar nenhuma classe ou uma nova classe.

<reference name="cms.wrapper">
<action method="setElementClass"><value>none</value></action>
</reference>
MES
fonte
0

Você deve modificar o layout, normalmente 1column.phtml, 2columns.phtml, etc, e torná-los como deseja / precisa.

Esses PHTMLs são a estrutura básica de qualquer layout e são preenchidos programaticamente com atualizações XML.

Isso não afetará mais nada se você mantiver a consistência entre seus modelos e layouts em seu próprio tema.

mbalparda
fonte
Como o que, adicionando um condicional if this is the home page, include this code ...em todas as páginas de layout e excluindo o getCHildHtml('content')em todas as páginas? Eu quero aprender como usar o Magento e suas ferramentas melhor, não apenas a marreta do problema.
Ezratic
Não, os layouts são usados ​​em todo o site, em diferentes circunstâncias e com diferentes atualizações, dependendo da rota. Faça uma pergunta por vez, se você tiver mais dúvidas, faça mais perguntas, mas não edite esta ou ela poderá estar fechada.
Mbalparda
Não estou tentando ser rude aqui; Eu aprecio você ter tempo para me responder. No entanto, acho que sua resposta não me ajuda. Estou tentando remover um elemento e adicionar um bloco a uma única página do CMS, mas meu método não está funcionando - por isso estou pedindo um que funcione. Estou ciente do objetivo geral de layouts e modelos, e o seu "Use as coisas corretamente e funcionará" não responde à minha pergunta.
Ezratic
Esta página foi confundida com "um trabalho gratuito para outras pessoas". A resposta é válida e provavelmente a que você está procurando e, depois de conhecer como as coisas funcionam no Magento, você encontrará essa resposta.
Mbalparda
Leia isto e você encontrará a maior parte do que precisa: magentocommerce.com/knowledge-base/entry/…
mbalparda
0

Levei um minuto para entender todas as instruções da resposta aceita; portanto, para dar uma guinada, é tudo o que era necessário para remover o wrapper de todas as páginas do CMS: <div class="std"></div>

No cms.xml, altere o bloco cms_page para:

<cms_page translate="label">
    <label>CMS Pages (All)</label>
    <reference name="content">
        <block type="core/template" name="page_content_heading" template="cms/content_heading.phtml"/>
        <block type="cms/page" name="cms_page"/>
    </reference>
</cms_page>
Justin
fonte