Использование путей if-not и динамическое изменение стилей вместе plone.app.theming

Я пытаюсь динамически изменить стиль на каждой странице, кроме главной страницы Plone, используя plone.app.theming (diazo).

До сих пор я собрал это вместе, но это ломает мою тему:

<replace css:content="#some-div" if-path="not(body.section-front-page)"
<style type="text/css">
#some-div { margin: 0 2.25em }
</style>
</replace>

Будем благодарны за любую помощь в написании комбинированного пути if-not и динамически изменяемых стилей! Добавлен отсутствующий закрывающий тег, все равно не работает.

3 ответа

Для меня похоже, что в вашем файле rules.xml есть несколько ошибок.

а) замена требует содержимого и атрибута темы. см. http://docs.diazo.org/en/latest/basic.html

б) вы обычно не помещаете css в ваш файл rules.xml. и способ, которым это вставлено выше, не будет работать

c) условие if-path работает с частями URL. и вы тестируете для определенного класса тела. Вы бы предпочли пойти на один из тех

if-path="/front-page" 
if-content="body.section-front-page"

(см. http://docs.diazo.org/en/latest/advanced.html)

Лучшая отправная точка - просмотреть документацию http://pypi.python.org/pypi/plone.app.theming

загрузите одну из тем diazo на plone.org в качестве шаблона http://plone.org/products?getCategories=themes&getCompatibility=Plone+4.1&SearchableText=diazo

и найдите различные правила на http://docs.diazo.org/

Я не думаю, что Diazo является правильным инструментом для решения этой проблемы, попробуйте следующий CSS:

#some-div { margin: 0 2.25em }
body.section-front-page #some-div { margin: 0 }

Хорошая особенность классов CSS секции Plone заключается в том, что она позволяет вам написать один CSS-файл для всего вашего сайта, в то же время ориентируясь на правила для определенных разделов.

Допустим, ваша первая страница - это Документ с идентификатором 'front-page', тогда вы можете сделать:

<?xml version="1.0" encoding="UTF-8"?>
<rules
    xmlns="http://namespaces.plone.org/diazo"
    xmlns:css="http://namespaces.plone.org/diazo/css">

  <rules css:if-content="body.section-front-page.template-document_view)">
  <!-- here you put rules for the front page only -->
  </rules>

  <rules css:if-content="body:not(.section-front-page.template-document_view)">
    <after css:content-children="head">
      <style>
      #some-div { margin: 0 2.25em; }
      </style>
    </after>
  </rules>

</rules>

Например, указав.template-document_view, вы не будете зацикливаться на экране @@manage-portlets дома.

Другие вопросы по тегам