Как включить шаблон во все страницы
Я хочу включить дизайн во все страницы, для этого я установил макет главной страницы, он отлично работает. Затем я хочу добавить некоторые части на каждую страницу моего сайта, я также сделал это, создав служебную страницу, но проблема Это повторяет все содержимое. вот мой код
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/data">
<h1><xsl:value-of select="$page-title"/></h1>
<ul><xsl:apply-templates select="/categories/entry"/></ul>
</xsl:template>
<xsl:template match="categories/entry">
<div class="left_wrap">
<div class="large_video"><img src="{$workspace}/images/video.jpg" style="border:#393939 solid 1px;" /></div>
<div class="title1">Categories<img src="{$workspace}/images/arrow.jpg" /></div>
<div style="float:left; width:680px;">
<div class="category_block">
<div class="category_title"><xsl:value-of select="title"/></div>
<div class="category_image"><img src="{$workspace}/images/politics.jpg" /></div>
<div class="category_info"><xsl:value-of select="description"/></div>
<div class="date"><img src="{$workspace}/images/time.png" style="float:left;"/><p style="float:left; width:120px; margin-left:6px;">2 days ago</p></div>
</div><!--category_block END-->
</div>
</div>
</xsl:template>
</xsl:stylesheet>
Я хочу повторить только div "class='category_block'", но мне нужно все остальное на этой странице. Как это возможно в симфонии? Также я хочу ограничить количество символов описания категории до 100 символов на моей домашней странице, как я могу ограничить это.
1 ответ
Во-первых, ваш <div class="left-wrap">
предназначен для повторения для каждой записи категории, или она должна содержать все категории? Я собираюсь предположить последнее, так как это кажется наиболее логичным, учитывая то, что я вижу здесь.
Если это так, ваш data
Шаблон должен выглядеть так:
<xsl:template match="data">
<h1><xsl:value-of select="$page-title"/></h1>
<xsl:apply-templates select="categories"/>
</xsl:template>
Это будет соответствовать categories
узел и позволяет вам настроить контейнер для всех записей вашей категории:
<xsl:template match="categories">
<div class="left_wrap">
<div class="large_video">
<img src="{$workspace}/images/video.jpg" style="border:#393939 solid 1px;" />
</div>
<div class="title1">Categories<img src="{$workspace}/images/arrow.jpg" /></div>
<div style="float:left; width:680px;">
<ul>
<!-- This will be your repeating block -->
<xsl:apply-templates select="entry"/>
<ul>
</div>
</div>
</xsl:template>
Теперь, когда у вас есть более одного entry
что бы ни было в entry
Шаблон ниже будет повторяться для каждого:
<xsl:template match="categories/entry">
<li>
<div class="category_block">
<div class="category_title">
<xsl:value-of select="title"/>
</div>
<div class="category_image">
<img src="{$workspace}/images/politics.jpg" />
</div>
<div class="category_info">
<xsl:value-of select="description"/>
</div>
<div class="date">
<img src="{$workspace}/images/time.png" style="float:left;"/>
<p style="float:left; width:120px; margin-left:6px;">2 days ago</p>
</div>
</div><!--category_block END-->
</li>
</xsl:template>
Очевидно, я должен был сделать некоторые предположения здесь, поэтому дайте мне знать, если это не совсем то, что вы ищете. Также имейте в виду, что с XSLT всегда есть несколько способов сделать что-то.
Наконец, вам следует немного очистить свою разметку. Много постороннего, несемантического div
и так далее. Ваш <div class="title1">
должен быть заголовок, например. То же самое <div class="category_title">
,
Чтобы ответить на ваш последний вопрос об урезании описания, попробуйте эту утилиту с сайта Symphony.