使用带有notheme的diazo将类添加到body标签

时间:2012-07-26 15:11:48

标签: plone diazo

我正在使用覆盖显示文档的内容 plone/document?ajax_load=True&ajax_include_head=True作为iframe的src。

在开发模式中附加&diazo.off=1就可以了。 在生产服务器上,这可悲的是不起作用,所以我补充说 documentation of plone.app.theming

中建议的ajax_load参数

我将所有指令包装在<rules if-not="$ajax_load">元素中,以确保它们不被应用(请参阅下面的代码)

现在我需要使用某个类来标记iframed页面的主体以应用不同的样式(例如,在叠加层中没有背景颜色)

nearly similar question建议的解决方案仅在您使用具有类属性的body元素进行操作的主题时才有效。

有没有办法在没有主题(使用)的情况下向内容添加类? 或者我是否必须提供一个空的html文档(index2.html)作为主题并应用大量规则来复制css / js等两次?

<rules if="$ajax_load">

    <!-- theme href="index.html" /-->

    <notheme />


    <!-- only works when using a theme -->
    <before theme-children="/html/body"><xsl:attribute name="class"><xsl:value-of select="/html/body/@class"/> my class</xsl:attribute></before>


    <!-- thought this could to the trick but does not work at all -->
    <xsl:template match="html/body">
    <xsl:attribute name="class"> foo</xsl:attribute>
    </xsl:template>


</rules>

<rules if-not="$ajax_load">


    <theme href="index.html" />

    <replace content="/html/head/title" theme="/html/head/title" />
    ...

2 个答案:

答案 0 :(得分:3)

显然没有主题可以操作,任何引用主题的规则都不能与<notheme/>一起使用。但是,您可以<drop><replace>内容(我有关于如何实施<before><after>内容的想法,但很难实现。也许在未来的Diazo版本中。 )但是你可以用少量的xslt来实现同样的目的:

<replace content="/html/body/@class">
    <xsl:attribute name="class"><xsl:value-of select="."/> newclass</xsl:attribute>
</replace>

答案 1 :(得分:1)

如果您使用plone.app.jquerytools作为叠加层,那么您可以传递一个类参数:

$('a.myPopover').prepOverlay({
    subtype: 'iframe',
    cssclass: 'my-popover'
});

在我们使用plone.app.tiles的一些项目中,我们使用了一个特定的主题模板作为叠加层,剥离了所有不必要的部分并缩减为单个包装div并将其用于tile编辑视图,如下所示: / p>

<theme href="minimal.html" if-path="@@edit-tile" />