切换到特定域的编辑皮肤。
项目描述
集体编辑皮肤切换器
为 Zest Software 的客户,我 [Maurits van Rees] 创建了一个名为 collective.editskinswitcher 的软件包。我很高兴从同事 Mark van Lent 那里拿了一些代码,他为不同的网站做了类似的事情。该软件包位于 Python 软件包索引中,因此可以轻松安装。代码位于 Plone github collective。
兼容性
collective.editskinswitcher 3.0 与 Plone 版本 4.1 到 4.3 兼容。对于更早的 Plone 版本,请使用 collective.editskinswitcher 2.x。
这是做什么的?
假设你有一个 Plone 网站。无论如何,无论你有什么网站,都可以在两个 URL 上访问:www.example.com 和 edit.example.com。有一天你应该问问你的本地 Apache 大师他是怎么做到的。
安装了 collective.editskinswitcher(使用门户快速安装器)后,访问 URL 为 edit.example.com 的网站访问者将看到编辑皮肤。(这可以在属性中设置,我们稍后会看到。)访问 www.example.com 的访问者将看到你在 portal_skins 中设置的默认皮肤。这可能非常有用。
为了避免混淆:我们将你设置的“默认皮肤”称为访客皮肤。而编辑者使用的皮肤我们称为编辑皮肤。
开发者可能会喜欢这样一个事实,即访问 localhost 时也会获得访客皮肤,而访问 127.0.0.1 时则会获得编辑皮肤。
你还可以在每个文件夹中设置不同的默认皮肤。因此,你可以设置文件夹-1 使用红色主题,文件夹-2 使用蓝色主题,当你编辑任意一个文件夹时,你仍然使用 Sunburst 主题。请参阅每个文件夹的默认皮肤部分。
其他选项
有一些你可以设置的选项。转到 portal_properties,然后转到 editskin_switcher 属性表。这些选项可用:
edit_skin:设置编辑者获得的皮肤。默认为“Plone Default”。
switch_skin_action:选择用于切换到编辑皮肤的 URL 条件。注意:这是一个多选:如果 任何一个 选定的选项产生积极的结果,则我们切换到编辑皮肤。选项包括:
基于编辑 URL:使用此选项可以获得上述描述的行为。这是默认设置。
基于特定域名:如果指定此选项,则在 URL 的第一部分与 specific_domains 属性中的条目之一匹配时,将使用编辑皮肤。此 URL 是 Plone 网站根的 URL;因此,通常这将是一个域名,如 http://special.example.com/。请注意,你需要非常明确地使用 Plone 网站根的确切 URL。例如,当你尝试本地时,你可能需要像这样:http://localhost:8080/Plone
基于管理员头部:如果选择此项,则需要设置您的代理服务器,例如Apache,向请求中添加一个‘HTTP_PLONEADMIN’头部。它可以基于URL进行此操作,例如。在 /tests/ploneadmin_header.txt 中提供了一个示例。
基于SSL:如果选择此项,则任何SSL URL都将获得编辑皮肤,其他URL将获得默认皮肤。
不基于URL切换:不要基于URL切换皮肤;相反,我们检查need_authentication选项。
need_authentication:当为True时,切换皮肤之前需要登录。默认情况下,此选项设置为False。请参阅下面的“我是否已认证?”部分以获取一些说明。
force_login_header:当请求包含此头部时,只允许已认证的用户使用。这实际上不会切换皮肤;您只会被重定向到login_form。默认情况下,此选项设置为字符串X_FORCE_LOGIN。请注意,这不会应用于login_form和其他类似页面。这样的页面可能看起来很丑,因为您在获取该页面的CSS和图像之前仍被迫登录。
如果您同时结合了切换皮肤操作和认证,那么您需要拥有正确的URL并且需要登录。
当两者都不使用时,不会发生任何事情:那么您最好直接卸载此产品,因为它没有用处。
我是否已认证?
need_authentication选项寻找Plone在登录时给您提供的__accookie。与此相关的可能存在一些问题
通过Zope管理界面登录不使用cookie处理,因此editskin切换器将您视为匿名用户。
我们没有检查cookie是否实际有效。这在您在自己的本地计算机上开发多个网站时可能会给您带来惊喜:Plone存储localhost域的__accookie,而不区分多个Plone站点。因此,如果您使用cookie登录到localhost上的Plone站点A,则皮肤切换器认为您已认证localhost上的所有网站。
或者,我们可以检查getSecurityManager().getUser(),但该检查始终认为我们处于匿名状态,可能是因为我们的检查是在遍历期间进行的,而这显然为时尚早,没有人被识别为已登录。
为什么不使用 CMFUrlSkinSwitcher?
我首先看了CMFUrlSkinSwitcher,但它已经两年没有更新了。一个导入错误(CMFCorePermissions)很容易修复,因为该导入甚至没有被使用。但是,在那之后,测试在所有地方都失败了。当然,理论上总是可以修复的,但是创建自己的包似乎更容易、更干净、更快。
此外,CMFUrlSkinSwitcher还做了一些其他事情。至少它会玩弄一些方法,如absolute_url。我可能会稍后发现这在collective.editskinswitcher中也是必要的,但目前看起来似乎不是这样。
我如何知道这正在工作?
在默认Plone站点中测试此包的最简单方法(当然,除了运行测试之外)是
安装collective.editskinswitcher。
转到ZMI中的portal_skins。
基于Sunburst主题创建一个新的皮肤选择。将其命名为“访客皮肤”。
将访客皮肤设置为默认皮肤。
从Sunburst主题中删除自定义皮肤层。
自定义主模板或标志或其他容易发现的东西。
访问127.0.0.1:8080/plonesite,您将看到默认的Plone。
访问localhost:8080/plonesite,您将看到带有您自定义的Plone。
在Linux系统中,您可以编辑 /etc/hosts 并添加类似以下的一行
127.0.0.1 edit.example.com www.example.com
现在访问 edit.example.com 应该会显示编辑皮肤,而 www.example.com 应该会显示带有自定义设置的访客皮肤。
您还可以让编辑URL以 cms 或 manage 开头。只要URL类似于
...//(edit|cms|manage).something.something....
您就会进入编辑皮肤。
预览
预览选项允许您通过编辑皮肤查看默认皮肤。
它是通过使用iframe来实现的,该iframe访问编辑皮肤内容,但将其翻转回默认皮肤。这允许您轻松查看先前版本、私有内容等,因为如果发布,它将以默认皮肤的形式出现。
这在您的默认皮肤与编辑皮肤差异很大的情况下特别有用。它允许编辑界面保持一些wysiwyg功能。
预览可以作为一个单独的预览标签,或者作为编辑皮肤中查看标签内容的替代。
两者都在测试文件夹中实现并经过测试,但默认情况下都没有使用。
为了使编辑皮肤切换器的预览功能有用,它需要一个附带的主题.egg文件,其中包含默认(和编辑)皮肤的配置。为了使用预览,必须在附带的主题.egg中将其打开。示例代码在测试文件夹中。
有关替换查看为预览的说明,请参阅 tests/skins/README.txt
要将其作为单独的预览标签添加
通过将测试.zcml中的内容放入您的主题egg configure.zcml或加载该文件到创建 zope2instance 的构建部分中,添加浏览器查看,如下所示
zcml = collective.editskinswitcher-testing
在 tests/add_preview.py 中,有 ACTIONSCONFIG。将其添加为 profiles/default/actions.xml 文件。将默认可见=False属性更改为True。或者手动操作,通过访问门户操作、对象,并添加具有url表达式 string:${object_url}/@@preview 的预览操作。
请注意,目前我们的 ++resourece++iframe.js 似乎没有正确加载,这在我的测试中不实用地将iframe高度约两厘米,但这可能取决于您设置的编辑皮肤。如果您使用此功能并遇到此错误,甚至知道如何修复它,请联系我。
每个文件夹的默认皮肤
支持为特定文件夹选择默认皮肤。一个“皮肤”菜单项应显示在内容区域,紧挨着“显示”和“操作”菜单。一旦从下拉菜单中选择一个皮肤,它将用作访问该文件夹时的默认皮肤,而不是网站范围的默认皮肤。
此菜单对具有 Set default skin 权限的任何人可用,默认情况下是管理员和所有者。因此,如果您不希望任何人有此菜单,可以通过不授予任何人此权限来实现。在您的通用设置配置文件的角色map.xml文件中,这看起来像这样
<?xml version="1.0"?> <rolemap> <permissions> <permission name="Set default skin" acquire="False" /> </permissions> </rolemap>
使用 zc.buildout 安装
要使用 collective.editskinswitcher 与 zc.buildout 一起使用,您必须将 collective.editskinswitcher 添加到 eggs 部分
eggs = collective.editskinswitcher ...
祝您玩得开心!
莫里茨·范·里斯
collective.editskinswitcher 的变更日志
3.2 (2015-03-24)
删除不再需要的 based_on_url 属性。将其与 switch_skin_action 属性合并。[莫里茨]
移除在支持的Plone 4.1及更高版本中不再需要的向后兼容代码。[maurits]
修复从非常老版本(如0.5)升级时的错误,修复了ValueError:属性switch_skin_action不存在。[maurits]
3.1 (2013-09-16)
修复处理特定域名属性。这似乎只有在页面的确切URL位于属性中时才有效,但域名(包括协议)就足够了。修复了https://github.com/collective/collective.editskinswitcher/issues/1。[davidemoro, realefab, maurits]
3.0 (2013-02-16)
移除了zope.app依赖。[maurits]
与Plone 4.1、4.2、4.3兼容。[maurits]
2.5 (2013-02-15)
尚未有任何更改。
2.4 (2012-09-13)
添加了Plone 4.2兼容性的依赖项:zope.app.publication和zope.app.publisher。[maurits]
迁移至github:https://github.com/collective/collective.editskinswitcher。[maurits]
2.3 (2012-04-11)
使用Sunburst主题作为默认主题(我们已经在Plone 4国家有一段时间了)[ajung]
2.2 (2012-02-15)
通过修复MANIFEST.in修复了损坏的发布版本。[maurits]
2.1 (2012-02-15)
更改了iframe高度的计算方法。使用原始代码时,Firefox表现异常,高度为150px。这太小了。在Mark的帮助下,我们修复了这个问题。[mirella]
2.0 (2011-09-28)
添加了MANIFEST.in,以便我们可以自动包含.zmo文件与zest.pocompile一起使用。[maurits]
将PAGE_WHITE_LIST和SUFFIX_WHITE_LIST替换为正则表达式列表(WHITELIST_REGEXPS)。使用正则表达式,我们还可以将更复杂的URL列入白名单,例如密码重置工具(/passwordreset/1234…)。[markvl]
1.6 (2011-06-11)
在切换皮肤时,还设置了特定主题的浏览器层。代码大量借鉴自themetweaker.themeswitcher。[markvl]
1.5 (2011-01-04)
当用户拥有“设置导航根”权限时,始终显示样式菜单。[maurits]
在默认页面上时,检查文件夹上的权限。这可能会产生差异。[maurits]
1.4 (2010-12-31)
添加了设置上下文为导航根(plone.app.layout.navigation.interfaces.INavigationRoot)的菜单项,受新权限“设置导航根”保护,默认仅对Manager可用。[maurits]
1.3 (2010-12-14)
当没有可选择的样式时,不要显示样式菜单。[maurits]
将PAGE_WHITE_LIST和SUFFIX_WHITE_LIST从traversal.py移至新的config.py。[maurits]
添加SUFFIX_WHITE_LIST以避免触发强制登录,对于CSS或JavaScript文件,否则登录表单将看起来很丑。还添加了logo.jpg/png/gif和favicon.ico到PAGE_WHITE_LIST,原因相同。[maurits]
1.2 (2010-12-07)
对于登录页面(由PAGE_WHITE_LIST指定),不要强制登录。[maurits]
1.1 (2010-12-07)
在查找强制登录或强制使用编辑皮肤的头部时,使用get_header而不是get。[maurits]
允许使用新的样式上下文菜单在文件夹上设置默认皮肤。[dreamcatcher]
1.0 (2010-06-07)
修复:当我们需要认证而我们处于匿名状态时,我们不希望切换:我们希望有标准皮肤的默认行为而不是编辑皮肤。添加了一些更多的内联文档。[maurits]
切换回检查__accookie以查看某人是否为匿名;尽管我以前认为它已经工作,但getSecurityManager检查始终显示我们处于匿名状态。[maurits]
添加调试的日志行。[maurits]
0.9 (2010-04-19)
将切换皮肤操作更改为多选。当所选操作之一返回True时,我们切换皮肤。[maurits]
也接受如admin.example.org这样的编辑URL。[maurits]
0.8 (2010-04-16)
使用getSecurityManager而不是检查__accookie进行匿名用户的轻微改进检查。[maurits]
当传递X_FORCE_LOGIN头部(拼写是可配置的)时,仅允许登录用户访问(通常会被重定向)。[maurits]
允许指定admin_header;默认为HTTP_PLONEADMIN。[maurits]
为 Plone 添加了 z3c.autoinclude.plugin 入口,以避免在 Zope 实例的 zcml 选项中使用 collective.editskinswitcher;仅在 Plone 3.3 或更高版本中有效。在早期版本中,您仍然需要手动进行此操作。[maurits]
0.7 (2008-10-04)
添加了基于代理服务器(例如 Apache)设置请求头标志的切换选项。[Ed Crewe, ILRT - University of Bristol]
0.6 (2008-08-27)
新增预览功能,以便可以通过编辑皮肤界面查看默认皮肤,以保留一定的 WYSIWYG 编辑水平。(基于 Dominic Hiles 的未发布 Plone 2 产品的一部分。)预览功能作为视图小部件提供,可通过视图或视图管理器使用,但默认情况下是关闭的。在测试中包含了启用它的示例,其中已启用并进行了测试。[Ed Crewe, ILRT - University of Bristol]
额外的 URL 皮肤切换选项,如 SSL 或特定 URL。[Ed Crewe, ILRT - University of Bristol]
在 subversion 中正确设置 eol 风格。[reinout]
0.5 (2008-03-07)
错误修复:在 zope 根(在某些情况下可能发生)上调用时,找不到 portal_properties,并且未正确捕获。[maurits]
0.4 (2008-02-12)
错误修复:如果对象没有 changeSkin,则尝试其上下文。至少在搜索用户时发生在共享标签上,因为对象是 KSS 视图。[maurits]
0.3 (2008-01-30)
而不是使用访问规则,使用预遍历钩子。想法:David Convent。谢谢!这更加简洁。[maurits]
在 README.txt 中避免混淆:谈论编辑皮肤和访客皮肤,而不是 Plone 默认和默认皮肤。[maurits]
更新 README.txt 以介绍 0.2 版本中引入的新选项。[maurits]
0.2 (2008-01-28)
在测试用户是否登录时,检查请求中的 __ac cookie 而不是 portal_membership.isAnonymousUser,因为这在现实生活中不起作用;可能是因为我们使用了 AccessRule。[maurits]
添加基于_url 属性(默认:True)。当为 True 时,在通过编辑 URL 访问站点时执行皮肤切换。当与 need_authentication=True 结合时,只有登录到编辑 URL 的用户才能获得编辑皮肤。[maurits]
添加 need_authentication 属性(默认:False)。当为 True 时,仅在您进行身份验证(登录)时执行皮肤切换。[maurits]
在基本测试用例中创建新的默认皮肤。[maurits]
将 tests/setup.txt 分割成两个文件,以分离一些不相关的测试。[maurits]
添加更易读的 README.txt 并将旧的一个移至测试目录,因为它包含我们的大部分测试。[maurits]
0.1 (2008-01-25)
添加属性表 editskin_switcher,具有属性 edit_skin。默认值:Plone 默认。使用它来确定要提供给编辑器的皮肤。[maurits]
初始包结构。[zopeskel]
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解有关 安装软件包 的更多信息。
源分发
collective.editskinswitcher-3.2.zip 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 9ea581915e8df2e30aae92b3856c110ddd802f0cbf9ad58e7bedc9ab18d95d64 |
|
MD5 | 97ba9aec34134ba500a7c085dca0d00c |
|
BLAKE2b-256 | d50f463ae8467d9155665acba88dbc41fe64f0428666a86de044043856f9abee |