【问题标题】:how to call block method from magento 1 template如何从magento 1模板调用块方法
【发布时间】:2014-09-21 22:40:51
【问题描述】:

我是 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)""

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

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>

【问题讨论】:

  • 你需要在 phtml 文件中调用 Module/popup_newsletter 块函数 test() 吗?

标签: php xml magento templates


【解决方案1】:

在模板 (phmtl) 文件中为块创建对象。试试下面的代码

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

调用块函数

echo $customBlock->test();

【讨论】:

  • 谢谢你的回复。我试过这个:var_dump($this->getLayout()->getBlock('module/popup_newsletter'));但结果是 bool(false) .. 我现在不知道为什么
  • 您想调用该块中的某个函数对吗?
  • 我的方块正在扩展 Mage_Core_Block_Abstract 对吗??
【解决方案2】:
<?php echo $this->getLayout()
            ->createBlock('cms/block')
            ->setBlockId('seo-homepage')
            ->toHtml();
?>

seo-homepage 是你的静态块标识符

【讨论】:

    【解决方案3】:

    这对我有用

    $customBlock = $this->getLayout()->getBlockSingleton('block-class-name');

    【讨论】:

      【解决方案4】:

      你可以简单地添加块

      $this->getLayout()->createBlock('路径/文件路径')

      【讨论】:

      • 没有得到你。你能给我举个例子还是把它应用到我发布的代码上
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-06
      • 1970-01-01
      • 1970-01-01
      • 2012-11-11
      • 2014-03-31
      • 2011-05-09
      • 1970-01-01
      相关资源
      最近更新 更多