Использование путей 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 дома.