跳转到主要内容

Plone中的子站点功能

项目描述

简介

此子站产品为Plone添加了一些简约的子站功能。

安装前

该产品试图通过在Plone中添加少量代码来完成任务,但也需要其他软件完成部分工作,在这种情况下是Apache

因此,如果您正在寻找一个完整且独立的Plone子站产品,请在此之前尝试其他产品(如Lineage)。

什么是子站点?

在本文档中,子站是指您的Plone站点的某个部分

  • 通常需要应用不同的主题

  • 访客可以通过访问类似 domain.com/subsitesubsite.comsubdomain.domain.com 的内容来浏览子站

  • 访客可能不知道他们正在访问一个大型网站的子部分

  • 站点贡献者(通常)通过 back-end.domain.com 域名访问网站

  • 站点贡献者(可以)看到不同的Plone主题

  • 站点贡献者(通常)看到整个网站,而不仅仅是子站(只要他们使用后端URL)

请注意,这种方法不仅限于单个子站,您可以拥有多个子站。所有子站都使用后端URL进行编辑,然后使用一些前端URL进行访问

请注意,您还可以继续拥有前端贡献者,但他们在进入和退出文件夹、使用TinyMCE等时受到限制。再次强调,他们可能不知道自己处于Plone子站内部。

你真的需要子站点吗?

如果您不需要一个Plone站点,其中...

  • 您可以在另一个子站内创建指向内容的内部链接

  • 您可以创建一个包含来自多个子站内容的集合

  • 当您使用网站搜索时,您想找到子站外的文档

...可能您不需要子站,而只需在Zope实例中拥有多个Plone站点!

但如果上述行为中的任何一个都是真的,请继续阅读。

子站点有时仅仅是主题的问题

如果您的组织内部子站的概念不需要“隔离”(导航、面包屑、门户选项卡、TinyMCE使用等),那么您可能只需要那里描述的Apache + Plone魔法,而不是这个(或其他)子站产品。

创建子站点Plone主题

如前所述,此产品几乎可以在Plone前面没有Apache的情况下完成任何事情,您将需要自定义您的Apache重写规则。

所有这些都基于Plone中已经存在的某些行为,例如通过添加HTTP头使Plone以特殊方式处理的能力来应用Plone主题。

您将不再需要在“主题设置”网站设置部分的“默认主题”选项下进行操作,或者您将仅使用此选项作为后端主题。

一个完整的示例可用

我们还提供了一个完整的Plone子站示例主题,该主题使用了以下所有内容。

主题的界面

您需要创建(或自定义)要应用于子站的主题。请注意,即使您不打算看到前端的不同主题,您仍然需要创建一个空的主题。

通常,此主题必须安装在您的Plone站点上,但它必须不注册为Plone默认主题(因此不要在您的skins.xml通用设置文件中使用default_skin=xxx属性)。

主题的唯一重要部分是界面声明。通常,Plone主题有一个类似于plone_theme.mysite/plone_theme/mysite/browser/interfaces.py的文件。

该文件看起来像这样

from plone.theme.interfaces import IDefaultPloneLayer

class IThemeSpecific(IDefaultPloneLayer):
    """Marker interface that defines a Zope 3 browser layer.
    """

您需要按以下方式更改界面

from redturtle.subsites.frontend.browser import IFrontendLayer

class IThemeSpecific(IFrontendLayer):
    """Marker interface that defines a Zope 3 browser layer.
    """

另请参阅https://github.com/RedTurtle/example.rtsubsites_theme/blob/master/example/rtsubsites_theme/browser/interfaces.py

其他主题组件

在上一步骤之后,您可以继续正常添加元素(JavaScript 文件、CSS、图片、模板)。如果您不需要新主题看起来像默认站点主题,则主题已完成。

Logo视图组件

产品提供的标志视图已定制,始终从子站点 URL 获取默认标志。

如果您需要定制主题中的标志视图,请考虑扩展 redturtle.subsites 的那些。

from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
from redturtle.subsites.frontend.viewlets.logo import LogoViewlet as BaseLogoViewlet

class LogoViewlet(BaseLogoViewlet):
     # do something here

参见:https://github.com/RedTurtle/example.rtsubsites_theme/blob/master/example/rtsubsites_theme/browser/logo.py

记住:您只需在需要定制标志视图时执行此任务。

将Plone文件夹标记为子站点

获取子站点时,Plone 的第一个也是唯一任务是选择一个文件夹,该文件夹必须是子站点。

通过 ZMI 进入文件夹并应用一个新的附加标记接口。在“接口”选项卡中,从“可用标记接口”部分找到 redturtle.subsites.backend.interfaces.ISubsiteRoot 并添加它。

您可以从同一页面移除标记。

应用主题(即获得子站点)

现在我们将展示如何在 Apache 配置中添加内容,并将其转换为所需的子站点环境。

请求头

从 redturtle.subsites 2.1 开始,我们的需求只是一个额外的 RequestHeader 配置。

请注意,这仅在 portal_skins 工具的 request_varnameplone_skin 更改为 HTTP_PLONE_SKIN 时才有效。您可以从 ZMI(请求变量名称 字段)或通过通用设置(见 https://github.com/RedTurtle/example.rtsubsites_theme/blob/master/example/rtsubsites_theme/profiles/default/skins.xml )手动执行此操作。

您需要编写类似以下内容

RequestHeader append plone_skin "The name of the Theme"

不同域名(或子域名)如何操作

当您的子站点域名类似于 subsite.com(或 subdomain.mycompany.com)时,配置相当简单。您将为 Apache 提供 subsite.com.conf 文件,其中包含类似以下内容

<VirtualHost host:80>
    ServerName subsite.com
    ServerAlias www.subsite.com
    ServerAdmin ...

    ...

    RewriteEngine On

    RequestHeader append plone_skin "The name of the Theme"

    RewriteRule ^/(.*) \
    "http://127.0.0.1:8080/VirtualHostBase/http/%{SERVER_NAME}:80/Plone/VirtualHostRoot/subsite/$1" [L,P]
    ProxyPassReverse / http://127.0.0.1:8080/

    ...

</VirtualHost>

子站点在子路径内如何操作

如果您已经在 mycompany.com 上有一个 Plone 网站,并且访问 http://mycompany.com/subsite,则需要子站点,配置复杂,因为在同一 .conf 文件中需要处理两个站点

<VirtualHost host:80>
    ServerName mycompany.com
    ServerAlias www.mycompany.com
    ServerAdmin ...

    ...

    RewriteEngine On

    SetEnvIf Request_URI "^/subsite(.*)" SUBSITE
    RequestHeader append plone_skin "The name of the Theme" env=SUBSITE

    RewriteRule ^/(.*) \
    "http://127.0.0.1:8080/VirtualHostBase/http/%{SERVER_NAME}:80/Plone/VirtualHostRoot/$1" [L,P]
    ProxyPassReverse / http://127.0.0.1:8080/

    ...

</VirtualHost>

附加产品

如果您希望以不同于标准 Plone 行为的方式管理子站点的门户选项卡,请查看 collective.navroottabs。使用此工具,您还可以为子站点自定义不同的门户选项卡。

依赖关系

在 Plone 4.3 上测试。

待办事项

由于我们已移除 p4a.subtyper,子站点标记只能通过 ZMI 访问。这可能在将来改变。

致谢

Rete Civica Mo-Net - Comune di Modena 的支持下开发;Rete Civica Mo-Net 支持 PloneGov 创新项目

Comune di Modena - logo

作者

此产品由 RedTurtle 技术团队开发。

RedTurtle Technology Site

变更日志

2.1.0 (2014-10-10)

  • 移除旧弃用的代码 [keul]

  • 添加 skinswitcher,现在在 Plone 中处理皮肤切换,而不是 Apache。这将修复 Plone 4.1.5 及以上版本的问题 [keul]

  • 添加 MANIFEST 文件 [keul]

2.0.0 (2011-07-29)

  • 首次公开发布

  • 与 Plone 4(可能还包括 3.3,但肯定不包括 3.2 或更低版本)兼容 [keul]

  • 支持 z3c.autoincude [keul]

  • 再见 p4a.subtyper [keul]

  • 更改标志视图:Plone 3.3 及以上版本已引用 INavigationRoot [keul]

  • 移除 getNavigationRoot 补丁,因为问题 #8787 已关闭 [keul]

  • 现在 JavaScript 注册也引用子站点根,这将修复前端中的 JavaScript 错误 [keul]

1.0.3 (2009-01-28)

  • 遍历适配器引发了很多冲突错误,因为所有请求都在尝试在子站点上应用 INavigationRoot [keul]

1.0.2 (2008-12-11)

1.0.1 (2008-12-05)

  • 增加了对浏览器层CSS的支持 [amleczko]

1.0.0 (2008-11-18)

  • 初始发布

项目详情


下载文件

下载适用于您平台的应用程序。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分发

redturtle.subsites-2.1.0.zip (34.1 kB 查看散列值)

上传时间

由以下组织支持