Как преобразовать блок содержимого из plone, вставляемого в тему diazo

#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