Quando leio a documentação em layouts de página ( http://devdocs.magento.com/guides/v2.0/frontend-dev-guide/layouts/layout-types.html#layout-types-page ), vejo que o as seguintes instruções neste documento XML são permitidas:
<container>
<referenceContainer>
<move>
<update>
Como <referenceBlock name="block.name" remove="true" />
não é uma das instruções permitidas, como posso remover um determinado elemento em um layout de página específico?
O que eu quero para as principais categorias é um design de página totalmente diferente. Não preciso de certos contêineres e blocos para este design. Para essas categorias, quero mostrar apenas categorias filho e não os produtos.
O que eu fiz agora é adicionar as seguintes linhas no layout da minha página: (in design\frontend\Vendor\Name-of-theme\Magento_Theme\page_layout\catalog-blocks.xml
)
<move element="category.image" destination="delete"></move>
<move element="category.description" destination="delete"></move>
<move element="category.products" destination="delete"></move>
<move element="page.main.title" destination="delete"></move>
No design\frontend\Vendor\Name-of-theme\Magento_Theme\layouts.xml
eu adicionei:
<layout id="catalog-blocks">
<label translate="true">Catalog Blocks</label>
</layout>
Dei a todas as categorias principais este catálogo - bloqueia o layout da página no administrador.
Depois, no layout principal ( design\frontend\Vendor\Name-of-theme\Magento_Theme\layout\default.xml
), adicionei:
<referenceBlock name="delete" remove="true" />
Portanto, todo o bloco de exclusão será excluído, com todas as coisas que mudei para cá, no layout da página. Isso funciona bem! Consegue exatamente o que eu quero, mas a coisa toda me parece um pouco tola.
Isso é considerado uma boa prática? Caso contrário, qual seria uma boa alternativa?
Edit 1 : Modificado o remove
-tag na minha pergunta com o caminho certo para evitar confusão.
Editar 2 : Mais algumas informações sobre os arquivos e os locais dos arquivos.
Esta é a melhor prática para remover qualquer bloco ou contêiner no magento 2. Você pode passar
name attribute
dentroname
do elemento abaixo.Você pode pesquisar dentro do sistema magento 2; você encontrará muitos lugares com a mesma sintaxe acima.
Sua maneira de recomendação do magento. Se o atributo remove = "true", adicione o elemento a ser removido da lista desse layout.
No magento 1
<remove> element
é válido, mas no Magento 2 você deve definir a sintaxe igual à anterior.fonte
<referenceBlock name="block.name" remove="true" />
(eu estava errado sobre aremove
tag) em um layout de página diretamente, poisreferenceBlock
também não é permitido. Eu ainda devomove
um elemento para um 'delete-container' e depois o excluo no arquivo de layout principal. O que me parece estranho.<block class="Magento\Framework\View\Element\Html\Links" name="top.links">
, neste caso, você pode usar<referenceBlock name="top.links" remove="true" />
Os layouts de página devem ser usados apenas para criar uma estrutura de arame / estrutura da página e não para modificações menores, como a remoção de blocos.
Para remover um bloco apenas para seu novo layout, acho que a melhor maneira é criar seu próprio identificador de layout e fazer as modificações nele. Por exemplo, você pode criar catalog_category_toplevel.xml que usa seu novo wireframe / layout e remover os blocos.
Como essa é mais uma tarefa de back-end, não me sinto à vontade para fornecer instruções para esta desculpa :( Estes dois artigos de Alan Storm podem ajudá-lo com isso:
TL: DR
Se você desejar fazer isso e seguir as práticas recomendadas, precisará criar um novo identificador de layout.
fonte