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();
}
}
ブロックをインスタンス化すると、上のコンテナのエラーログが表示されます。