2010-12-07 14 views
1

私はこの問題を昨日のStatic block on home page in Magentoと尋ねました。私の質問に答えて、既存のブロック(この例ではコンテンツ)にcms /ブロックをフックしています。Magentoで新しいブロックを作成

今、自分のブロックを作成する方法を知りたいと思います。

私は.phtmlテンプレートでこれを持っている:

<?php echo $this->getChildHtml('home_flash') ?> 

そして、この私のcms.xmlファイルに

<reference name="home_flash"> 
    <block type="cms/block" name="home-page-flash" before="content"> 
    <action method="setBlockId"><block_id>home-page-flash</block_id></action> 
    </block> 
</reference> 

しかし、これは動作しません。

私はまた、page.xmlファイルに(ブレッドクラム宣言をコピーして)、自分のブロックタイプを作成しようとしました:

<block type="page/html_home_block" name="home_block" as="home_block" template="page/template/home_block.phtml"/> 

を、ファイルが存在しますが、レンダリングされていないこと。

は、しかし、私はこのようにブロックを参照する場合:

<block type="page/html_breadcrumbs" name="home_block" as="home_block" template="page/template/home_block.phtml"/> 

は、それは私の自宅のブロックテンプレートをレンダリングしますが、元のCMS /ブロックは、それに接続されていません。

私の知る限りでは、何が起こっているのか、誰かが答えるのに十分なギャップを強調したいと思っています。新しい "home_block"タイプをどこかに "登録"しなければなりませんか?

+0

あなたが達成しようとしていることが100%明確ではないので、質問の理解が難しくなります。あなたが達成しようとしている最終結果が、物事についてより具体的であることを説明することができますか? (つまり、 "my .phtml template":どのphtmlテンプレート?) –

+0

@Alan Storm、コメントありがとう、私はその質問が長いことを知っていて、最後に1行の質問でそれをまとめようとしました! @clockworkgeekは私の質問に答えて、それは私がMagentoのMVCビットについてのポイントを見逃していたことが判明! –

答えて

5

独自のブロックを作成せずに使用できる多くのブロックがあります。この場合、私はcore/text_listが適していると思います。テンプレートを必要とせず、必要なだけ多くの子ブロックを持つことができるからです。知る価値

<?xml version="1.0"?> 
<layout version="0.1.0"><!-- All layout files start with this --> 
    <cms_index_index><!-- Index directive is the same as "home" page --> 
     <reference name="root"><!-- For more blocks that can be referenced see "default" directive --> 
      <block type="core/text_list" name="home_flash"> 
       <block type="cms/block" name="home-page-flash"> 
        <action method="setBlockId"><block_id>home-page-flash</block_id></action> 
       </block> 
      </block> 
     </reference> 
    </cms_index_index> 

    <!-- More directives might go here --> 

</layout> 

他の有用なブロックタイプはcore/textそれぞれMage_Core_Block_TextMage_Core_Block_Templateに対応core/templateあります。彼らは最も多く使われます。
自宅ブロックタイプpage/html_home_blockには、名前が一致するPHPクラスがありませんでした。純粋に独自の名前を作成していた場合は、Magentoが既に使用しているため、pageプレフィックスを使用できません。

ブロックを作成するには、レイアウトファイルに<block>タグが必要です。
ブロックタイプを作成するには、PHPクラスを作成し、それに名前空間を与え、それをモジュールの一部として宣言する必要があります。
既存のブロックに追加する場合は、<reference>タグを使用するときです。

Magento Knowledge Baseには、Theming & Designのものがいくつか含まれています。

+0

完全かつ完全な答えをいただきありがとうございます。私は、技術シンプルでもなく、私の頭上でもなかったナレッジベースに関する文書を見つけるのに苦労しています。私は今、既存のブロックを調べ、MVCビットの反対側を突っ込んでしまうかもしれません。 –

関連する問題