Plone中的子站点功能
项目描述
简介
此子站产品为Plone添加了一些简约的子站功能。
安装前
该产品试图通过在Plone中添加少量代码来完成任务,但也需要其他软件完成部分工作,在这种情况下是Apache。
因此,如果您正在寻找一个完整且独立的Plone子站产品,请在此之前尝试其他产品(如Lineage)。
什么是子站点?
在本文档中,子站是指您的Plone站点的某个部分
通常需要应用不同的主题
访客可以通过访问类似 domain.com/subsite、subsite.com 或 subdomain.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.
"""
其他主题组件
在上一步骤之后,您可以继续正常添加元素(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
记住:您只需在需要定制标志视图时执行此任务。
将Plone文件夹标记为子站点
获取子站点时,Plone 的第一个也是唯一任务是选择一个文件夹,该文件夹必须是子站点。
通过 ZMI 进入文件夹并应用一个新的附加标记接口。在“接口”选项卡中,从“可用标记接口”部分找到 redturtle.subsites.backend.interfaces.ISubsiteRoot 并添加它。
您可以从同一页面移除标记。
应用主题(即获得子站点)
现在我们将展示如何在 Apache 配置中添加内容,并将其转换为所需的子站点环境。
请求头
从 redturtle.subsites 2.1 开始,我们的需求只是一个额外的 RequestHeader 配置。
请注意,这仅在 portal_skins 工具的 request_varname 从 plone_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 创新项目。
变更日志
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)
为plone的getNavigationRoot方法修复了一个bug,应用了猴子补丁。请参阅https://dev.plone.org/plone/ticket/8787 [keul]
1.0.1 (2008-12-05)
增加了对浏览器层CSS的支持 [amleczko]
1.0.0 (2008-11-18)
初始发布
项目详情
redturtle.subsites-2.1.0.zip的散列值
算法 | 散列摘要 | |
---|---|---|
SHA256 | b72b803a8e90a4bdd5491558d1be232fac0d67720972edbc0b03e0f301fe3aa2 |
|
MD5 | 03e57024e220b431bc14476050ca04af |
|
BLAKE2b-256 | 81daf72fb207bc99bcec9cfd9590cfb670991e239786c84b6899ad24e2ee77f8 |