【问题标题】:In Magento, can I add a static block to the header by xml only?在 Magento 中,我可以仅通过 xml 将静态块添加到标题中吗?
【发布时间】:2012-10-31 13:02:23
【问题描述】:

我正在尝试尽可能仅使用 local.xml 自定义主题。我想在不修改 header.phtml 的情况下向标题添加一个静态块。此代码适用于内容区域,但不适用于标题:

<default>
    <reference name="content">
        <block type="cms/block" name="how-it-works-button">
            <action method="setBlockId"><block_id>how-it-works</block_id></action>
        </block>
    </reference>
</default>

有人知道为什么吗?我认为我需要的只是将“内容”更改为“标题”,但是当我这样做时没有任何显示。

感谢您的帮助!

【问题讨论】:

    标签: magento


    【解决方案1】:

    content 块是一个特殊的块,称为 core/text_list 块(PHP 类 Mage_Core_Block_Text_List)。这些块将自动渲染出任何添加到它们的子块。

    另一方面,header 块是 page/html_header 块(PHP 类 Mage_Page_Block_Html_Header)。该块类继承自Mage_Core_Block_Template,使其成为core/template 块。模板块将在其对应的phtml 模板请求块时呈现子块。因此,通过将块添加到标题中,您只完成了所需工作的一半。 您需要创建一个自定义phtml 模板

    执行此操作的最简单方法(发布1.4.1.1 是在您自己的主题中创建一个文件

    template/page/html/header.phtml
    

    然后在这个文件的最后加上

    <?php echo $this->getChildHtml('how-it-works-button'); ?>
    

    假设您已经通过布局 xml 向标题块添加了一个块,这应该会呈现您的模板。

    【讨论】:

    • 谢谢,我现在明白了。正如另一条评论所建议的那样,我尝试将 output="toHtml" 添加到块中,但这只会导致内容出现在页面的最底部。我现在看到这是因为 Magento 没有将 html 锚定到的模板。感谢您的详细解释。
    【解决方案2】:

    请试试这个

    <?php echo $this->getLayout()->createBlock('cms/block')->setBlockId('how-it-works')->toHtml() ?>
    

    这个代码在header.phtml

    【讨论】:

      【解决方案3】:

      在块标签中添加 output="toHtml"。我认为仅此而已。

      【讨论】:

      • 这正是我一直在寻找的东西。但是,当我使用它时,静态块出现在页面底部,甚至在页脚下方。 Alan Storm 的评论让我明白了为什么会这样,但感谢您的有用实验!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多