- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Подскажите как реализовать в xsl вывод списка в два столбца? Мучаю hostcms.
Вот код строки - в данном случае в обоих столбцах выводится одно и то же содержание. а мне нужно разное... чтоб каждый item в своей ячейке выводился
Сдается мне, что вывод надо не в этом шаблоне организовывать, а в том месте, где перебираются blocks/items/item.
Я вот как пытался:
<xsl:if test="position() mod 2 != 0">
<div class="rowContent">
<div class="левый столбец">контент</div>
</xsl:if>
<xsl:if test="position() mod 2 = 0">
<div class="правый столбец">контент</div>
</div>
</xsl:if>
</xsl:template>
Но ругается, т.к. div'ы не закрыты в каждом "if"...
Насколько я понимаю xslt, в этот шаблон будет передаваться только один элемент blocks/items/item, поэтому логику отображения надо делать не в этом месте. Но по этому поводу я могу и ошибкаться.
Вариант 1. Если непринципиально в каком порядке выводить
<xsl:template match="blocks/items">
<div class="rowContent">
<div class="левый столбец">
<!-- сюда попадут в обработку четные узлы -->
<xsl:apply-templates select="item[position() mod 2 = 0]" />
</div>
<div class="правый столбец">
<!-- сюда попадут в обработку четные узлы -->
<xsl:apply-templates select="item[position() mod 2 = 1]" />
</div>
</div>
</xsl:template>
<xsl:template match="item">
Код для вывода столбца
</xsl:template>
Вариант 2. Если нужно выводить строго по порядку
<xsl:template match="blocks/items">
<!-- определяем количество строк -->
<xsl:variable name="N" select="count(item) div 2" />
<div class="rowContent">
<div class="левый столбец">
<!-- сюда попадут в обработку первая половина узлов -->
<xsl:apply-templates select="item[position() <= $N]" />
</div>
<div class="правый столбец">
<!-- сюда попадет в обработку вторая половина узлов -->
<xsl:apply-templates select="item[position() > $N]" />
</div>
</div>
</xsl:template>
<xsl:template match="item">
Код для вывода столбца
</xsl:template>
---------- Добавлено в 08:28 ---------- Предыдущее сообщение было в 08:04 ----------
Если вообще по типу таблички тогда вот так:
<xsl:template match="blocks/items[position() mod 2 = 0]">
<xsl:if test="position() mod 2 = 0">
<div class="rowContent">
<div class="левый столбец"><xsl:apply-templates/></div>
<div class="правый столбец">
<xsl:apply-templates select="following-sibling::item[position() = 1]"></xsl:apply-templates>
<!-- то же самое select="../item[position()+1]" -->
</div>
</div>
</xsl:if>
</xsl:template>