2013-12-16 59 views
0

我已經繞過這一點,我試過各種不同的值,從各種網站和幾個電子書的主題。完全沒有任何一致性的表象使這比我覺得應該更加困難。Magento佈局XML沒有實例化塊

基本上我不能讓它使用content.phtml覆蓋主模板中的content部分。我已經迫使它通過控制器像這樣做了:

$content = $this->getLayout()->createBlock(...); 
$this->getLayout()->getBlock('content')->append($content); 

但我覺得,這使得我的模塊不靈活,並使得部分配置冗餘和誤導。

我正在使用一個名爲​​的塊,它擴展了Mage_Core_Block_Template

文件:config.xml中

<?xml version="1.0"?> 
<config> 
    <modules> 
     <Company_AdvSearch> 
      <version>0.1.0</version> 
     </Company_AdvSearch> 
    </modules> 
    <frontend> 
     <routers> 
      <advsearch> 
       <use>standard</use> 
       <args> 
        <module>Company_AdvSearch</module> 
        <frontName>advsearch</frontName> 
       </args> 
      </advsearch> 
     </routers> 
     <layout> 
      <updates> 
       <advsearch module="Company_AdvSearch"> 
        <file>advsearch.xml</file> 
       </advsearch> 
      </updates> 
     </layout> 
    </frontend> 
    <global> 
     <blocks> 
      <advsearch> 
       <class>Company_AdvSearch_Block</class> 
      </advsearch> 
     </blocks> 
    </global> 
</config> 

文件:advsearch.xml

<?xml version="1.0" encoding="UTF-8"?> 
<layout version="0.1.0"> 
    <advsearch_index_index> 
     <reference name="head"> 
      <action method="setTitle"> 
       <title>Advanced Search</title> 
      </action> 
     </reference> 
     <reference name="root"> 
      <action method="setTemplate"> 
       <template>page/2columns-left.phtml</template> 
      </action> 
     </reference> 
     <reference name="content"> 
      <block type="advsearch/results" name="advsearch" template="advsearch/content.phtml"/> 
     </reference> 
    </advsearch_index_index> 
</layout> 

所以:

  1. 我將如何得到它的實際更新content佈局部分?
  2. 如何使用我的模塊更新其他部分(即left),以便他們可以訪問相同的數據?

更新

我碰到的另一個問題。插入此塊後,引用的組件成功消失。

<reference name="left"> 
    <remove name="catalog.compare.sidebar"/> 
    <remove name="left.reports.product.viewed"/> 
    <remove name="catalog.product.related"/> 
</reference> 

現在,在評論此塊,甚至從服務器刪除文件後,我無法讓這些部分回到這個頁面。它似乎完全忽略了XML文件(正常緩存和編譯器緩存均被禁用)。

+0

你嘗試簡單地調用此2線你的行爲'$ this-> loadLayout(); $ this-> renderLayout();' –

+0

我想我應該指出這一點。是的,他們在那裏。 –

回答

0

我自己解決了這個問題。清單:

  1. 確保您可以從控制器實例化您的塊。如果它不能解決您的問題​​3210。
  2. 確保正在使用正確的句柄(佈局XML文檔中的包裝元素)(我的不是),並且其他句柄未運行以覆蓋其任何更改。從基本模板

    var_dump(Mage::getSingleton('core/layout')->getUpdate()->getHandles());

  3. 在我的情況下,有人在其他球隊已經刪除組件,而不讓我知道:這行添加到您的控制器獲得句柄的列表。確保首先移除的組件實際存在於模板中。

  4. 確保您的模塊實際上是通過System > Configuration > Advanced中的控制面板啓用的。

當前工作的配置:

文件:config.xml中

<?xml version="1.0"?> 
<config> 
    <modules> 
     <Company_AdvSearch> 
      <version>1.0</version> 
      <depends> 
       <Mage_Page/> 
       <Mage_Catalog/> 
      </depends> 
     </Company_AdvSearch> 
    </modules> 
    <frontend> 
     <routers> 
      <company_advsearch> 
       <use>standard</use> 
       <args> 
        <module>Company_AdvSearch</module> 
        <frontName>advsearch</frontName> 
       </args> 
      </company_advsearch> 
     </routers> 
     <layout> 
      <updates> 
       <company_advsearch module="Company_AdvSearch"> 
        <file>advsearch.xml</file> 
       </company_advsearch> 
      </updates> 
     </layout> 
    </frontend> 
    <global> 
     <blocks> 
      <company_advsearch> 
       <class>Company_AdvSearch_Block</class> 
      </company_advsearch> 
     </blocks> 
     <helpers> 
      <company_advsearch> 
       <class>Company_AdvSearch_Helper</class> 
      </company_advsearch> 
     </helpers> 
    </global> 
</config> 

文件:advsearch.xml

<?xml version="1.0" encoding="UTF-8"?> 
<layout version="0.1.0"> 
    <company_advsearch_index_index> 
     <reference name="head"> 
      <action method="setTitle"> 
       <title>Advanced Search</title> 
      </action> 
     </reference> 
     <reference name="root"> 
      <action method="setTemplate"> 
       <template>page/2columns-left.phtml</template> 
      </action> 
     </reference> 
     <reference name="left"> 
      <block type="company_advsearch/results" name="search_criteria" as="left" template="advsearch/left.phtml" before="-"/> 
     </reference> 
     <reference name="content"> 
      <block type="company_advsearch/results" name="search_results" as="content" template="advsearch/content.phtml"/> 
     </reference> 
    </company_advsearch_index_index> 
</layout>