私は2番目のMagentoモジュールを開発しています。このモジュールは、いくつかのデータを取得し、それを含むブロックをレンダリングする必要があります。そのようなブロックは、他のページで使用されます。
現時点では、モジュールのほぼ全体が配置されていますが、何らかの理由で、コントローラーメソッドを呼び出してもブロックがレンダリングされません。デバッグ情報を入力すると、ブロックのメソッドが正しく呼び出されていることがわかり__construct()
ましたが、テンプレートが読み込まれていないようで、返されたページが空白になっています。
別のモジュールからコピーして変更したブロックのコードは次のとおりです。
class Company_CustomerData_Block_CustomerSummary extends Mage_Core_Block_Template {
const _TEMPLATE = 'customerdata/customersummary.phtml';
public function __construct() {
// This method is called correctly
parent::_construct();
$this->setTemplate(self::_TEMPLATE);
}
}
ファイルcustomersummary.phtmlはapp/design / frontend / base / default / template / customerdataにあり、これは正しい場所である必要があります(または、少なくともそうだと思います)。その内容は次のとおりです。
It works!
プレーンテキストです。タグもコードも何もありません。静的なテキストであってもかまいません。完了するとデータが入力されます。
必要に応じて、コントローラーのコードを次に示します(データが取得される部分は、違いがないため、削除しました)。
public function dashboardAction() {
// Customer Data to render in the block
$CustomerData = array(); // Data is retrieved elsewhere
$this->getResponse()->setBody(
$this->getLayout()->createBlock('customerdata/customersummary')
->toHtml()
);
}
何が間違っているのでしょうか?もう一度バカなミスをしたのではないかと思いますが、本当に見えません。
最後にさらに2つの質問:
- コントローラで取得したデータをテンプレートに渡すにはどうすればよいですか?具体的には、変数
$CustomerData
。 - ブロックがレンダリングされたら、ページ内からコンテンツをレンダリングするにはどうすればよいですか?ブロックは、いくつかのものが含まれているを返す必要があります。カスタマーダッシュボード内の、すでに存在する情報のすぐ下にレンダリングしたいと思います。
助けてくれてありがとう。