切换到某些域的编辑皮肤。
项目描述
内容
</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.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:设置编辑器获取的皮肤。默认值为“克隆默认值”。
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应该给你访问者皮肤和自定义。
您还可以让编辑网址以cms或manage开头。只要网址是这样的:
...//(edit|cms|manage).something.something....
你最终进入编辑皮肤。
预习
预览选项允许您通过编辑皮肤查看默认皮肤。
它通过使用访问编辑皮肤内容但将其翻转为默认皮肤的 iframe 来实现。这使您可以轻松查看以前的版本、私人内容等,因为如果发布,它将出现在默认皮肤中。
这在您的默认皮肤与编辑皮肤完全不同的情况下特别有用。它允许编辑界面维护一些所见即所得的功能。
预览既可以用作单独的预览选项卡,也可以用作编辑皮肤中视图选项卡内容的替代品。
两者都在测试文件夹中实现并经过测试,但默认情况下都没有使用。
要使用 editskinswitcher 的预览,它需要附带的 theme.egg 保存默认(和编辑)皮肤的配置。为了使用预览,必须在这个随附的主题彩蛋中打开它。执行此操作的示例代码位于测试文件夹中。
tests/skins/README.txt 中给出了用预览替换视图的说明
要将其添加为单独的预览选项卡:
通过将 testing.zcml 中的内容放入主题 egg configure.zcml 或将该文件加载到创建zope2instance的构建部分中来添加浏览器视图,例如:
zcml = collective.editskinswitcher-testing在 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>
使用 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)
修复处理 specific_domains 属性。似乎这仅在页面的确切 url 在属性中时才有效,但域(包括协议)应该足够了。修复https://github.com/collective/collective.editskinswitcher/issues/1 [davidemoro, realefab, maurits]
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。默认值:克隆默认值。使用它来确定将哪种皮肤提供给编辑。[毛里求斯]
初始包结构。[佐佩斯克尔]