cakephp无法加载移动视图

时间:2012-11-23 22:31:25

标签: cakephp mobile cakephp-2.1

我正在尝试加载单独的移动视图并遇到问题。 我可以让我的移动布局工作但不是视图。

我使用这个问题作为参考,我正在运行cakephp 2.1 CakePHP website mobile version

我不确定如何构建我的移动视图?

是/app/View/name/mobile/view.ctp还是       /app/View/mobile/name/view.ctp或其他。我一直在试图解决这个问题。有什么建议。

我的AppController.php

过滤前


    public function beforeFilter() {    


        /* mobile layout testing */

        if ($this->request->isMobile()){
            $this->is_mobile = true;
                $this->set('is_mobile', true );
                $this->autoRender = false;
        } else {
             $this->set('is_mobile', false );
        }

    }

过滤后(缩短)


function afterFilter() {
    $view_file = file_exists(
                            "/var/www" . 
                            $this->webroot .  
                            "app" . DS .  
                            'View' . DS . 
                            $this->name . DS . 
                            'mobile/' . 
                            $this->action . 
                            '.ctp' 
                            );

$layout_file = file_exists( 
                            "/var/www" . 
                            $this->webroot  . 
                            "app" . DS . 
                            'View' . DS . 
                            'Layouts'  . DS . 
                            'mobile/' . 
                            $this->layout . 
                            '.ctp' 
                            ); 

if($view_file || $layout_file){         
 $this->render(
             $this->action, 
             ($layout_file?'mobile/':'').$this->layout,
             ($view_file?'mobile/':'').$this->action
              );
 }
}   

2 个答案:

答案 0 :(得分:1)

在CakePHP的早期版本中,$ this-> render()有三个参数,但在2.x及更高版本中,它只有2:

用于Controller的CakePHP 1.3 API render() - 有3个参数:

http://api13.cakephp.org/class/controller#method-Controllerrender

用于Controller render()的CakePHP 2.0 API - 只有2个参数:

http://api20.cakephp.org/class/controller#method-Controllerrender

由于这一点,仅使用2个参数的答案比使用3的尝试效果要好得多。:)

(CakePHP Book仍然错误地指出有3个参数,所以 - 我当然不会因为你提到的尝试而责怪你 - 必须更详细地查找它才能找到它)

答案 1 :(得分:0)

我最终在下面这样做了。我的视图文件夹现在检查移动文件夹并加载视图(如果存在)。

    function afterFilter() {
        // if in mobile mode, check for a valid view and use it
      if (isset($this->is_mobile) && $this->is_mobile) {

        $has_mobile_view_file = file_exists( ROOT . DS . APP_DIR . DS . 'View' . DS . $this->name . DS . 'mobile' . DS . $this->action . '.ctp' );
        $has_mobile_layout_file = file_exists( ROOT . DS . APP_DIR . DS . 'View' . DS . 'Layouts' . DS . 'mobile' . DS . $this->layout . '.ctp' );

        $view_file = ( $has_mobile_view_file ? 'mobile' . DS : '' ) . $this->action;
        $layout_file = ( $has_mobile_layout_file ? 'mobile' . DS : '' ) . $this->layout;

        $this->render( $view_file, $layout_file );

  }
     }