我目前正试图更好地了解 block 在 Magento 中的工作原理。我查看了一些文件以获得更好的想法并且它有所帮助,但它们对于我目前有限的技能来说太复杂了而且我仍然没有正确理解正在发生的事情以及如何将它们实现到我的网站中。我意识到理解它们对于使用 Magento 工作是必不可少的,所以我想我会列出要尝试和实现的事情列表:
显示一个 block (完成)
显示 block 和子 block
在 magento 布局中显示一个 block
在 magento 布局的页面上放置一个 block
了解最常用的“类型”属性以及何时使用它们
到目前为止,我已经把 _index_index 命名空间/模块/etc/config.xml
<frontend>
....
<layout>
<updates>
<learningblocks>
<file>Namespace/Module/childblocks.xml</file>
<file>Namespace/Module/blocks.xml</file>
</learningblocks>
</updates>
</layout>
</frontend>
命名空间/模块/ Controller /IndexController.php
class Namespace_Module_IndexController
extends Mage_Core_Controller_Front_Action
{
public function indexAction()
{
$this->loadLayout('learningblocks')->renderLayout();
}
public function blocksAction()
{
$this->loadLayout('blocknode')->renderLayout();
}
}
前端/基础/默认/布局/命名空间/模块/blocks.xml
<layout>
<blocknode>
<block type="core/text" name="blocktest" output="toHtml" >
<action method="setText">
<args>some text to display on screen</args>
</action>
</block>
</blocknode>
</layout>
上面的代码按预期工作,并在白页上显示了字符串“some text to display on screen”。但这就是我所能做的,我无法将子 block 渲染到屏幕上,也无法在主题内显示任何内容,更不用说尝试在该主题内移动它了
以下是我似乎无法开始工作的尝试之一。为什么这不起作用?
前端/基础/默认/布局/命名空间/模块/childblocks.xml
<layout>
<abcde>
<block type="core/template" name="childblocks" output="toHtml" template="namespace/module/childblocks.phtml">
<block type="core/text" name="anyname">
<action method="setText">
<args>Some text to add to this page</args>
</action>
</block>
</block>
</abcde>
<learningblocks_index_index>
<update handle="abcde" />
</learningblocks_index_index>
</layout>
前端/基础/默认/模板/命名空间/模块/childblocks.phtml
<p>from the childblock.phtml page</p><?php $this->getChildHtml(); ?>
注意:我已经将命名空间和模块名称更改为更通用,希望它更易于阅读(它们的名称选择得不是很好)。
最佳答案
我知道这不是一个完整的答案,但它可能会帮助那些为同样的问题而苦苦挣扎的人。我没有深入探讨,因为我假设如果您正在寻找答案,您已经阅读了 THIS ARTICLE这涵盖了所有内容,我假设您遇到了与我相同的问题,即误解了您从本教程中学到的内容。
阅读此答案时请注意,我是 Magento 的新手,这里可能存在一些不准确之处,如果有,我相信有人会纠正我并进行相应编辑。
首先这是错误的
public function indexAction()
{
$this->loadLayout('learningblocks')->renderLayout();
}
应该是这样
public function indexAction()
{
$this->loadLayout()->renderLayout();
}
然后您必须将布局 xml 中的 learningblocks 节点映射到该操作 module_controller_action。这样做会在您的主题内的页面中显示该 block 。
所以渲染一个子 block
在你的 layout.xml 中添加这样的东西
<module_controller_action>
<reference name="content">
<block type="module/blockname" name="unique_name" output="toHtml" template="path/toyou/template.phtml" >
<block type="module/blockname" name="another_unique_name" output="toHtml" template="path/toyou/template.phtml" />
</block>
</reference>
</module_controller_action>
然后在你的模板文件中回显
$this->getChildHtml('another_unique_name')
如果您想从页面中删除 block ,请使用删除节点,例如
<remove name="right"/>
<remove name="left"/>
This page will offer a list of attributes that can be used老实说,我发现浏览 magento 文件比那个页面更有帮助
关于magento - 主题内的渲染 block 和子 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17725545/