Нюансы интернет магазина современный (xslt)

Материал из Umicms
Перейти к:навигация, поиск

Задача 1: Отсортировать товары в каталоге по алфавиту, чтобы сортировка была не только в панели администрирования, но и на сайте.

Решение:Если необходимо отсортировать объекты каталога на сайте, то необходимо отредактировать 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].

Задача 2:Как сделать активной ссылку (напр. на производителя) в характеристиках товара?

Решение:Чтобы ссылка стала активной, необходимо в шаблоне вывода предусмотреть для соответствующего поля конструкцию вида: <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>

Задача 3:Как изменить ширину всего шаблона и где меняются размеры (напр. меню каталога слева)?

Решение: Ширина элементов шаблона страниц не изменяется с помощью средств системы. То есть, это вопрос не работы системы, а является вопросом верстки.

Как правило ширина блоков задается в CSS-файлах. В системе они находятся в папке /css/. Для анализа CSS-стилей на сайте удобно использовать приложение [2] в браузере FireFox. Например, можно увидеть, что ширина левого меню на вашем сайте задается классом "left". Таким образом, для изменения его ширины необходимо найти файл, в котором задается описание этого класса и отредактировать значение ширины: [3]

Задача 4:Где задаются размеры раздела "Описание" для товаров.

Решение: Как и в предыдущем решении нужно менять 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>