Magento布局XML不实例化块

时间:2013-12-16 16:38:32

标签: magento

我已经习惯了这一点,我尝试了各种网站的各种不同的价值观和几本关于这个主题的电子书。完全缺乏任何相似性,这使得这比我认为的更难。

基本上我无法使用content.phtml覆盖主模板中的content部分。我通过强制它通过控制器完成它:

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

但我觉得这使我的模块不灵活,并使部分配置变得冗余和误导。

我正在使用一个名为Company_AdvSearch_Block_Results的块,它扩展了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),以便他们可以访问相同的数据?
  3. 更新

    我遇到了另一个问题。插入此块后,引用的组件成功消失。

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

    现在,在评论此块甚至从服务器删除文件后,我无法让这些部分回到此页面。它似乎完全忽略了XML文件(禁用了正常的缓存和编译器缓存)。

1 个答案:

答案 0 :(得分:0)

我自己解决了这个问题。清单:

  1. 确保您可以从控制器实例化块。如果不能解决config.xml
  2. 的问题
  3. 确保正在使用正确的句柄(布局XML文档中的包装元素)(我的不是),并且其他句柄未运行以覆盖其任何更改。将此行添加到控制器以获取句柄列表:

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

  4. 就我而言,团队中的其他人已经从基本模板中删除了组件,但没有让我知道。确保首先在模板中存在已删除的组件。

  5. 确保通过System > Configuration > Advanced
  6. 中的控制面板实际启用了您的模块

    当前的工作配置:

    文件: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>