CMS->ページの「ホームページ」ファイルにあります。コンテンツでは、私は次のような行を書いています:
{{block type="myfolder/newfile" template="myfolder/newfile.phtml"}}
コンテンツファイルnewfile.phtmlでレンダリングしたい。私は何を間違っていますか?
私の新しいファイルは次の場所にあります:app\design\frontend\default\themeas\template\myfolder\newfile.phtml
ブロックに名前を付ける必要があります。これが、Magentoがブロックを参照する方法です。また、ブロックをレンダリングするには、ブロックタイプが有効である必要があります。デフォルトのブロックについては、type = "core/template"を使用してみてください
新しいコードは次のようになります。
{{block type="core/template" name="my.block.name" template="myfolder/newfile.phtml"}}
Type属性に関するもう1つの注意点は、実際にはディレクトリ/ファイル構造ではなく、MagentoオートローダーでマップされるURIです。 「コア」はMage_Core_Block_Coreクラス(app/code/core/Mage/Coreディレクトリの下)に関連し、スラッシュの後の情報はそのディレクトリ内のフォルダに関連します。したがって、type = "core/template"は、app/code/core/Mage/Core/Block /Template.phpにあるこのクラスMage_Core_Block_Core_Templateに解決されます。 type属性が実行しているのは、ブロック内にロードする必要のあるメソッドをMagentoに指示することだけです。
試すことができる他のいくつかのブロックタイプは次のとおりです。
製品リストの場合:catalog/product_list
テキストリスト(子ブロックを自動的にレンダリングするブロック)の場合:core/text_list
カテゴリブロックの場合:catalog/category_view
他にもたくさんあります。新しいブロックを見つける良い方法は、実行しようとしていることと同様のアクションを実行するブロックを調べて、XMLのどこで定義されているかを見つけることです。
ブロックに変数を渡したい場合は、次のようにすることができます。
{{block type="core/template" name="my.block.name" myvariable="5" template="myfolder/newfile.phtml"}}
別の方法を提供したいと思います。
上記の回答は問題なく機能しますが、クライアントがWYSIWYGを使用してテキストとコンテンツを編集しようとすると、この重要な行を削除できる(そして削除した)ため、CMSページのコンテンツにブロックを挿入しないのが私の個人的な好みです。
CMSページのレイアウト>レイアウト更新XMLセクションに以下を追加できます。
<reference name="content">
<block after="-" type="your/block_type" name="block.name" template="your/block/template/file.phtml"/>
<action method="insert" ifconfig="your/block_type">
<block>block.name</block>
</action>
</reference>
これにより、クライアントがこのタブを編集する可能性が低くなります。
これがこの問題で他の誰かに役立つことを願っています!
Magento 1.9.2.2または同等のパッチ以降、新しいブロックにアクセス許可を付与する必要もあります。これはバックエンドで行います。権限|ブロック
つまり、表示したい場合:
{{block type="catalog/product_bestseller" name="krillo.bestseller" template="catalog/product/bestseller.phtml"}}
ブロック名「catalog/product_bestseller」を追加し、ステータスを「allowed」に設定します