如何在Magento中的其他目录/页面中访问$ this-> getChildHtml()等方法?

时间:2013-11-06 21:09:05

标签: php oop magento

我想要做的就是移动一个搜索框。此搜索框当前显示在标题中,紧挨着徽标,并由以下代码生成:

<?php echo $this->getChildHtml('topSearch') ?>

/app/design/frontend/MYTHEME/default/template/page/html/header.phtml

中的

我希望此搜索框与导航链接一致,导航链接位于另一个目录中的top.phtml。但是当我使用代码时

<?php echo $this->getChildHtml('topSearch') ?>

搜索框不会出现。我理解这是因为$this的含义已经改变,但我不明白的是如何显示搜索框?我应该用{<1}}替换什么?

我尝试用$this替换它,因为这是header.phtml中Mage_Page_Block_Html_Header的定义,但无济于事。任何人都可以指出我正确的方向,或者在$this的定义发生变化后提供关于我如何访问方法的解释?

1 个答案:

答案 0 :(得分:2)

您需要进行布局更新并将block topSearch包含到包含top.phtml的块中。 查看app / design / frontend /.../ layouts / ... xml文件,查找如何声明topSearch,然后查找声明使用top.phtml模板的块的位置。然后移动topSearch块作为顶部块的子节点。我的意思是像这样添加layout xml update:

<default>
    <reference name="catalog.topnav">
        <block type="core/template" name="top.search" as="topSearch" template="catalogsearch/form.mini.phtml"/>
    </reference>
</default>

另一种解决方案是在模板中尝试下一步:

echo $this->getLayout()->getBlock('top.search')->toHtml()

如果它不起作用,那么在布局topSearch块中找到并尝试在块名称而不是别名的代码中使用。

您可以在此处详细了解Magento视图级别:http://www.magentocommerce.com/wiki/4_-_themes_and_template_customization/0_-_theming_in_magento/designing-for-magento

祝你好运!