[英]CakePhp - Splitting Views and Controllers over different URLS
我有2个网站。 www.xxx.com
和www.yyy.com
我在www.xxx.com
上有一个CakePHP解决方案,它工作正常。
我现在要使网站www.yyy.com
使用与www.xxx.com
相同的控制器和数据库。 但是它具有完全不同的CTP和CSS。 我当然可以将全部复制到www.yyy.com
但是然后我需要维护2套代码。 我只想维护2套不同的CTPS和CSS。
所以问题是:
谢谢。
您的问题与需要台式机和移动版本的网站非常相似。 您可以研究用于此的解决方案。
我们通过创建一个AppController来构建类似的东西,该AppController在beforeFilter()方法中设置了一个变量(在您的情况下检查请求域),并在render方法中使用此变量来选择要使用的布局和视图文件:
function render($action = null, $layout = null, $file = null) {
$view_file = false;
$layout_file = false;
// test for availability of layout does not work for null so set to default setting of null.
if ($layout === null) {
$layout = $this->layout;
}
// if not mobile: show desktop version.
if (!$this->is_mobile) {
$view_file = file_exists(VIEWS . $this -> name . DS . 'desktop/' . $file . '.ctp');
$layout_file = file_exists(LAYOUTS . 'desktop/' . $layout . '.ctp');
}
return parent::render($action, ($layout_file ? 'desktop/' : '') . $layout, ($view_file ? 'desktop/' : '') . $file);
}
这样,如果is_mobile为false,则使用子目录“ desktop”中的视图/布局而不是默认视图/布局。 您可以使用同一系统为2个域创建单独的视图/布局。
我们通过重写render()而不是使用有时也建议使用的afterFilter()来实现。 我忘记了真正的原因,但是知道那是因为我们无法像使用afterFilter()那样使它正常工作;-)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.