Search code examples
plonediazoxdvplone-3.xdeliverance

Adding an class to body element with XDV


I want to style some forms in Plone3+collective.xdv but I don't want all forms to get the special style.

So I'd like to add a special styled-form class name to the class attribute of the body element just when displaying certain templates:

  • contact-info
  • sendto_form
  • PFG forms

So I thought that I could manage to perform this with XDV in order not to modify those templates.

By using the if-content directives in XDV rules I can check if those templates are being displayed:

css:if-content="body.template-contact-info"

for instance.

But I don't find the way to keep the class attribute as delivered by Plone and add the special class based on that condition.

My desired result would be something like:

<body class="template-contact-info styled-form">
    ...
</body>

Thanks in advance.


Solution

  • With Diazo/plone.app.theming you can merge attributes from the template and content, see: http://diazo.org/basic.html#merge

    If you can't upgrade then you'll need to do this with inline XSL, something like:

    <prepend theme="/html/body" css:if-content="body.template-contact-info"><xsl:attribute name="class"><xsl:value-of select="/html/body/@class"/> styled-form</xsl:attribute></prepend>
    

    Update: I forgot the tag in the example above. It should work now.