0

Magentoモジュールのadminhtmlで新しいフォームを取得する作業をしています。ただし、実際にブロックをロードする際に深刻な問題が発生しています。別のスタックオーバーフローの質問で見つけたこのコードを使用して、テストブロックを(phtmlレイアウトを使用して)ロードできます(これはadminhtmlコントローラーに実装します)。

    $block = $this->getLayout()->createBlock('coupsmart_coupon/adminhtml_forms');
    error_log('The block:' . var_export($block, true));
    if($block)
    {
        $block->setTemplate('test/test.phtml');
        error_log(var_export($block->getTemplate(), true));
        error_log('The HTML:');
        error_log(var_export($block->toHtml(),true));   
    }

テストブロックを使用して、正しいhtml(adminhtml / default / default / templateフォルダーにあります)を取得します。

ただし、grid_containerブロックをインスタンス化するとif($block){}、ブロックがfalseであるため、その部分は実行されません。しかし、grid_containerのブロッククラスには__constructor()、出力をログに記録するメソッドがあるため、コンストラクターが実行されています。これは、クラスのインスタンス化(および名前付け)が正しいことを意味します。

Mage_Adminhtml_Block_Widget_Grid_Containerコンストラクターがブロック上で実行されても、クラスに対してfalseが返される原因は何ですか?

さらにコード(コントローラー、grid_containerブロック、グリッドブロック、構成など)が必要な場合は、お知らせください。投稿します。質問を薄める可能性のあるコードオーバーフローに圧倒されたくありませんでした。

編集:グリッドコンテナ

class Coupsmart_Coupon_Block_Adminhtml_Forms extends
Mage_Adminhtml_Block_Widget_Grid_Container
{       
    public function __construct()
    {
        error_log('adminhtml forms (parent) construct');
        $this->_controller = 'adminhtml_forms';
        $this->_blockGroup = 'coupsmart_coupon';
        $this->_headerText = Mage::helper('forms')->__('Coupon Manager');
        $this->_addButtonLabel = Mage::helper('forms')->__('Edit Coupon');
        parent::__construct();
    }
}

ブロックをインスタンス化すると、上のコンテナのエラーログが表示されます。

4

1 に答える 1

2

インスタンス化中に例外がスローされた場合、返されるブロックはfalseになる可能性があります。あなたのコードでは、これは確かにこの部分から来るかもしれません:Mage::helper('forms')
モジュールのconfig.xmlファイルで、このようなヘルパーを定義しましたか?:

<global>
    <helpers>
        <forms><class>Coupsmart_Coupon_Helper</class></forms>
    </helpers>
</global>

formsそれ以外の場合は、の呼び出しで使用した他のコードに置き換えますMage::helper('forms')(見た目からすると、これはおそらく次のようになりますMage::helper('coupsmart_coupon'):)

于 2012-07-18T17:25:09.203 に答える