如何从magento 1模板调用块方法

时间:2014-07-30 10:17:09

标签: php xml magento templates

我是magento的新手并且总是有问题。

目前,我设法添加了订阅弹出消息,并希望将子块添加到我的主块。

代码:(我的自定义模块为My_Module

<reference name="before_body_end">
    <block type="newsletter/subscribe" name="newsletter_popup" as="newsletter_popup" template="popup/subscribe.phtml">
        <block type="Module/popup_newsletter" name="newsletter11" />
    </block>
</reference name="before_body_end">

并在subscribe.phtml中尝试以下内容:

var_dump($this->getChildHtml('newsletter11'))

但结果是:

  

的字符串(0)&#34;&#34;

我也尝试以这种方式从模板加载块:

var_dump($this->getLayout()->createBlock('module/popup_newsletter'));

但结果为boolean(false).

我想要做的是从子块(Newsletter.php)中调用一个方法,然后输出一些文本,这个块现在有这两种方法:

puplic function test(){
    return 'this is test';
}

public function _toHtml()
{
    return test();
}

我无法看到我的错误。

任何人都可以帮助我,谢天谢地,我不知道您是否需要更多代码发布。如果您需要,请告诉我

提前致谢。

更新 config.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<config>
    <modules>
        <My_Module>
            <version>1.0.1</version>
        </My_Module>
    </modules>

    <global>
        <models>
            <my_module>
                <class>My_Module_Model</class>
            </my_module>
        </models>
        <helpers>
            <my_module>
                <class>My_Module_Helper</class>
            </my_module>
        </helpers>
        <blocks>
            <my_module>
                <class>My_Module_Block</class>
            </my_module>
        </blocks>
    </global>
<frontend>
    <routers>
        <My_Module>
            <use>standard</use>
            <args>
                <module>My_Module</module>
                <frontName>my</frontName>
            </args>
        </My_Module>
    </routers>
    </frontend>

4 个答案:

答案 0 :(得分:3)

在模板(phtml)文件中创建块的对象。请尝试以下代码

$customBlock = $this->getLayout()->getBlock('block_name'); // You can use newsletter11 in that block_name

调用阻止功能

echo $customBlock->test();

答案 1 :(得分:2)

<?php echo $this->getLayout()
            ->createBlock('cms/block')
            ->setBlockId('seo-homepage')
            ->toHtml();
?>

其中seo-homepage是您的静态块标识符

答案 2 :(得分:2)

这对我有用

$ customBlock = $ this-&gt; getLayout() - &gt; getBlockSingleton(&#39; block-class-name&#39;);

答案 3 :(得分:0)

你可以简单地添加块

$ this-&gt; getLayout() - &gt; createBlock('路径/文件路径')