つまり、モデル内のフロントエンドブロックを呼び出して、PHTMLテンプレートの出力を取得したいと思います。
モジュールの特定のHTMLファイルのコンテンツを生成するtest.phtmlテンプレートがあります。このHTMLは、管理者の要求がある場合にのみ生成する必要があるため、コントローラー内で呼び出します。そして、そのコントローラーはモデルを呼び出します。
public function generateAction()
{
Mage::getSingleton('helloworld/sample')->doSomething();
}
モデルは次のようになります。
class My_Helloworld_Model_Sample Mage_Core_Model_Abstract
{
public function doSomething()
{
$templatePath = 'helloworld/test.phtml';
$output = Mage::app()->getLayout()
->createBlock("core/template")
->setData('area','frontend')
->setTemplate($templatePath)
->toHtml();
//write $output in HTML file
}
//...
}
ブロックを呼び出し、test.phtmlテンプレートファイルの出力を取得して、HTMLファイルに書き込みます。
モデルメソッドの1つでそのHTMLを生成しないのはなぜですか?2つの理由:-ユーザーはそのファイルに簡単にアクセスできる必要があります-.phtmlファイルはユーザー/設計者にとってはるかに読みやすいです
そのため、出力を取得するためのブロックを作成したいと思います。しかし、問題は、そのブロックを作成しようとすると、次のエラーが発生することです。
CRIT(2):無効なテンプレートファイル:frontend / base / default /template/test.phtml
Magentoは、「ベース」テーマ内のテンプレートを検索します。そのファイル(frontend / base / default / template / test.phtml)をそこに置くと、すべて正常に機能します。ただし、そのテンプレートを現在のテーマのディレクトリ(モジュールの残りのテンプレートファイルを保持するディレクトリ)内に保持したいと思います。
フロントエンド/パッケージ/テーマ/template/test.phtml
どうすればこれを達成できますか?
編集:
申し訳ありませんが、コードを簡略化して読みやすくしたいと思いました。テンプレートファイルが実際に配置されている場所は次のとおりです。
フロントエンド\default\ modern \ template \ mymodule \ test.phtml
管理パネルのボタンをクリックすると、コントローラーはモデルを呼び出します。
public function generateAction()
{
//Get model and call the method to generate HTML
Mage::getSingleton('mymodule/sample')->doSomething();
}
モデルは、test.phtmlテンプレートの出力を取得するためのブロックを作成します。
class My_Mymodule_Model_Sample Mage_Core_Model_Abstract
{
public function doSomething()
{
$templatePath = 'mymodule' . DS . 'test.phtml';
$output = Mage::app()->getLayout()
->createBlock("core/template")
->setData('area','frontend')
->setTemplate($templatePath)
->toHtml();
//write $output in HTML file
}
//...
}
今まではすべて正常に動作します。しかし、ブロックが作成されると、Magentoはテンプレートファイルを見つけることができず、次のエラーが発生します。
CRIT(2):無効なテンプレートファイル:frontend \ base \ default \ template \ mymodule \ test.phtml
app / code / core / Mage / Core / Model / Design / Package.phpに追加Mage::log
した後、system.logファイルで次の情報を取得しました。
2012-09-06T09:40:55 + 00:00デバッグ(7):E:\ webserver \ xampp \ htdocs \ magento \ app \ design \ frontend \ default \ default\ template \ mymodule \ test.phtml 2012-09-06T09:40:55 + 00:00 DEBUG(7):E:\ webserver \ xampp \ htdocs \ magento \ app \ design \ frontend \ default \ default \ template \ mymodule \ test.phtml 2012-09-06T09:40:55 + 00:00 DEBUG(7):E:\ webserver \ xampp \ htdocs \ magento \ app \ design \ frontend \ default \ default \ template \ mymodule \ test.phtml 2012-09-06T09:40:55 + 00:00 CRIT(2):無効なテンプレートファイル:frontend \ base \ default \ template \ mymodule \ test.phtml2012-09-06T09:40:56 + 00:00 DEBUG (7):E:\ webserver \ xampp \ htdocs \ magento \ app \ design \ adminhtml \ default \ default \ layout \ local.xml 2012-09-06T09:40:56 + 00:00 DEBUG(7):E: \ webserver \ xampp \ htdocs \ magento \ app \ design \ adminhtml \ default \ default \ layout \ local.xml 2012-09-06T09:40:56 + 00:00 DEBUG(7):E:\ webserver \ xampp \ htdocs \ magento \ app \ design \ adminhtml \ default \ default \ layout \ local.xml
このようにモデルメソッドを変更した場合(フロントエンドへの参照をコメントアウト):
class My_Mymodule_Model_Sample Mage_Core_Model_Abstract
{
public function doSomething()
{
$templatePath = 'mymodule' . DS . 'test.phtml';
$output = Mage::app()->getLayout()
->createBlock("core/template")
//->setData('area','frontend') // <--removed
->setTemplate($templatePath)
->toHtml();
//write $output in HTML file
}
//...
}
この情報はsystem.logファイルで取得します。
2012-09-06T09:44:46 + 00:00デバッグ(7):E:\ webserver \ xampp \ htdocs \ magento \ app \ design \ adminhtml \ default \ default\ template \ mymodule \ test.phtml 2012-09-06T09:44:46 + 00:00 DEBUG(7):E:\ webserver \ xampp \ htdocs \ magento \ app \ design \ adminhtml \ default \ default \ template \ mymodule \ test.phtml 2012-09-06T09:44:46 + 00:00 DEBUG(7):E:\ webserver \ xampp \ htdocs \ magento \ app \ design \ adminhtml \ default \ default \ template \ mymodule \ test.phtml 2012-09-06T09:44:46 + 00:00 CRIT(2):無効なテンプレートファイル:adminhtml \ base \ default \ template \ mymodule \ test.phtml2012-09-06T09:44:47 + 00:00 DEBUG (7):E:\ webserver \ xampp \ htdocs \ magento \ app \ design \ adminhtml \ default \ default \ layout \ local.xml 2012-09-06T09:44:47 + 00:00 DEBUG(7):E: \ webserver \ xampp \ htdocs \ magento \ app \ design \ adminhtml \ default \ default \ layout \ local.xml 2012-09-06T09:44:47 + 00:00 DEBUG(7):E:\ webserver \ xampp \ htdocs \ magento \ app \ design \ adminhtml \ default \ default \ layout \ local.xml
Magentoは現在有効になっているテーマを気にせず、ベーステーマでテンプレートを検索しているようです。どのテンプレートを使用すべきかをMagentoに「伝える」方法はありますか?