我不知道你想達到什麼目的。但是從你的問題來看,我有一種強烈的感覺,你試圖通過CMS頁面設置你自己的模板。如果是這樣,讓我們來分析爲什麼你的塊沒有顯示任何輸出。
你塊定義是這樣的
{{block type="YourModule_Custom/test" my_param1="value 1" another_param="value 2"}}
沒有與此確定指標沒有問題。但是,如果您將name
添加到您的區域,這很好。如果您設置template
以及那個,那麼您不需要任何後端代碼來爲您的塊設置模板。這是你的塊應該是這樣的
{{block type="YourModule_Custom/test" name="test.block" template="test.phtml"}}
現在,當Magento的遇到這種情況,會發現你的塊,組描述的名字在該塊(供以後參考此name
將被使用。然而,它是不是在這個相關大小寫),將指定的模板設置爲您的塊,然後渲染該模板中的內容。
所以你應該有一個你指定的類型塊。你現在擁有它(你不需要那裏面的那個_toHtml()
)。除此之外,您需要一個模板文件test.phtml
並且它應該位於app/design/frontend/<your_package>/<your_theme>/template/test.phtml
的位置。你現在沒有這個文件。因此,創建它並在該文件中添加此內容
<p><?php echo "I am here. Can you see me ?"; ?></p>
現在檢查您的CMS頁面輸出。你可以看到這些內容。不是嗎?
所以現在你要做的是,不是將模板和模塊定義一起設置,而是嘗試通過你的模塊進行設置。這是錯的嗎 ?顯然,沒有。有些情況下,我們需要這樣做。我假設你真的需要它。因此,讓我們再次以這種形式重新劃分我們的街區。
{{block type="YourModule_Custom/test" name="test.block"}}
嗯。在這裏,我們現在沒有爲此塊設置模板。因此,您可以通過塊定義進行設置。您使用了_toHtml()
方法。
<?php
class YourModule_Custom_Block_Test extends Mage_Core_Block_Abstract
{
protected function _toHtml()
{
echo 'TEST';
$this->getChildHtml('header');
return $html;
}
}
?>
此方法用於設置模板,然後呈現內容。所以你在正確的軌道上。但這裏的問題是,你沒有設置任何模板!加上你的方法返回一個變量$html
,它不包含任何東西。那麼我們應該通過_toHtml()
返回什麼?答案在於Mage_Core_Block_Template
。讓我們來看看在_toHtml()
定義
protected function _toHtml()
{
if (!$this->getTemplate()) {
return '';
}
$html = $this->renderView();
return $html;
}
基本上這樣做是什麼,它會檢查模板是否被設置,如果不返回任何結果。如果它呈現它。這意味着,顯然我們需要設置一個模板。所以你的塊應該看起來像這樣。
<?php
class YourModule_Custom_Block_Test extends Mage_Core_Block_Template
{
protected function _toHtml()
{
$this->setTemplate('test.phtml');
$html = parent::_toHtml();
return $html;
}
}
請注意,您的塊從Mage_Core_Block_Template
而從Mage_Core_Bock_Abstract
延伸。這是因爲setTemplate()
方法在Mage_Core_Block_Template
類中定義。在_toHtml()
中,我們正在設置我們的模板,然後將其餘部分留給我們的父塊。現在檢查您的CMS頁面中是否顯示test.phtml
中的內容。它是對的?
非常感謝你爲你詳細解答,我很欣賞這一點。我現在要試一試。 – BenjaminFranklin
此解決方案不起作用。我在您所描述的目錄中創建了phtml文件,並且已將新的{{block}}代碼添加到CMS頁面,但「我在這裏」文本未顯示在CMS頁面上。請幫忙!再次感謝! – BenjaminFranklin
它應該工作。因爲我在這裏回答之前已經測試過這些代碼。你能告訴我你的配置文件嗎? –