代码之家  ›  专栏  ›  技术社区  ›  phidah

Magento模块-重写控制器,添加模板

  •  3
  • phidah  · 技术社区  · 16 年前

    我目前正在处理一个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();
    }
    

    我把它转移到我自己的操作中,现在布局被正确呈现。现在,关于这个问题:

    无论我进入什么 ->createBlock('...') 调用,内容区域中不呈现任何内容。

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

    我试着在/design/frontend/base/default/layout/myaddon.xml中处理XML文件,但不能真正让它工作。

    1 回复  |  直到 16 年前
        1
  •  6
  •   Alana Storm    16 年前

    在单个stackoverflow post中覆盖整个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 我就这个问题写过信。