3

我正在使用 plone/document?ajax_load=True&ajax_include_head=Trueiframe 的 src 在叠加层中显示文档的内容。

在开发模式下附加&diazo.off=1就可以了。在生产服务器上,这很遗憾不起作用,所以我按照plone.app.theming 文档中的建议添加了 ajax_load 参数

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

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

几乎类似的问题提出的解决方案 仅在您使用的主题具有 body 元素时才有效,该 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" />
    ...
4

2 回答 2

3

显然,如果没有要操作的主题,任何引用主题的规则都不能与<notheme/>. 但是你可以满足(我有如何实现和满足的想法<drop>,但它很难实现。也许在 Diazo 的未来版本中。)但是你可以用少量的 xslt 来实现同样的事情:<replace><before><after>

<replace content="/html/body/@class">
    <xsl:attribute name="class"><xsl:value-of select="."/> newclass</xsl:attribute>
</replace>
于 2012-07-29T22:10:21.917 回答
1

如果您将 plone.app.jquerytools 用于叠加层,则可以传递一个类参数:

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

在我们的一些使用 plone.app.tiles 的项目中,我们使用了一个特定的主题模板来覆盖,它被剥离了所有不必要的部分并简化为单个包装 div,并将其用于平铺编辑视图,如下所示:

<theme href="minimal.html" if-path="@@edit-tile" />
于 2012-07-26T15:36:20.807 回答