我使用Diazo来部署静态html文件' ticker.html'在某个网址上。该页面根本不使用任何内容。
这是rules.xml:
<rules xmlns="http://namespaces.plone.org/diazo"
xmlns:css="http://namespaces.plone.org/diazo/css"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<rules if-path="/Plone/ticker/ /ticker/">
<theme href="ticker.html" />
</rules>
<rules css:if-content="#visual-portal-wrapper" if-not-path="/Plone/ticker/ /ticker/">
<theme href="index.html" />
The rest of the theme...
</rules>
</rules>
它工作正常,html是正确的,但http://localhost:8080/Plone/ticker
的返回码是404.只有当我在Plone中创建一些虚拟内容时,我得到一个200.返回的内容也略有改变:有一个虚拟内容Diazo在标题中添加了一个基本标记:
<base href="http://localhost:8080/Plone/ticker/" />
如果没有虚拟内容,我怎么能告诉Diazo完全忽略内容并返回200?
如果你想知道:我使用Diazo是因为plone.app.themeing允许通过网络修改静态页面。
答案 0 :(得分:3)
plone.app.theming转换是交付管道的最后一步。内容已经从Plone召唤出来,以便它可以与主题结合使用。所以,这不适合这样做。
相反,请使用反向代理的重写规则执行此操作。让代理在收到目标URL请求时获取您的代码。您还可以在此过程中节省大量的CPU周期,因为您将通过Zope / Plone的机器避免整个行程。
答案 1 :(得分:0)
我有一个类似的用例,我想通过Zope将一些js-partials服务到AngularJS。它们是text/html
,因此它们通过plone.app.theming
进行了转换。深入研究plone.app.theming
后,i重载ThemeTranform
适配器,并在新文件transforms.py
中使用子类的适配器,如下所示:
# -*- coding: utf-8 -*-
from plone.app.theming import transform
from your.theme.interfaces import IYourThemeLayer
from zope.component import adapter
from zope.interface import Interface
@adapter(Interface, IYourThemeLayer
class ThemeTransform(transform.ThemeTransform):
def parseTree(self, result):
# Prevent diazo from adding doctype and html head to every
# html file. Exclude all partial resources from theme transforms
if '/++resource++your.theme.js-partials/' in self.request.getURL():
return None
return super(ThemeTransform, self).parseTree(result)
...使用以下命令在zcml
中注册与默认ThemeTransform
适配器相同的名称:
<configure
xmlns="http://namespaces.zope.org/zope"
xmlns:zcml="http://namespaces.zope.org/zcml"
i18n_domain="your.theme">
<!-- Override plone.app.theming adapter -->
<adapter
name="plone.app.theming.transform"
factory=".transform.ThemeTransform"
zcml:condition="installed plone.app.theming"
/>
</configure>
可能与此问题有关:https://dev.plone.org/ticket/13139