Php Magento:如何在控制器中动态更改默认模板

Php Magento:如何在控制器中动态更改默认模板,php,ajax,magento,Php,Ajax,Magento,示例:名为ajaxhandlerController的控制器 它可以接收多种ajax请求类型, 每种类型在布局xml中都应该有单独的块 在ajaxhandler索引的布局中,我将编写 <mymodule_ajaxhandler_index> <block some block></block> </mymodule_ajaxhandler_index> 如何从索引更改为保存(例如,如果存在$request['type']=

示例:名为ajaxhandlerController的控制器 它可以接收多种ajax请求类型, 每种类型在布局xml中都应该有单独的块

在ajaxhandler索引的布局中,我将编写

  <mymodule_ajaxhandler_index>
      <block some block></block>
  </mymodule_ajaxhandler_index>

如何从索引更改为保存(例如,如果存在$request['type']==“save”);所以我可以用

  <mymodule_ajaxhandler_save>

我会忘记布局XML。只需实例化一个Core_Block_Html_模板,并根据收到的请求类型使用setTemplate方法将正确的模板分配给

$html = $this->getLayout()
        ->createBlock('core/template')
        ->setTemplate('your/template.phtml')
        ->toHtml();

我尝试过这样做,但是使用它并没有经过模块/块代码链。因此,结果是一个空模板块。虽然使用layout.xml中的内容可以很好地工作,但我为save制作了一个新的控制器,它正确地删除了模板。有什么建议吗?你有没有重复$html hehe:)是的,我当然有(;在你回答之前我已经尝试过这个方法,我所说的空块是指数据中的空块。我希望它显示的是“你选择了XX”当我使用相应的布局xml时。它正确显示,当我使用create block时,它只显示没有数据的块。在我看来,它没有使用块的父方法。我需要进一步了解,您是否有一个块类,它为您提供了要在模板中显示的数据。在这种情况下,假设您有这个s_Block_类扩展Mage_Core_Bloack_模板放入将返回XX值的方法并在模板中简单调用该方法,因为模板中的$this将引用您的类[this_Is_Block_Class]。是的,模板有这样的块。我现在做了一个测试,我放入echo get_类($this);在模板中以及使用createblock时会发生什么,它显示Mage_Core_Block_模板,而使用layout.xml时,它会正确显示我的块类名。我尝试了$this->getLayout()->getBlock(“mymodule/blockname”)或createblock(“mymodule/blockname”)