Skip to main content

切换到某些域的编辑皮肤。

项目描述

<nav class="contents" id="contents" role="doc-toc">

内容

</nav>

集体编辑皮肤切换器

对于Zest Software的客户,我 [Maurits van Rees] 创建了一个名为collective.editskinswitcher的包。我很高兴地从同事 Mark van Lent 那里拿了一些代码,他为不同的网站做了类似的事情。该包位于 Python 包索引中,因此可以轻松安装。并且代码在 Plone github集体中。

兼容性

collective.editskinswitcher 3.0 与 Plone 4.1 版兼容,直到并包括 4.3。对于早期的 Plone 版本,请使用 collective.editskinswitcher 2.x。

它有什么作用?

假设您有一个克隆站点。无论如何,您拥有的任何网站都可以在两个 url 上找到:www.example.comedit.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:设置编辑器获取的皮肤。默认值为“克隆默认值”。

  • switch_skin_action:选择用于切换到编辑皮肤的 url 条件。注意:这是一个多选:如果 选择的选项之一给出了肯定的结果,那么我们切换到编辑皮肤。选项是:

    • 基于编辑 URL:这样您就可以得到上述行为。这是默认设置。

    • 基于特定域:如果指定了此项,则在 url 的第一部分与specific_domains属性中的一个条目匹配时使用编辑皮肤。这个 url 是 Plone Site 根的 url;所以通常这将是一个域,例如 http://special.example.com/。请注意,您需要非常明确地使用指向您的 Plone Site 根目录的确切 url。例如,在本地尝试此操作时,您可能需要以下内容:http://localhost:8080/Plone

    • 基于管理员标头:如果选择此选项,您将需要设置代理服务器,例如。Apache,向请求中添加“HTTP_PLONEADMIN”标头。例如,它可以根据 url 执行此操作。/tests/ploneadmin_header.txt 中给出了一个示例

    • 基于 SSL:如果选择此选项,则任何 SSL 的 url 都将获得编辑皮肤,而其他人将获得默认皮肤。

    • 不基于 URL 切换:不基于 url 进行皮肤切换;相反,我们检查need_authentication选项。

  • need_authentication : 当为 True 时,您需要在切换皮肤之前登录。默认情况下,这设置为 False。请参阅我是否已通过身份验证部分?下面是一些注释。

  • force_login_header:当请求具有此标头时,仅允许经过身份验证的使用。这实际上并没有切换皮肤;你只是被重定向到 login_form。默认情况下,这设置为字符串X_FORCE_LOGIN。请注意,这不适用于 login_form 和其他类似页面。不过,这样的页面可能看起来很丑,因为在获取该页面的 css 和图像之前,您仍然被迫登录。

如果您将切换皮肤操作和身份验证结合起来,那么您需要拥有正确的 url 并且您需要登录。

当两者都没有使用时,什么都不会发生:那么您还不如简单地卸载这个产品,因为它没有用。

我被认证了吗?

need_authentication选项查找 Plone 在登录时提供给您的__ac cookie。这可能存在一些问题:

  • 通过 Zope 管理界面登录是在没有 cookie 的情况下处理的,因此 editskin 切换器将您视为匿名。

  • 我们不检查 cookie 是否真的有效。当您在自己的本地计算机上开发多个网站时,这通常会给您带来惊喜:Plone 为 localhost 域存储__ac cookie,而不区分多个 Plone 站点。因此,如果您使用 cookie 登录 localhost 上的 Plone Site A,那么皮肤切换器会认为您已通过 localhost 上的所有网站的身份验证。

或者,我们可以检查getSecurityManager().getUser(),但该检查始终认为我们是匿名的,大概是因为我们的检查是在遍历期间完成的,这对于任何人来说显然都被识别为已登录还为时过早。

为什么不是 CMFUrlSkinSwitcher?

我首先查看了 CMFUrlSkinSwitcher,但已经两年没有动过它了。一个导入错误 (CMFCorePermissions) 可以很容易地修复,因为该导入甚至没有被使用。但在那之后,测试到处都失败了。当然,理论上总是可以修复的,但滚动自己的包裹似乎更容易、更清洁、更快捷。

此外,CMFUrlSkinSwitcher 还做了更多的事情。至少它搞乱了一些方法,比如 absolute_url。可能我后来发现这在collective.editskinswitcher中也是必要的,但目前看起来情况并非如此。

我怎么知道这是有效的?

在默认的 plone 站点中测试这个包的最简单方法(当然除了运行测试之外)是:

  • 安装collective.editskinswitcher

  • 转到 ZMI 中的 portal_skins。

  • 根据 Sunburst Theme 创建一个新的皮肤选择。称之为“访客皮肤”。

  • 将访客皮肤设为默认皮肤。

  • 从 Sunburst Theme 中删除自定义皮肤层。

  • 自定义主模板或徽标或其他易于发现的内容。

  • 访问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应该给你访问者皮肤和自定义。

您还可以让编辑网址以cmsmanage开头。只要网址是这样的:

...//(edit|cms|manage).something.something....

你最终进入编辑皮肤。

预习

预览选项允许您通过编辑皮肤查看默认皮肤。

它通过使用访问编辑皮肤内容但将其翻转为默认皮肤的 iframe 来实现。这使您可以轻松查看以前的版本、私人内容等,因为如果发布,它将出现在默认皮肤中。

这在您的默认皮肤与编辑皮肤完全不同的情况下特别有用。它允许编辑界面维护一些所见即所得的功能。

预览既可以用作单独的预览选项卡,也可以用作编辑皮肤中视图选项卡内容的替代品。

两者都在测试文件夹中实现并经过测试,但默认情况下都没有使用。

要使用 editskinswitcher 的预览,它需要附带的 theme.egg 保存默认(和编辑)皮肤的配置。为了使用预览,必须在这个随附的主题彩蛋中打开它。执行此操作的示例代码位于测试文件夹中。

tests/skins/README.txt 中给出了用预览替换视图的说明

要将其添加为单独的预览选项卡:

  1. 通过将 testing.zcml 中的内容放入主题 egg configure.zcml 或将该文件加载到创建zope2instance的构建部分中来添加浏览器视图,例如:

    zcml =
        collective.editskinswitcher-testing
  2. 在 tests/add_preview.py 中有 ACTIONSCONFIG 将其添加为 profiles/default/actions.xml 文件。将默认 visible=False 属性更改为 True。或者通过转到 portal_actions、object 并添加带有 url 表达式string:${object_url}/@@preview的预览操作来手动完成。

请注意,目前我们的++resourcece++iframe.js 似乎没有正确加载,在我的测试中,这无益地使 iframe 高约 2 厘米,但这可能取决于您设置为编辑皮肤的内容。如果您使用此功能并遇到此错误,甚至可能知道如何修复它,请联系我。

每个文件夹的默认皮肤

还支持为特定文件夹选择默认皮肤。“皮肤”菜单条目应显示在“显示”和“操作”菜单旁边的内容区域中。从该下拉列表中选择皮肤后,它将在访问该文件夹时用作默认皮肤,而不是站点范围的默认皮肤。

此菜单适用于所有拥有“设置默认皮肤” 权限的人,默认情况下适用于经理和所有者。因此,如果您不希望任何人拥有此菜单,则可以通过不授予任何人此权限来实现。在 GenericSetup 配置文件的 rolemap.xml 文件中,如下所示:

<?xml version="1.0"?>
<rolemap>
  <permissions>
   <permission name="Set default skin" acquire="False" />
  </permissions>
</rolemap>

具有导航根的子站点

使用Per-folder 默认皮肤菜单,您已经可以创建简单的子站点。唯一需要的其他基本操作是将文件夹设置为导航根,因此为其提供 plone.app.layout.navigation.interfaces.INavigationRoot标记接口。此选项现已添加到菜单中,由新权限“设置导航根”保护,默认情况下仅适用于 Manager。

使用 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 及更高版本不需要的向后兼容代码。[毛里求斯]

  • 修复来自真正旧版本(如 0.5)时的升级错误。修复 ValueError:属性 switch_skin_action 不存在 [maurits]

3.1 (2013-09-16)

3.0 (2013-02-16)

  • 删除了 zope.app 依赖项。[毛里求斯]

  • 与 Plone 4.1、4.2、4.3 兼容。[毛里求斯]

2.5 (2013-02-15)

  • 什么都没有改变。

2.4 (2012-09-13)

  • 为 Plone 4.2 兼容性添加了依赖项:zope.app.publication 和 zope.app.publisher。[毛里求斯]

  • 移至 github: https ://github.com/collective/collective.editskinswitcher [maurits]

2.3 (2012-04-11)

  • 使用 Sunburst Theme 作为默认主题(我们现在在 Plone 4 国家有一段时间了)[ajung]

2.2 (2012-02-15)

  • 通过修复 MANIFEST.in 修复了损坏的版本。[毛里求斯]

2.1 (2012-02-15)

  • 更改了 iframe 高度的计算。原始代码 Firefox 的行为古怪,高度为 150 像素。那太小了。在马克的帮助下,我们可以解决这个问题。[米雷拉]

2.0 (2011-09-28)

  • 添加了 MANIFEST.in 以便我们可以使用 zest.pocompile 自动包含 .mo 文件。[毛里求斯]

  • 将 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)

  • 当用户具有“设置导航根”权限时,始终显示样式菜单。[毛里求斯]

  • 当我们在默认页面上时,检查我们对文件夹的权限。这可能会有所不同。[毛里求斯]

1.4 (2010-12-31)

  • 添加了菜单项以将上下文设置为由新权限“设置导航根”保护的导航根 (plone.app.layout.navigation.interfaces.INavigationRoot),默认情况下仅适用于 Manager。[毛里求斯]

1.3 (2010-12-14)

  • 当没有样式可供选择时,不要显示样式菜单。[毛里求斯]

  • 将 PAGE_WHITE_LIST 和 SUFFIX_WHITE_LIST 从 traversal.py 移动到新的 config.py。[毛里求斯]

  • 添加 SUFFIX_WHITE_LIST 以避免触发 css 或 javascript 文件的强制登录,否则登录表单会看起来很难看。出于同样的原因,还将 logo.jpg/png/gif 和 favicon.ico 添加到 PAGE_WHITE_LIST 中。[毛里求斯]

1.2 (2010-12-07)

  • 当您获得登录页面的此标头(由 PAGE_WHITE_LIST 指定)时,不要强制登录。[毛里求斯]

1.1 (2010-12-07)

  • 在查找标题以强制登录或强制使用编辑皮肤时,使用get_header而不是get 。[毛里求斯]

  • 允许使用新的样式上下文菜单在文件夹上设置默认外观。[追梦人]

1.0 (2010-06-07)

  • 修复:当我们需要身份验证并且我们是匿名的时,我们 不想切换:我们希望具有获取标准皮肤而不是编辑皮肤的默认行为。添加了一些更多的内联文档。[毛里求斯]

  • 切换回检查__ac cookie 以查看某人是否匿名;getSecurityManager 检查总是说我们是匿名的,尽管我以为我以前见过它工作。[毛里求斯]

  • 添加用于调试的日志记录行。[毛里求斯]

0.9 (2010-04-19)

  • 将切换皮肤操作更改为多选。When one of the selected actions returns True, we switch the skin. [毛里求斯]

  • 也接受像 admin.example.org 这样的 url 作为编辑 url。[毛里求斯]

0.8 (2010-04-16)

  • 更好地检查匿名用户,使用 getSecurityManager 而不是检查__ac cookie。[毛里求斯]

  • 当 X_FORCE_LOGIN 标头被传递(确切的拼写是可配置的)时,只允许登录用户访问(您通常会被重定向)。[毛里求斯]

  • 允许指定 admin_header;默认为 HTTP_PLONEADMIN。[毛里求斯]

  • 为 plone 添加了 z3c.autoinclude.plugin 入口点,以避免在您的 zope 实例的 zcml 选项中有collective.editskinswitcher;仅在 Plone 3.3 或更高版本中有效。在早期版本中,您仍然需要手动执行此操作。[毛里求斯]

0.7 (2008-10-04)

  • 添加了基于代理服务器(例如 Apache)设置的请求标头标志的切换选项 [Ed Crewe,ILRT - 布里斯托大学]

0.6 (2008-08-27)

  • 新的预览功能,可以通过编辑皮肤界面看到默认皮肤,以保留一定程度的所见即所得进行编辑。(基于 Dominic Hiles 未发布的 plone 2 产品的一部分。)预览功能可作为 viewlet 使用,可通过 view 或 viewletManager 使用,但默认情况下是关闭的。如何启用它的示例包含在启用和测试的测试中。[Ed Crewe,ILRT - 布里斯托大学]

  • SSL 或特定 URL 的额外 URL 皮肤切换选项 [Ed Crewe, ILRT - 布里斯托大学]

  • 在 subversion 中正确设置 eol 样式。[重新输出]

0.5 (2008-03-07)

  • 错误修复:在 zope 根上调用时(在某些情况下可能发生)portal_properties 未找到,未正确捕获。[毛里求斯]

0.4 (2008-02-12)

  • 错误修复:如果对象没有 changeSkin,请尝试其上下文。搜索用户时至少在共享选项卡上发生,因为对象是 KSS 视图。[毛里求斯]

0.3 (2008-01-30)

  • 代替访问规则,使用预遍历钩子。想法:大卫修道院。谢谢!干净了很多。[毛里求斯]

  • 避免在 README.txt 中混淆:谈论编辑器皮肤和访客皮肤,而不是 Plone Default 和默认皮肤。[毛里求斯]

  • 更新 README.txt 以了解 0.2 版中引入的新选项。[毛里求斯]

0.2 (2008-01-28)

  • 在测试用户是否登录时,检查请求中的 __ac cookie 而不是 portal_membership.isAnonymousUser,因为这在现实生活中不起作用;可能是因为我们使用了 AccessRule。[毛里求斯]

  • 添加 based_on_url 属性(默认值:True)。当为 True 时,当您通过编辑 url 访问该站点时,皮肤切换就完成了。与 need_authentication=True 结合使用时,只有编辑 url 上的登录用户才能获得编辑皮肤。[毛里求斯]

  • 添加 need_authentication 属性(默认值:False)。当为 True 时,皮肤切换仅在您通过身份验证(登录)时完成。[毛里求斯]

  • 在基本测试用例中,创建新的默认皮肤。[毛里求斯]

  • 将 tests/setup.txt 拆分为两个文件,以分隔一些不相关的测试。[毛里求斯]

  • 添加一个可读性更强的 README.txt 并将旧的移动到测试目录,因为它包含我们的大部分测试。[毛里求斯]

0.1 (2008-01-25)

  • 添加具有属性edit_skin 的属性表editskin_switcher。默认值:克隆默认值。使用它来确定将哪种皮肤提供给编辑。[毛里求斯]

  • 初始包结构。[佐佩斯克尔]