编程语言
首页 > 编程语言> > php – Magento模块 – 覆盖控制器,添加模板

php – Magento模块 – 覆盖控制器,添加模板

作者:互联网

我目前正在研究Magento扩展,我已经覆盖了一个核心控制器,它工作正常.

我现在已经向我的控制器添加了一个新动作.问题是每当我调用动作时都会产生一个空白页面.如果我回应一些东西,它会正确显示.

因此,我挖掘了Customer模块和控制器的核心.我在那里看到像indexAction()这样的方法以这种方式实现布局:

<?php
public function indexAction()
{
  $this->loadLayout();
  $this->_initLayoutMessages('customer/session');
  $this->_initLayoutMessages('catalog/session');

  $this->getLayout()->getBlock('content')->append(
      $this->getLayout()->createBlock('customer/account_dashboard')
  );
  $this->getLayout()->getBlock('head')->setTitle($this->__('My Account'));
  $this->renderLayout();
}

我将此转移到我自己的动作,现在正确地呈现了布局.现在提问:

无论我进入 – > createBlock(‘…’)调用,都不会在内容区域中呈现任何内容.

如何指定我自己的块的位置作为页面内容呈现,同时仍然使用布局进行装饰?

我试图摆弄/design/frontend/base/default/layout/myaddon.xml中的xml文件,但实际上无法使其正常工作.

解决方法:

在单个StackOverflow帖子中覆盖整个Magento布局系统有点多,但您应该能够通过以下方式实现您想要的效果.

    $block = $this->getLayout()->createBlock('Mage_Core_Block_Text');
    $block->setText('<h1>This is a Test</h1>');
    $this->getLayout()->getBlock('content')->append($block);

从上面开始,你应该能够建立你需要的东西.您的想法是创建自己的块,然后将它们附加到布局中的现有块.理想情况下,您正在创建自己的块类来实例化(而不是Mage_Core_Block_Text),并使用其内部模板机制加载phtml文件(将HTML生成与代码生成分开).

如果你有兴趣了解布局系统如何工作的内部结构,那么你可能会比我在这个主题上写的an article更糟糕.

标签:php,magento,e-commerce
来源: https://codeday.me/bug/20190827/1741409.html