#plone #xdv #diazo
#plone #xdv #diazo
Вопрос:
Я использую diazo (в настоящее время plone.app.theming 1.0b1-r48205) с Plone 4.1. Я хочу использовать именно Plone html для виджета поиска, за исключением того, что я хотел бы заменить <input>
элемент, используемый для кнопки поиска в виджете поиска, на <button>
. Документы diazo, похоже, предполагают, что вы можете это сделать.
В моем HTML-файле темы у меня пустой <div id="portal-searchbox"></div>
. В моем rules.xml У меня есть следующее:
<rules if-content="$enabled">
<replace css:theme="div#portal-searchbox">
<xsl:apply-templates css:select="div#portal-searchbox" />
</replace>
<xsl:template css:match="div#portal-searchbox input.searchButton">
<button type="submit"><img src="images/search.png" alt="Search" /></button>
</xsl:template>
</rules>
Я пробовал множество вариантов этого, но безуспешно. Любая помощь была бы высоко оценена.
Комментарии:
1. Мне действительно нужен воспроизводимый пример, чтобы предложить любую помощь здесь. Я предлагаю сократить ваши правила, тему и содержимое до минимума, необходимого для отображения проблемы, а затем опубликовать их где-нибудь, чтобы мы могли посмотреть. Вам нужно убедиться, что пример можно запустить из командной строки (bin/ diazorun — если его там нет, создайте новую часть сборки с помощью zc.recipe.egg recipe и eggs= diazo)
Ответ №1:
Хорошо, итак, работает следующее. Причина, по которой это не работало раньше, заключалась в том, что <xsl:template>
не было в теге правил корневого уровня (там ошибка документации). <xsl:template>
Должно быть в теге правил корневого уровня, потому что в <xsl:template>
данный момент нет способа применить условия правила к.
<xsl:template css:match="div#portal-searchbox input.searchButton">
<button type="submit"><img src="images/search.png" alt="Search" /></button>
</xsl:template>
<replace css:theme="div#portal-searchbox" css:content="div#portal-searchbox"/>
Обновление: я добавил поддержку <replace content="...">
в Diazo, поэтому встроенные <xsl:template>
файлы считаются устаревшими. Вместо этого используйте:
<replace css:content="div#portal-searchbox input.searchButton">
<button type="submit"><img src="images/search.png" alt="Search" /></button>
</replace>
<replace css:theme="div#portal-searchbox" css:content="div#portal-searchbox"/>
Документация на http://diazo.org/advanced.html#modifying-the-content-on-the-fly
Комментарии:
1. Именно так, как предлагает Лоуренс (спасибо Лоуренсу!) — не сработало, потому что я пытался сделать это внутри элемента вложенных правил. Я отредактировал свой вопрос, чтобы прояснить это. Обратите внимание, что в итоге я поместил <xsl:choice> в свой <xsl:template>, так что преобразование произошло только с $ enabled set