我试图找到解决方案,但没有结果 . 我的任务是编写模块 . 它应该在现有块中插入一些html .
我注意到当我使用layout .xml文件时,我可以将我的块插入到某些引用中
<reference name="product.info">
<block type='googlethis/link' name="googlethis"
template="catalog/product/googlethis.phtml"/>
</reference>
我的街区也显示出来 .
在其他情况下,我应该调用 getChildHtml()
方法,这是不好的,因为它使更改模板.phtml文件 .
那么有没有办法将我的phtml块插入 any 其他phtml块而不调用 getChildHtml()
?
7 回答
有一种方法可以做到这一点,虽然它不是一个完全优雅的解决方案 . 它在大多数情况下都会起作用,并且偶尔也证明是有用的 .
基本上,我们的想法是在布局XML中替换要在块之前/之后渲染块的块,将块作为子块放在块中,然后在它之前/之后渲染它的输出 .
因此,假设您想要在购物车详细信息页面上的总计块之前输出一个块,您可以在扩展程序的layout.xml中执行以下操作
然后在您的template.phtml文件中,您将拥有:
正如我所说,这不适合所有情况,并不是非常优雅,但确实有效 .
乔恩
不,没有通用的方法将块添加到任何其他块 . 偶尔为你工作的原因是有一些块类型只是枚举它们的子节点(
core/text_list
是其中之一),而一些模板手动执行相同的操作(使用$this->getChild()
) .如果要在不符合这些条件的块下添加块,则需要修改模板以回显该块 .
您可以尝试添加到xml - 以下方法 output="toHtml" - 将块放到父块但是...
它可能通过添加到xml - 以下方法 output="toHtml" - 将块放到父块
使用布局中的方法output =“toHtml”,块将在文档末尾处理 . 我测试过
标签html结束后,magento渲染了我的块
我相信你不能在没有显示模板的情况下输出一个块 . 因此,如果您在创建块时进行扩展,则需要在模板中调用它 . 不幸的是,这意味着有人可以在他们的网站上添加您的扩展程序,如果他们已经创建了自己的模板文件副本,其中添加了您的块,因为他们想要在他们的主题中修改它,那么您的块将不会显示在那里 . 他们必须弄清楚自己模块需要修改模板并将修改放在自己的模板中 .
如果向其添加
output="toHtml"
属性,则块可以输出自身而不在模板中调用,但正如其他一些人指出的那样,这将导致块在</html>
标记之后呈现 . 这是正常的,因为output="toHtml"
是使root块工作的原因 . 根块不能包含在模板中,因为它没有父项,因此它使用output="toHtml"
属性并使其出现 . 这是有效的,因为当Magento渲染其布局(构建页面的HTML)时,它调用Mage_Core_Model_Layout类的getOutput()方法,并且此方法实际上只获取具有输出参数的所有块并在页面1上逐个输出它们通常你应该只有2个这样的块,root和"core_profiler" . (是的,这意味着探查器将在关闭HTML标记后显示) .我找到了一个使用Observer的优雅解决方案,并在公司博客上写了一篇文章:http://www.fxplabs.com.br/blog/instanciando-blocos-em-qualquer-lugar-magento/
英语翻译:
http://translate.google.com/translate?sl=pt&tl=en&js=n&prev=_t&hl=pt-BR&ie=UTF-8&eotf=1&u=http%3A%2F%2Fwww.fxplabs.com.br%2Fblog%2Finstanciando-blocos-em-qualquer-lugar-magento%2F