Magentoの新しいカスタムブロックモジュール


12

Magentoバージョン1.8.1.0を使用しています。

新しいホームページを作成するために使用する新しいカスタムブロックモジュールを作成しようとしています。

  • 名前空間:十字軍
  • モジュール:CLHomePage
  • ブロックタイプ:十字軍の家
  • クラス:Qwerty(テスト中のみ)
  • デザインパッケージ:クルセイダー
  • テーマ:デフォルト

これは私がこれまでに持っているものです:

\ app \ etc \ modules \ Crusader_All.xml

<?xml version="1.0"?>
<config>
    <modules>
        <Crusader_CLHomePage>
            <active>true</active>
            <codePool>local</codePool>
        </Crusader_CLHomePage>
    </modules>
</config>

\ app \ code \ local \ Crusader \ CLHomePage \ etc \ config.xml

<?xml version="1.0"?>
<config> 
    <modules>
        <Crusader_CLHomePage>
            <version>0.0.1</version>
        </Crusader_CLHomePage>
    </modules>
    <global>
        <blocks>
            <crusaderhome>
                <class>Crusader_CLHomePage_Block</class>
            </crusaderhome>
        </blocks>
    </global>
</config>

\ app \ code \ local \ Crusader \ CLHomePage \ Block \ Qwerty.php

<?php
class Crusader_CLHomePage_Block_Qwerty extends Mage_Core_Block_Template
{
    // Methods (optional)
}
?>

\ app \ design \ frontend \ crusader \ default \ layout \ local.xml

<?xml version="1.0" ?>
<layout>
    <cms_index_index>
        <reference name="content">
            <block type="core/template" name="homepage" template="crusader/home.phtml">
                <block type="crusaderhome/qwerty" name="homeads" as="homeads" template="crusader/homeads.phtml" />
            </block>
        </reference>
    </cms_index_index>
</layout>

\ app \ design \ frontend \ crusader \ default \ template \ crusader \ home.phtml

<div id="home">
<p>Home Wrapper</p>
<?php echo $this->getChildHtml('homeads'); ?>
</div>

\ app \ design \ frontend \ crusader \ default \ template \ crusader \ homeads.phtml

<p>Adverts</p>

これで、上記の設定が完了し、私のホームページには「Home Wrapper」home.phtmlと表示されるだけなので、コンテンツは表示されますが、コンテンツは表示されませんhomeads.phtml

ブロックタイプをhomeadsto に変更するcore/templateと機能し、「Home Wrapper」と「Adverts」の両方が表示されます。そのため、問題は私の新しいブロックタイプ(十字軍の家と呼ばれる)への参照に関係していることがわかります。

ここで何を間違えていますか?

編集

回答の提案の後、次のようにいくつかのファイルを更新しましたが、まだ機能しません:

\ app \ etc \ modules \ Crusader_Home.xml

<?xml version="1.0"?>
<config>
    <modules>
        <Crusader_Home>
            <active>true</active>
            <codePool>local</codePool>
        </Crusader_Home>
    </modules>
</config>

\ app \ code \ local \ Crusader \ Home \ etc \ config.xml

<?xml version="1.0"?>
<config> 
    <modules>
        <Crusader_Home>
            <version>1.0.0</version>
        </Crusader_Home>
    </modules>
    <global>
        <blocks>
            <crusader_home>
                <class>Crusader_Home_Block</class>
            </crusader_home>
        </blocks>
    </global>
</config>

\ app \ code \ local \ Crusader \ Home \ Block \ Qwerty.php

<?php
class Crusader_Home_Block_Qwerty extends Mage_Core_Block_Template
{
    // Methods (optional)
}
?>

\ app \ design \ frontend \ crusader \ default \ layout \ local.xml(以前試したネストされたブロックの代わりに1つのブロックのみを使用するように簡略化されています)

<?xml version="1.0" ?>
<layout>
    <cms_index_index>
        <reference name="content">
            <block type="crusader_home/qwerty" name="homepage" template="crusader/home.phtml" />
        </reference>
    </cms_index_index>
</layout>

\ app \ design \ frontend \ crusader \ default \ template \ crusader \ home.phtml

<p>Home</p>

だから私はまだ何も表示されない立場にいます。

@FabianBlechschmidtによってプロンプトが表示された後、ログをオンにしました。これはexception.logに表示されます。

2014-04-09T14:04:54+00:00 ERR (3): 
exception 'Mage_Core_Exception' with message 'Invalid block type: Crusader_Home_Block_Qwerty' in W:\stores\magento-dev\app\Mage.php:595
Stack trace:
#0 W:\stores\magento-dev\includes\src\__default.php(27744): Mage::throwException('Invalid block t...')
#1 W:\stores\magento-dev\includes\src\__default.php(27686): Mage_Core_Model_Layout->_getBlockInstance('crusader_home/q...', Array)
#2 W:\stores\magento-dev\includes\src\__default.php(27721): Mage_Core_Model_Layout->createBlock('crusader_home/q...', 'homepage')
#3 W:\stores\magento-dev\includes\src\__default.php(27488): Mage_Core_Model_Layout->addBlock('crusader_home/q...', 'homepage')
#4 W:\stores\magento-dev\includes\src\__default.php(27454): Mage_Core_Model_Layout->_generateBlock(Object(Mage_Core_Model_Layout_Element), Object(Mage_Core_Model_Layout_Element))
#5 W:\stores\magento-dev\includes\src\__default.php(27459): Mage_Core_Model_Layout->generateBlocks(Object(Mage_Core_Model_Layout_Element))
#6 W:\stores\magento-dev\includes\src\__default.php(13895): Mage_Core_Model_Layout->generateBlocks()
#7 W:\stores\magento-dev\includes\src\__default.php(11274): Mage_Core_Controller_Varien_Action->generateLayoutBlocks()
#8 W:\stores\magento-dev\includes\src\__default.php(11213): Mage_Cms_Helper_Page->_renderPage(Object(Mage_Cms_IndexController), 'home')
#9 W:\stores\magento-dev\app\code\core\Mage\Cms\controllers\IndexController.php(45): Mage_Cms_Helper_Page->renderPage(Object(Mage_Cms_IndexController), 'home')
#10 W:\stores\magento-dev\includes\src\__default.php(13969): Mage_Cms_IndexController->indexAction()
#11 W:\stores\magento-dev\includes\src\__default.php(18331): Mage_Core_Controller_Varien_Action->dispatch('index')
#12 W:\stores\magento-dev\includes\src\__default.php(17865): Mage_Core_Controller_Varien_Router_Standard->match(Object(Mage_Core_Controller_Request_Http))
#13 W:\stores\magento-dev\includes\src\__default.php(20465): Mage_Core_Controller_Varien_Front->dispatch()
#14 W:\stores\magento-dev\app\Mage.php(684): Mage_Core_Model_App->run(Array)
#15 W:\stores\magento-dev\index.php(176): Mage::run('crusadergifts', 'store')
#16 {main}

何が起こっているのでしょうか?。??

編集番号2

@Malachy答えが見つかりました...それはコンパイラでした。コンパイラを無効にしましたが、現在は動作しているようです。


どこかにタイプミスがあり、ファイル名の大文字/小文字をチェックしていると思います。ファイルは正常に見えます。構成キャッシュを消去しましたか?
ファビアンBlechschmidt 14

@FabianBlechschmidtコードとファイル名の大文字/小文字をチェックしました-よさそうです。上記のすべてが私のファイルから貼り付けられます。現在、すべてのキャッシュをオフにしていますが、すべてのキャッシュをクリアして再試行しましたが、まだ機能しません。
スティーブン最後の14

system.logとexception.logを確認しましたか?何もない場合は、MAge_Core_Model_Config-> getGroupedClassName()でデバッグを開始します。これに加えて、すばらしいデバッグチュートリアルをご覧になり、ご報告ください
ファビアンBlechschmidt 14

以前にログを使用したことはありません。私は今それらを有効にしました、そしてexception.logは示しています:exception 'Mage_Core_Exception' with message 'Invalid block type: Crusader_Home_Block_Qwerty'
スティーブン最後の

ここでの他の回答に合わせてモジュール名を更新しました。したがって、ブロックタイプ名(CLHomePage-> Home)になりました。
スティーブン14

回答:


11

私はXML全体を難しいと感じているので、ここでのあなたの原因に同情します。

クラス名とブロックXMLに矛盾があるように見えます

すなわち

class Crusader_CLHomePage_Block_Qwerty extends Mage_Core_Block_Template

そして

    <block type="core/template" name="homepage" template="crusader/home.phtml">
        <block type="crusaderhome/qwerty" name="homeads" as="homeads" template="crusader/homeads.phtml" />
    </block>

ブロックタイプから始めて、逆方向に作業を始めましょう。私はここで私は次のようなものを見ることを期待すると思います

<block type="crusader_home/qwerty" ...

そのタイプはMagentoをクラスに参照します

Crusader_Home_Block_Qwerty extends Mage_Core_Block_Template

このタックで後方に作業を続けると、ファイルapp \ code \ local \ Crusader \ CLHomePage \ etc \ config.xmlを次のように変更する必要があります。

<global>
    <blocks>
        <crusader_home>
            <class>Crusader_Home_Block</class>
        </crusader_home>
    </blocks>
</global>

「Crusader_Home_Block_ *」で始まるすべてのクラスにMagentoを向けます。そして今、Crusader_CLHomePageではなくモジュールCrusader_Homeの名前を変更し、それに応じてフォルダー名を変更する必要があると思います...

AND /しかし、モジュール名を変更することを強くお勧めします。モジュール名の先頭で3つではなく 1つの大文字のみを使用し、名前の中央にも大文字を使用しないでください。

モジュールを生成するために使用できるツールのいくつかを調べてください。入力エラーを回避するのに非常に役立ちます。私はこれをMGT Commerceの非常に賢い人々(それは単純な側面を持っています)が使用しています。これはSilk Softwareの包括的で驚くべきコーディングです

***以下のコメントを編集

さらに、エラーログに基づいて、Magentoがクラスファイルを見つけることができないという問題があると思います。したがって、キャッシュ、特にXMLキャッシュが更新またはオフになっていること、およびコンパイラーがオフまたは再有効化されていることを再確認してください。


ありがとう、私はあなたの提案を試みました。モジュールの名前を「ホーム」に変更し、すべての参照とフォルダーを更新しました。それでも動作しません。質問を編集して、変更を表示します。
スティーブン

1
確かに良く見えます。どこかに卑劣な入力エラーがまだあるのだろうか。エラーログに基づくと、問題はMagentoがクラスファイルを見つけられないことだと思います。したがって、キャッシュが更新されているか、特にオフになっていることを再確認してください。XMLキャッシュとコンパイラーがオフまたは再有効化されています。ファイル許可の問題ではないでしょうか?
マラキー

1
あなたは魔法の言葉-コンパイラーについて言及しました...コンパイラーを無効にしましたが、今はうまくいくようです。ありがとうございました!これを回答として追加する場合、私はあなたのためにそれを受け入れます!:-)
スティーブン昨年

実際、それは単なるコンパイラではありませんでした。元のXML <block type="crusaderhome/qwerty"が正しくありません。溶液は、両方のAである)XML修正及び b)の再コンパイル
マラキ

-1

そもそも質問に答えてください

    <block type="core/template" name="homepage" template="crusader/home.phtml">
       <block type="crusaderhome/qwerty" name="homeads" as="homeads" template="crusader/homeads.phtml" />
    </block>

に置き換える必要があります

<block type="core/template" name="homepage" template="crusader/home.phtml"></block>
<block type="crusaderhome/qwerty" name="homeads" as="homeads" 
template="crusader/homeads.phtml" />

homeadsはホームページの子ではないためです。これでうまくいくと思います。


ありがとう!私はそれを前に運なしで試しました。ブロックタイプが(カスタムブロックタイプではなく)コア/テンプレートの場合、親/子の問題はうまく機能していたため、問題はブロックの配置ではありません。
スティーブン最後の

-1

私は同じ問題を抱えており、config.xmlの次のコードを置き換えることで解決しました

<global>
    <blocks>
        <crusaderhome>
            <class>Crusader_CLHomePage_Block</class>
        </crusaderhome>
    </blocks>
</global>

これに

<global>
    <blocks>
        <crusader_clhomepage>
            <class>Crusader_CLHomePage_Block</class>
        </crusader_clhomepage>
    </blocks>
</global>

問題を解決するはずです。

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