Php Magento模块-覆盖控制器,添加模板

Php Magento模块-覆盖控制器,添加模板,php,magento,e-commerce,Php,Magento,E Commerce,我目前正在处理Magento扩展,我已经覆盖了一个核心控制器,它工作得很好 我现在向控制器添加了一个新操作。问题是,每当我调用该操作时,都会生成一个空白页。如果我回显某个内容,它将正确显示 因此,我深入研究了客户模块和控制器的核心。我在那里看到像indexAction()这样的方法以这种方式实现布局: <?php public function indexAction() { $this->loadLayout(); $this->_initLayoutMessages

我目前正在处理Magento扩展,我已经覆盖了一个核心控制器,它工作得很好

我现在向控制器添加了一个新操作。问题是,每当我调用该操作时,都会生成一个空白页。如果我回显某个内容,它将正确显示

因此,我深入研究了客户模块和控制器的核心。我在那里看到像
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();
}

在一个StackOverflow帖子中涵盖整个Magento布局系统有点过分,但是您应该能够通过以下内容实现您想要的

    $block = $this->getLayout()->createBlock('Mage_Core_Block_Text');
    $block->setText('<h1>This is a Test</h1>');
    $this->getLayout()->getBlock('content')->append($block);
$block=$this->getLayout()->createBlock('Mage\u Core\u block\u Text');
$block->setText(“这是一个测试”);
$this->getLayout()->getBlock('content')->append($block);
从上面开始,你应该能够建立你所需要的。其思想是创建自己的块,然后将它们附加到布局中的现有块。理想情况下,您可以创建自己的块类来实例化(而不是Mage_Core_block_Text),并使用它们的内部模板机制加载phtml文件(将HTML生成与代码生成分离)

如果你对学习布局系统的内部工作方式感兴趣,你可能会比从我写的主题开始做得更糟