无法使用INavigationRoot在Plone子网站中自定义徽标

时间:2014-10-07 04:40:18

标签: plone plone-4.x

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

当我调查问题时,我注意到在呈现的HTML中,子网站徽标是绝对URL。我期待对logo.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>

这会忽略皮肤属性,在整个Plone站点和服务器上的子站点上将徽标硬编码为logo.png。一切都在恢复。

显然我有一个针对这个问题的解决方案,但是什么是#34;正确的&#34;修复?

1 个答案:

答案 0 :(得分:1)

正确的解决方法是注册一个处理您的用例的新徽标视图。

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

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

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

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

说明,为什么忽略自定义徽标

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

不要使用资源的相对路径

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