我正在尝试加载单独的移动视图并遇到问题。 我可以让我的移动布局工作但不是视图。
我使用这个问题作为参考,我正在运行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 ); } }
答案 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 ); } }