Magento2のページレイアウトの要素を削除することは可能ですか?


8

ページレイアウトに関するドキュメント(http://devdocs.magento.com/guides/v2.0/frontend-dev-guide/layouts/layout-types.html#layout-types-page)を読むと、このXMLドキュメントでは、次の指示が許可されています。

  • <container>
  • <referenceContainer>
  • <move>
  • <update>

<referenceBlock name="block.name" remove="true" />許可された手順の1つではないので、特定のページレイアウトの特定の要素を削除するにはどうすればよいですか?

私がトップカテゴリーに欲しいのは、まったく別のページデザインです。このデザインでは、特定のコンテナやブロックは必要ありません。これらのカテゴリでは、製品ではなく子カテゴリのみを表示します。

私が今やったことは、私のページレイアウトに次の行を追加することです:(で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>

ではdesign\frontend\Vendor\Name-of-theme\Magento_Theme\layouts.xmlI addded:

<layout id="catalog-blocks">
    <label translate="true">Catalog Blocks</label>
</layout>

私はすべてのトップカテゴリーにこのカタログブロックのページレイアウトを管理者に与えました。

次に、メインレイアウト(design\frontend\Vendor\Name-of-theme\Magento_Theme\layout\default.xml)に追加しました:

<referenceBlock name="delete" remove="true" />

したがって、ページレイアウトで、私がここに移動したすべてのものとともに、削除ブロック全体が削除されます。これはうまくいきます!それは私が望むものを正確に達成しますが、全体としては少しハックに思えます。

これは良い習慣と考えられますか?そうでない場合、良い代替手段は何でしょうか?

編集1remove混乱を避けるために、質問の- タグを正しいものに変更しました。

編集2:ファイルとファイルの場所に関するいくつかの詳細情報。

回答:


12

何について:

  • (ブロックの代わりに)新しいコンテナを作成する
  • ブロックをコンテナに移動します
  • コンテナを取り外します

このようなもの:

<container name="delete" htmlTag="div" htmlClass="delete"/>

<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>

<referenceContainer name="delete" remove="true" />

はい、それはまさに私がやったことです。私のポイントは:これは奇妙に感じます。これが唯一の回避策ですか?Magentoがこの機能をpage_layoutsに組み込まなかったのはなぜですか?ブロックを削除できないのには理由がありますか?
2016年

@ 11mbこれは、私の投稿のように1つのファイル(ページレイアウトxml)でコンテナーを作成して参照しているのとは少し異なりますが、質問では、ブロックといくつかのXMLファイルを使用しています。しかし、それは素晴らしい質問です。なぜMagentoがpage_layoutsでこの機能を構築しなかったのかはわかりません
Raphael at Digital Pianism

@ 11mbは、Magento 2のGitHubリポジトリに問題を作成してお気軽に問題を解決します。これは間違いなく興味深い問題であり、その背後には十分な理由があると確信しています
デジタルピアニズムのRaphael

1
ここであなたがしたことを私は見ます。それは確かに少し良いアプローチだと思います。私はそれをテストして、ここに戻ってきます。
2016年

6

これは、magento 2でブロックまたはコンテナーを削除するためのベストプラクティスです。以下の要素でname attribute内部nameを渡すことができます。

<referenceBlock name="block.name" remove="true" />

magento 2システム内を検索できます。上記と同じ構文がたくさんあります。

そのmagentoの推奨方法。属性remove = "true"の場合、そのレイアウトから削除する要素をリストに追加します。

magento 1 <remove> elementでは有効ですが、Magento 2では上記と同じ構文を設定する必要があります。


THX!少し言い直さないといけないと思います。どちらも許可されていないため、ページレイアウトで直接(タグ<referenceBlock name="block.name" remove="true" />について間違っていたremove)を使用することは可能ですreferenceBlockか?それでもmove要素を 'delete-container'に追加し、メインレイアウトファイルから削除する必要があります。それは私には奇妙に思えます。
2016年

referenceBlockは、既にブロックが名前で定義されている場合に使用されます。それ以外の場合は役に立ちません。例:<block class="Magento\Framework\View\Element\Html\Links" name="top.links">、この場合は使用できます<referenceBlock name="top.links" remove="true" />
Rakesh Jesadiya

ブロックが前に存在する必要があることを知っています。ただし、ページレイアウトでは、devdocs.magento.com / guides / v2.0 / frontend-dev-guide / layouts / …で説明されているように、すべての一般的なレイアウト手順を使用することはできません。(私は私の質問を編集しました)、それでreferenceBlockを使用できません
11mb

現在どのページで作業していて、delelteにどの要素を使用していますか?
Rakesh Jesadiya 16年

質問にいくつかの情報を追加しました。ご協力ありがとうございました!
2016年

1

ページレイアウトは、ページのワイヤーフレーム/構造を作成するためにのみ使用され、ブロックの削除などの小さな変更には使用されません。

新しいレイアウトのみのブロックを削除するには、独自のレイアウトハンドルを作成してそこに変更を加えるのが最善の方法だと思います。たとえば、新しいワイヤーフレーム/レイアウトを使用するcatalog_category_toplevel.xmlを作成し、そこのブロックを削除できます。

これはバックエンドタスクの詳細であるため、申し訳ありませんがこのための指示を提供するのに十分なほど快適ではありません。

TL:DR

これを行い、ベストプラクティスに従う場合は、新しいレイアウトハンドルを作成する必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.