跳转到主要内容

切换到特定域的编辑皮肤。

项目描述

集体编辑皮肤切换器

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.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:设置编辑者获得的皮肤。默认为“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以 cmsmanage 开头。只要URL类似于

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

您就会进入编辑皮肤。

预览

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

它是通过使用iframe来实现的,该iframe访问编辑皮肤内容,但将其翻转回默认皮肤。这允许您轻松查看先前版本、私有内容等,因为如果发布,它将以默认皮肤的形式出现。

这在您的默认皮肤与编辑皮肤差异很大的情况下特别有用。它允许编辑界面保持一些wysiwyg功能。

预览可以作为一个单独的预览标签,或者作为编辑皮肤中查看标签内容的替代。

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

为了使编辑皮肤切换器的预览功能有用,它需要一个附带的主题.egg文件,其中包含默认(和编辑)皮肤的配置。为了使用预览,必须在附带的主题.egg中将其打开。示例代码在测试文件夹中。

有关替换查看为预览的说明,请参阅 tests/skins/README.txt

要将其作为单独的预览标签添加

  1. 通过将测试.zcml中的内容放入您的主题egg configure.zcml或加载该文件到创建 zope2instance 的构建部分中,添加浏览器查看,如下所示

    zcml =
        collective.editskinswitcher-testing
  2. 在 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>

带有导航根的子站点

使用 按文件夹默认皮肤 菜单,您已经有了一个创建简单子站的能力。唯一需要的其他基本事情是将文件夹设置为导航根,给它添加 plone.app.layout.navigation.interfaces.INavigationRoot 标记接口。现在,此选项已添加到菜单中,受新权限“设置导航根”的保护,默认情况下只有管理员。

使用 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)

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)

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 (92.8 kB 查看哈希值)

上传时间

由以下支持