Нюансы интернет магазина современный (xslt) — различия между версиями
SerjK (обсуждение | вклад) (Новая страница: «'''Задача:''' Отсортировать товары в каталоге по алфавиту, чтобы сортировка была не только в …») |
(нет различий)
|
Версия 06:23, 29 декабря 2011
Задача: Отсортировать товары в каталоге по алфавиту, чтобы сортировка была не только в панели администрирования, но и на сайте.
Решение:Если необходимо отсортировать объекты каталога на сайте, то необходимо отредактировать xsl-шаблон, в котором происходит вызов catalog getObjectsList, на сайте "Интернет-магазин современный" это файл: \xsltTpls\modules\catalog\category-view.xsl
в нем необходимо строку:
<xsl:apply-templates select="document(concat('udata://catalog/getObjectsList/', page/@id, '////2/'))/udata" />
изменить на:
<xsl:apply-templates select="document(concat('udata://catalog/getObjectsList/', page/@id, '////2/h1/1'))/udata" />
т.е. "h1/1" - это поле по которому будет сортировка и порядок сортировки: [1].
Задача:Как сделать активной ссылку (напр. на производителя) в характеристиках товара?
Решение:Чтобы ссылка стала активной, необходимо в шаблоне вывода предусмотреть для соответствующего поля конструкцию вида: <a href="{поле_с_сылкой}"><xsl:value-of select="поле_с_ссылкой" /></a>. Тогда ссылка будет активной. Более подробно, напримемер, товар в интернет-магазине сортируется по производителям, их несколько,необходимо сделать ссылку на сайт производителя прямо из характеристик товара: если поле Бренд это выпадающий список, то обработка поля происходит в файле:
xsltTpls/modules/data/properties.xsl в блок:
<xsl:template match="value/item[position() = last()]">
<xsl:value-of select="@name" />
</xsl:template><source lang="java">
средствами xslt можно вставить проверку, если @name = ' MULTIPOWER' то вывести <a href="http://MULTIPOWER.ru">MULTIPOWER</a>,
можно использовать подобную конструкцию:
<source lang="java"><xsl:template match="value/item[position() = last()]">
<xsl:choose>
<xsl:when test="@name = 'Proizvoditel'">
<a href="http://Proizvoditel.ru">Производитель1</a>
</xsl:when>
<xsl:when test="@name = 'MULTIPOWER2'">
<a href="http://Proizvoditel.ru">Производитель2</a>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="@name" />
</xsl:otherwise>
</xsl:choose>
</xsl:template>
Задача:Как изменить ширину всего шаблона и где меняются размеры (напр. меню каталога слева)?
Решение: Ширина элементов шаблона страниц не изменяется с помощью средств системы. То есть, это вопрос не работы системы, а является вопросом верстки.
Как правило ширина блоков задается в CSS-файлах. В системе они находятся в папке /css/. Для анализа CSS-стилей на сайте удобно использовать приложение [2] в браузере FireFox. Например, можно увидеть, что ширина левого меню на вашем сайте задается классом "left". Таким образом, для изменения его ширины необходимо найти файл, в котором задается описание этого класса и отредактировать значение ширины: [3]
Задача:Где задаются размеры раздела "Описание" для товаров.
Решение: Как и в предыдущем решении нужно менять css-стили. Но здесь мы рассмотрим это подробнее. Для вывода описания, по умолчанию используется вызов: <xsl:apply-templates select=".//property[@name = '&property-description;']" />
в файле \xsltTpls\modules\catalog\object-view.xsl
в этом же файле находится шаблон обработчик:
<xsl:template match="property[@name = '&property-description;']">
<div class="descr">
<h4>
<xsl:text>&item-description;:</xsl:text>
</h4>
<div umi:element-id="{../../../@id}" umi:field-name="{@name}" umi:empty="&item-description;">
<xsl:value-of select="value" disable-output-escaping="yes" />
</div>
</div>
</xsl:template>
Скорее всего, необходимо будет редактировать стили в файле modules.css, для:
div.image { float: left; width: 280px;}
и:
div.descr {margin-left: 285px;}
Ширина изображения задается в этом блоке:
<xsl:call-template name="catalog-thumbnail">
<xsl:with-param name="element-id" select="page/@id" />
<xsl:with-param name="field-name">photo</xsl:with-param>
<xsl:with-param name="width">281</xsl:with-param>
</xsl:call-template>