1

我有 2 个站点。 www.xxx.com&www.yyy.com

我有一个 CakePHP 解决方案www.xxx.com,它工作正常。

我现在想让站点www.yyy.com使用与www.xxx.com. 但它是拥有完全不同的 CTP 和 CSS。我当然可以将全部内容复制到其中,www.yyy.com但我需要维护 2 组代码。我只想维护 2 组不同的 CTPS 和 CSS。

所以问题是:

  1. 您可以将控制器和视图拆分为 2 个不同的 URL 吗?
  2. 假设 1 的答案是肯定的。然后你可以有 2 个不同的站点使用相同的控制器和数据库,但显示完全不同的视图和 CSS?
  3. 根据您的经验,在这样做之前我应该​​考虑什么?

谢谢。

4

1 回答 1

0

您的问题与需要桌面版和移动版的网站非常相似。您可以研究用于此的解决方案。

我们通过创建一个 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,则使用子目录“桌面”中的视图/布局而不是默认视图/布局。您可以使用同一系统为 2 个域创建单独的视图/布局。

我们通过覆盖 render() 而不是使用有时也建议的 afterFilter() 来做到这一点。我忘记了真正的原因,但知道这是因为我们无法像我们想要的那样使用 afterFilter() ;-)

于 2013-04-17T12:37:27.883 回答