【问题标题】:Zend default view script name switchZend 默认视图脚本名称切换
【发布时间】:2012-12-08 22:46:56
【问题描述】:

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

我们以这个动作/my_module/my_controller/my_action为例。

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

但在我的控制器或其他地方,我想在my_action_mobile.phtml 之类的东西上覆盖默认视图文件my_action.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,但它禁用了我的主布局 - 我不想要这个 - 而且感觉它不能正确处理动作视图助手。 (在另一个视图中呈现)

如果有任何建议,我将不胜感激。谢谢!

【问题讨论】:

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


    【解决方案1】:

    关于这个主题的信息非常多。对于初学者,请通过http://static.zend.com/topics/Mobile-web-app-with-ZF.pdf

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-15
        • 1970-01-01
        • 1970-01-01
        • 2011-11-27
        • 1970-01-01
        • 1970-01-01
        • 2013-10-11
        • 1970-01-01
        相关资源
        最近更新 更多