ホームページにコンテンツブロックを追加し、「std」<div>を削除する


9

私はいくつかのことをやりたいと思っていますが、私は新しく、Magentoに習熟しているとはとても言えません。私が求めているのは、以下を実行するための最良かつ最も簡潔な方法です。

  1. 私のホームページのコンテンツ、およびこのプロジェクトでさらに進んだ場合はおそらく他のすべてのCMSページを、管理パネルWYSIWYGではなくテキストエディターで編集したいと思います。home-content.phtmlカルーセルのマークアップを含むようなテンプレートがあり、ホームページに他のすべてのものを配置すると思います。これを行うための最も論理的な方法は、私を添付している私には思えhome-content.phtmlgetChildHtml('content')> CMS - - >ページ- >ホームページ- >「デザイン」タブ-管理パネルでの方法>このようなコードとレイアウト更新XML:

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

    しかし、それは私がやりたい次のことにめちゃくちゃになりました...

  2. 私の意見では、デフォルトのMagento HTML構造は恐ろしく肥大化しており、ネストされたdivの数が多すぎます(ラッパー->ページ->メインコンテナーcol1-layout->メイン-> col-mainだけでページのコンテンツにアクセスします) 。これらのクラスのスタイルはすべて5つの異なるSassパーシャルに分割されているため、Sassでのスタイル設定は私にとって悪夢です。したがって、私はデフォルトの構造をクリーンアップして、自分の設計原則と一致させています。これの一部は、悪名高いのような空の要素を削除することを意味します<div class="std"> </div>。これを取り除く最も効果的な方法は(コンテンツに管理パネルを使用する予定がないため)<remove name="cms.wrapper">、CMS Home Layout Update XMLを使用することです。問題は、これにより上記の方法(reference name="content")で追加したものがすべて削除されることです。

基本的に:を使用してホームページにコンテンツを追加し、競合なしで.phtml 削除するにはどうすればよい<div class="std"> </div>ですか?admin-> CMS->レイアウト更新XMLの機能がどのようにlayout.xmlの機能と異なるのか、またはどちらを使用する必要があるのか​​理解できません(たとえば、<cms index-index>同じことを行うために使用できないのでしょうか?) 。

皆さん、ありがとうございました。


私の場合、.std不要なリストスタイルを追加します。Magentoの場合、予想通り、解決するのに時間がかかります。
rybo111 2015

回答:


12

問題を3つのセクションに分割して確認します。

1.テンプレートファイルをCMSページに追加する必要があります

ここで採用する方法は確実に機能します。つまり、このコードスニペットをcmsページのデザインタブの下に追加する必要があります。

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

テンプレートファイルは直接contentブロックの下にあるため、テンプレートコンテンツはmagentoによってレンダリングされます。したがって、でasプロパティを使用する必要はありませんcore/template block

2.回避する方法 <div class="std"></div>

このdivは、実際にはcmsページのラッパーdiv要素です。このブロックの定義については、こちらをご覧ください。

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

ご覧のとおり、cms.wrapperブロックのタイプはpage/html_wrapperです。このブロックの機能は、すべての子ブロックをdiv要素(デフォルト要素)でラップし、子ブロックを自動的にレンダリングします。

このブロックを回避するために、このコードを使用しました

<remove name="cms.wrapper">

しかし、それは完全に間違っています。実際、ラッパーdivは削除されます。しかし、それに伴い、子ブロックも削除されますcms_page。これcms_pageはタイプ付きcms/pageです。つまり、ブロックを参照していますMage_Cms_Block_Page。このブロックは、CMSページの「中心」です。したがって、ラッパーを削除すると、CMSページのハートブロックも消去されます。そのため、cmsページに何も出力されませんでした。

では、このラッパーを回避するために何をすべきでしょうか?答えは非常に簡単です。cms_pageラッパーからエスケープし、ラッパーを安全に削除します。したがって、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>

レイアウトxmlコードでわかるように、最初にラッパーを削除し、cms_pageコードを通じてブロックを挿入します。ご覧のとおり、テンプレートブロックも使用しました。これにより、最初にテンプレートファイルのコンテンツがページに表示され、次にcmsページコンテンツが表示されます。

3.管理-> CMS->レイアウト更新XMLがlayout.xmlの機能と異なる方法

サイトにあるCMSページの1つに特別な外観を設定するとします。そのために、あなたが選ぶことができる最良の方法は、admin-> CMS-> Layoutを通してレイアウト更新を追加することです。これはCMSページにのみ適用されます。

ただし、すべてのCMSページに一般的な変更を適用する必要がある場合は、を使用するのが簡単layout.xmlです。

したがって、一般的に、レイアウトを変更するためにどの方法を採用するかは、達成したいことに完全に依存します。それによっては、1つの方法を使用する必要があります。すべての方法とは限りません。

それが役に立てば幸い


3

問題のあるページが1つしかない場合、IMOの最善かつ最も簡単な方法は次のとおりです。

CMSページの"Design"タブを編集します。

wrapper要素を参照し、setElementClassメソッドを使用してクラスを適用しないか、新しいクラスを適用します。

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

0

レイアウトを変更する必要があります。通常は1column.phtml、2columns.phtmlなどで、必要に応じて作成します。

これらのPHTMLは、レイアウトの基本的な構造であり、プログラムによってXMLの更新で満たされています。

独自のテーマでテンプレートとレイアウトの整合性を保つ場合、これは他に影響を与えません。


if this is the home page, include this code ...すべてのレイアウトページに条件を追加してから、すべてのページのを削除するだけgetCHildHtml('content')ですか?Magentoとそのツールの使い方を学びたいだけでなく、問題を大槌で打つだけではありません。
エズラティック2014

いいえ、レイアウトはサイト全体で使用され、さまざまな状況で、ルートに応じてさまざまな更新が行われます。一度に1つの質問を作成します。疑問がある場合は、さらに質問を作成します。ただし、この質問は編集しないでください。編集すると、クローズされる場合があります。
mbalparda 2014

ここで失礼なことをするつもりはありません。お時間を割いていただき、ありがとうございます。しかし、私はあなたの答えが私を助けるとは思いません。要素を削除してブロックを1つのCMSページに追加しようとしていますが、メソッドが機能していません。そのため、機能するものを求めています。私はレイアウトとテンプレートの一般的な目的を認識しています。そして、あなたの「適切に使用すれば動作する」という質問には私の答えはありません。
エズラティック2014

このページは「他の人は無料で仕事をする」と誤解されています。答えは有効であり、おそらくあなたが探している答えであり、Magentoでの動作を理解すると、この答えがこの場合の対処法になります。
mbalparda 14

これを読んで、あなたが必要なもののほとんどを見つける:magentocommerce.com/knowledge-base/entry/...
mbalparda

0

受け入れられた回答のすべての方向性を理解するのに1分かかりました。そのため、これに便乗するために、すべてのCMSページのラッパーを削除するために必要なのはこれだけです。 <div class="std"></div>

cms.xmlで、cms_pageブロックを次のように変更します。

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