帮酷LOGO
0 0 评论
  • 显示原文与译文双语对照的内容
文章标签:Silverstripe  模块  cms  
Multisites module for SilverStripe CMS

  • 源代码名称:silverstripe-subsites
  • 源代码网址:http://www.github.com/silverstripe/silverstripe-subsites
  • silverstripe-subsites源代码文档
  • silverstripe-subsites源代码下载
  • Git URL:
    git://www.github.com/silverstripe/silverstripe-subsites.git
  • Git Clone代码到本地:
    git clone http://www.github.com/silverstripe/silverstripe-subsites
  • Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/silverstripe/silverstripe-subsites
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
  • 子网站模块

    Build StatusScrutinizer Code Qualitycodecov

    简介

    managed MODULE 提供了从单一安装 SilverStripe。内容和资产之间运行多个网站的方便方法。

    有一个有用的方法可以认为,你有一个与全球总部和四个国家分支的业务。 子网站 MODULE 允许五个办公室使用单个SilverStripe安装,并且从总部流程中向分支中传递信息。 分支可以保存个人信息,网站模板也可以是不同的。

    所有用这里 MODULE 实现的内容分离应当被视为化妆品,不适合安全关键应用程序。 MODULE 对访问权限进行了一些控制,尤它的是在CMS的"页面"和"文件"区域,但它的他部分的分离较弱: 例如,给某人任何一个"角色和访问权限"将意味着该人可以能将他的/她的特权升级到全局管理员角色。

    有关用户文档,请参见:

    具有&限制

    插件功能:

    • 每个子网站都显示为来自用户的独立网站
    • 不必复制现有代码因为所有子网站使用与主站点相同的代码库
    • 你可以对每个子网站域名设置单独的权限
    • 能够将网页及其内容从主站点复制到子网站中
    • 创建子网站页面的翻译
    • 计划子网站页的发布
    • 在子网站之间共享数据库( 这意味着复制内容很容易)
    • 当从灾难中恢复时,使用 100个子网站创建一个新环境的副本要比启动 100个环境更容易。

    的限制:

    • 必须首先在服务器上设置每个子网站域 NAME,并且需要根据需要更新DNS记录。
    • 子网站不能使用不同的代码库作为主站点,它们本质上是绑定
    • 开发人员在子网站之间可以编辑的唯一代码是主题
    • CMS中子网站之间的分离需要看作化妆品,主要适用于CMS的"页面"和"文件"部分。
    • 所有子网站在同一进程空间和数据集中运行。 因这里,如果中断影响一个子网站,那么如果坏的代码或者硬件破坏了,数据,很可能会损坏。
      • 这里原则适用于应用程序错误。安全漏洞和高级别的流量
    • 当前不可能从单个子网站备份或者还原数据。
    • 在不同的子网站上开发不同的开发人员团队是很尴尬的,这主要是因为协作的层次。 它更适合于负责所有子网站的同一组开发人员。

    如果需要更多的代码。安全性或者性能隔离,那么考虑运行多个单独的安装( 比如。 在单独的服务器上)。

    要求

    • SilverStripe 4.x

    安装

    • 通过访问 http://<yoursite>/dev/build ( 你应该看到创建了一个 Subsite 表,其中包括) 创建必要的表。 你不需要为每个子网站运行这里命令。
    • 以管理员身份登录到 CMS。 你现在应该在主菜单上看到一个"子网站"条目,现在访问该部分。
    • 点击"添加子网站"按钮创建一个新子网站。
    • 创建子网站后,将看到一个"创建子网站域"按钮,按该按钮输入子站点的域或者子站点。 这将决定你网站的网址。 例如如果站点在 http://localhost/mysite 上运行,并且将子域设置为"子网站",则子网站可以在 http://subsite.localhost/mysite 上访问。
    • 转到CMS的"页面"部分。 在菜单上方的左上方,你将看到下拉列表,这是你安装子网站的前一个站点。 选择新子网站,并且网站内容树将被更改。 这个阶段应该是空的。
    • 添加页- 将它的标题改为"主页",它的网址段将更改为"主页"。 保存 页面。
    • 更新你的DNS并且如有必要,你的web server配置,以便你的子站点指向你的web server上的SilverStripe安装。 访问这里新子域你应该可以看到新的子网站主页。

    用法

    严格子域匹配

    MODULE 尝试提供合理的默认值,它的中将 example.comwww.example.com 视为同一域。 如果你想区分这些变化,请设置 Subsite::$strict_subdomain_matching 对于 true,这将不会影响通配符/Asterisk 检查,但除去默认子域的模糊性。

    权限

    组可以与一个或者多个子网站关联,在这种情况下,授予的page-和资产相关权限仅适用于该子网站。

    请注意,创建特定组并给权限与内容编辑和资产管理无关,将会导致该组成员升级。 这里给出了一个组"完全管理权限"或者一些"角色和访问权限",这种情况下,该组成员可以将自己添加到全局"管理员"组。

    应该认为子网站 MODULE 为界面级别的站点提供了便利,而不是管理同一CMS服务器上许多站点的紧密安全模型。

    访问创建的域

    在管理中创建子网站/域之后,可以通过以下方式检查子网站的总体功能

    
    http://your.primary-domain.com/subsite-metadata-url?SubsiteID=1
    
    
    
    

    如果你将SubsiteID悬停在子网站管理员搜索结果的"编辑"链接上,则在某些浏览器中是可见的。

    子网站特定主题

    http://www.silverstripe.com/themes/ 下载第二个主题,并将它的放在你的主题文件夹中。 打开管理员/子网站flush=1并从左下角的菜单中选择你的一个子网站。 你应该在子网站细节中看到一个主题下拉列表,它应该同时列出你的原始主题和新主题。 在下拉列表中选择新主题。 现在,这个子网站将使用与主站点不同的主题。

    子网站的可用主题限制

    并非所有的主题都适合或者适合所有子网站。 你可以选择限制主题的使用:

    mysite/_config。php

    
    :::php
    
    
    Subsite::set_allowed_themes(array('blackcandy','mytheme'));
    
    
    
    

    启用对数据服务器的子网站支持

    若要使你的DataObject子网站知道,请在你的DataObject上包含一个 SubsiteID。 比如:

    MyDataObject.php

    
    :::php
    
    
    private static $has_one = array(
    
    
     'Subsite' => 'Subsite'
    
    
    );
    
    
    
    

    在getCMSFields上包含当前SubsiteID作为隐藏字段,或者 updateCMSFields。 比如:

    MyDataObject.php

    
    :::php
    
    
    public function getCMSFields() {
    
    
     $fields = parent::getCMSFields();
    
    
     if(class_exists('Subsite')){
    
    
     $fields->push(new HiddenField('SubsiteID','SubsiteID', Subsite::currentSubsiteID()));
    
    
     }
    
    
     return $fields;
    
    
    }
    
    
    
    

    要将管理员gridfields限制为当前子网站记录,可以执行如下操作:

    MyAdmin.php

    
    :::php
    
    
    public function getEditForm($id = null, $fields = null){
    
    
     $form = parent::getEditForm($id, $fields);
    
    
    
     $gridField = $form->Fields()->fieldByName($this->sanitiseClassName($this->modelClass));
    
    
     if(class_exists('Subsite')){
    
    
     $list = $gridField->getList()->filter(array('SubsiteID'=>Subsite::currentSubsiteID()));
    
    
     $gridField->setList($list);
    
    
     }
    
    
    
     return $form;
    
    
    }
    
    
    
    

    为子网站中的自定义区域启用菜单支持

    默认情况下,自定义管理区域不会显示在子网站的菜单中。 并非所有管理员都适合或者适合在子网站内显示。 如果你的管理员有子网站支持,或者有意全局,则可以通过以下方式启用show在菜单中显示:

    mysite/_config。php

    
    :::php
    
    
    MyAdmin::add_extension('SubsiteMenuExtension');
    
    
    
    

    或者通过在你的管理员中定义subsiteCMSShowInMenu函数:

    MyAdmin.php

    
    :::php
    
    
    public function subsiteCMSShowInMenu(){
    
    
     return true;
    
    
    }
    
    
    
    

    子网站的public 显示

    默认情况下,如果设置了正确的主机映射,每个子网站都可以用于 public ( = 未登录)。 子站点可以标记为非公共设置,在这种情况下,只显示具有CMS权限的用户是否记录。 在发布之前,这对于创建和检查实时系统上的子网站非常有用。

    请注意,你需要在你自己的查询中手动进行筛选:

    
    $publicSubsites = DataObject::get(
    
    
     'Subsite',
    
    
     Subsite::$check_is_public? '"IsPublic"=1' : '';
    
    
    );
    
    
    
    

    为确保成员的登录状态被跨到子域,你还需要配置为所有子域设置的PHP会话 Cookies:

    
    //Example matching subsite1.example.org and www.example.org
    
    
    Session::set_cookie_domain('.example.org');
    
    
    
    

    屏幕截图



    文章标签:模块  cms  Silverstripe  

    Copyright © 2011 HelpLib All rights reserved.    知识分享协议 京ICP备05059198号-3  |  如果智培  |  酷兔英语