2013-08-21 16 views
0

我正在關注Alan Storm的No_Frills_Magento_Layout。我有一個點,我不能按照什麼書這麼說我就這件事的另一種方法如何用createBlock調用文件

下面做工作,是書的方式,我得到一個錯誤

$layout = Mage::getSingleton(’core/layout’); 
$block = $layout->createBlock('ts_nofrills/helloworld', 'root'); 
echo $block->toHtml(); 

//Fatal error: Call to a member function createBlock() on a non-object in 
下面

是我的方式併產生一個.phtml文本

$main_block = new Ts_Nofrills_Block_Helloworld(); 
$layout = Mage::getSingleton(’core/layout’); 
$block = $layout->createBlock($main_block, 'root'); 
echo $block->toHtml(); 

我的問題是這本書延續了這個例子上,並通過從示例偏離,並做我的方式,我不覺得我學的全部潛力擴大。

我想我已經寫了第一個參數錯誤地讓magento在createBlock函數中識別它我在例子1中做了什麼錯誤?

我一直不願意把這個問題的原因有兩個:

1 - 我敢肯定的答案就在書(我不能,雖然找到它)

2 - 我敢肯定,這個問題已經被問放在這裏(我再次看了看,但不能找到它)

===編輯===

<global> 
    <blocks> 
     <Ts_Nofrills> 
      <class>Ts_Nofrills_Block</class> 
     </Ts_Nofrills> 
    </blocks> 
    .... 
</global> 

文件結構

  • TS
    • Nofrills
        • 的template.php
      • 控制器
        • IndexController。PHP
        • config.xml中

回答

1

往裏等/ config.xml中的全球節點,你應該有:

<blocks> 
     <ts_nofrills> 
      <class>Ts_Nofrills_Block</class> 
     </ts_nofrills> 
</blocks> 

當你想使用創建塊php或佈局xml,您必須使用節點etc/config.xml塊中的值作爲名稱空間,然後輸入/,然後在模塊分隔符內將文件路徑d用下劃線表示。

+0

感謝您回覆我的問題。我有配置設置這就是爲什麼示例二產生我的.phtml文件。我不明白的是爲什麼示例一生產和錯誤,而不是示例二。如果這是一個狡猾的配置問題,他們都會產生一個錯誤? – tony09uk

+0

不,他們不會產生錯誤,因爲在你的例子中你正在創建一個新對象,而在Alan的他使用Magento來創建該對象。我相信在你的情況下,Magento由於配置不知道從哪裏獲得塊類。 – Emi

+0

加載你的類'ts_nofrills/helloworld' Magento在config.xml中查找第一部分,名爲'ts_nofrills'的塊類,並且應該找到'Ts_Nofrills_Block',然後'/'變成'_'並且爆炸'_ _ '和'ucfirst'作爲explode數組中的每個元素,所以這個類變成'Ts_Nofrills_Block_Helloworld',並且可以在'app/code/local/Ts/Nofrills/Block/Helloworld.php裏找到' – Emi