Zend默认视图脚本名称开关

时间:2012-12-08 22:46:57

标签: zend-framework zend-view zend-layout

我想显示移动视图而不是普通视图脚本。

我们以此为例/ my_module / my_controller / my_action。

当我调用它时,根据一些标头处理,我知道用户代理是移动设备。 然后我将主要布局设置为特定于移动设备的布局。 我这样做,它工作正常:Zend_Layout::getMvcInstance()->setLayout('mobile');

但是在我的控制器或其他地方,我想覆盖my_action.phtml之类的默认视图文件my_action_mobile.phtml

考虑到我在某些观点中使用动作助手,我可以做到这一点:<?php echo $this->action("index", "index", "items")?>或者是我的一些行动我有这样的_forward:$this->_forward("index", "auth", "default");

我尝试使用setViewSuffix('mobile')并使用多个文件名变体:my_action.mobile.phtml或setViewSuffix('mobile.phtml')以及名为my_action.mobile.phtml和其他文件的文件,从而产生一个空白页面 - 没有错误,没有。 (我没有想法,因为它被设置为显示抛出的错误)

此外,我尝试过contextSwitching,但它禁用了我的主要布局 - 我不想要这个 - 而且感觉它没有正确处理动作视图帮助器。 (在另一个视图中呈现的视图)

我很感激任何苏打。谢谢!

2 个答案:

答案 0 :(得分:2)

您可以使用它来更改控制器的视图
$this->render('actionName');

或者,您也可以通过调用直接调用视图脚本 $this->renderScript('path/to/viewscript.phtml');

您可以从here获取有关render()和renderScript()方法的更多详细信息 检查此SO帖子Assigning Values to Views when using $this->renderScript

答案 1 :(得分:2)

有很多关于这个问题的信息。首先让你自己完成http://static.zend.com/topics/Mobile-web-app-with-ZF.pdf

简而言之,您应该使用ContextSwitch。

  1. 您创建了一个定义可用上下文和格式的插件 参数派生自Zend_Http_UserAgent。
  2. 在控制器中,您可以描述哪些操作符合这些上下文的条件。
  3. 为这些操作创建不同的视图。