如何在黑名单主机名中请求时重新配置diazo不使用jbot模板?

时间:2014-04-30 14:45:59

标签: plone diazo

以下(zopeskel默认)diazotheme包含jbot目录template_overrides。在此目录中,有一个覆盖版本plone.app.layout.viewlets.footer.pt

当我配置diazo@@theming-controlpanel)并将主机名列入黑名单时,黑名单主机名不显示重氮主题(如预期),jbot模板中template_overrides模板1}}仍然有效。

如何在列入黑名单的主机名中请求diazo不使用jbot模板?

使用命令zopeskel diazotheme namespace.package

创建了diazotheme

相关文件是:

namespace.package /命名空间/包/ interfaces.py

from zope.interface import Interface
class ICustomTheme(Interface):
    """Marker interface that defines a Zope 3 browser layer.
    """

namespace.package /命名空间/包/简档/默认/ browserlayer.xml

<?xml version="1.0"?>
<layers>
    <layer name="namespace.package.customization.layer"
      interface="namespace.package.interfaces.ICustomTheme" />
</layers>

namespace.package /命名空间/包/ configure.zcml中

  ...
  <browser:jbot
      directory="template_overrides"
      layer=".interfaces.ICustomTheme"
      />
  ...

namespace.package /命名空间/包/ template_overrides / plone.app.layout.viewlets.footer.pt

<div i18n:domain="plone" id="portal-footer">
    my footer
</div>

1 个答案:

答案 0 :(得分:0)

图层只是应用于请求的接口。

要完成您正在执行的操作,可以使用请求事件根据主机名动态地将图层应用于请求。

警告,这都是未经测试的......

from ZPublisher.interfaces import IPubStart
from zope.component import adapter
from zope.interface import alsoProvides

@adapter(IPubAfterTraversal)
def applyLayer(event):
    req = event.request
    if req.URL == 'something':
        alsoProvides(req, IMyLayerThatHasJBOTCustomizations)