1

在 Plone 4.3.3 中激活基于敏捷的 Plone 默认类型后,我遇到了一个问题。我有许多子站点(激活了 INavigationRoot 界面的文件夹。)每个子站点都有一个自定义徽标,该徽标存储logo.png在每个用作导航根的文件夹中。它工作得很好,直到我激活了基于 Dexterity 的 Plone 默认类型。那时,所有自定义徽标都替换为基本 Plone 网站上显示的徽标。

当我调查这个问题时,我注意到在呈现的 HTML 中子站点徽标是绝对 URL。我期待对 logo.png 的不合格引用,它可以在当前文件夹或 .png 的默认位置中找到portal_skins/custom

徽标在 Sunburst 主题的属性中定义,位于 buildout_cache/plonetheme.sunburst-1.4.6-py2.7.egg/plonetheme/sunburst/skins/sunburst_styles/base_properties.props

logoName:string=logo.png

logoName由中LogoViewlet定义使用buildout_cache/plone.app.layout-2.3.12-py2.7.egg/plone/app/layout/viewlets/common.py

无论出于何种原因,自定义徽标都被忽略了,而子站点则呈现基本徽标。

粗略的解决方案:编辑buildout-cache/eggs/plone.app.layout-2.3.11-py2.7.egg/plone/app/layout/viewlets/logo.pt

改变:

    <img src="logo.jpg" alt=""
    tal:replace="structure view/logo_tag" /></a>

至:

    <img src="logo.png" alt=""  /></a>

这会忽略皮肤属性,将徽标硬编码logo.png到服务器上的所有 Plone 站点和子站点中。所有人都在重新工作。

显然我有一个解决该问题的解决方案,但“正确”的解决方法是什么?

4

1 回答 1

1

一个适当的解决方法是注册一个新的徽标 viewlet,它可以处理您的用例。

  • 如果您在 Plone-root 上,则应使用属性中定义的徽标。
  • 如果您位于具有 NavigationRoot 的站点的一部分,请使用导航根下方的徽标。

但是在你开始开发之前...

ftw.subsite作为一个 Plone 包,它完全符合您的要求。

  • 您可以为每个子网站上传新徽标(内容字段)。
  • 您可以为每个子站点(内容字段)定义新的 CSS。
  • 也可以使用不同的语言为子网站提供服务。
  • 该子站点也是一个 NavigationRoot。
  • 一个子站点有他自己的 ContactForm。
  • 更多的...

解释,为什么您的自定义徽标被忽略

view/logo_tag获取门户根,即克隆根,而不是导航根。然后它会尝试获取在 base_properties 中配置的徽标(或“logo.png”作为后备)相对于 plone 根。这就是为什么您不能简单地将 logon.png 添加到具有 NavigationRoot 的文件夹中。

不要对资源使用相对路径

使用资源的相对路径被认为是一个坏主意,这样浏览器就无法缓存徽标。浏览器必须始终加载它,因为它有不同的路径。

于 2014-10-07T06:18:50.973 回答