Самые популярные товары (xslt) — различия между версиями
Stexe (обсуждение | вклад) |
Mad grant (обсуждение | вклад) |
||
(не показаны 2 промежуточные версии 2 участников) | |||
Строка 1: | Строка 1: | ||
− | [[category:Модуль Каталог]] | + | [[category:Модуль Каталог]][[Категория:Написание кастомных макросов]][[Категория: Верстка в XSLT]] |
+ | '''Актуально для версии 2.9''' | ||
В данной статье рассматривается создание счетчика посещений товара и вывод 5-ти самых популярных товаров. | В данной статье рассматривается создание счетчика посещений товара и вывод 5-ти самых популярных товаров. | ||
Строка 70: | Строка 71: | ||
По шаблону '''<xsl:template match="udata" mode="top-visits">''' будет выводиться результат usel выборки, то есть 5-ти самых популярных товаров. | По шаблону '''<xsl:template match="udata" mode="top-visits">''' будет выводиться результат usel выборки, то есть 5-ти самых популярных товаров. | ||
− | + | ||
[[Категория:Модуль Каталог]] | [[Категория:Модуль Каталог]] |
Текущая версия на 08:34, 5 июня 2013
Актуально для версии 2.9
В данной статье рассматривается создание счетчика посещений товара и вывод 5-ти самых популярных товаров.
Для начала в модуле "Шаблоны данных" для типа данных "Объект каталога" создадим группу полей "Статистика" и поле "Количество посещений". Идентификатор данного поля нужно назвать "visits_count" без кавычек, также должна быть указана опция "Видимое".
Далее, добавляем в файл classes\modules\catalog\__custom.php код кастомного макроса, который будет при каждом посещении товара увеличивать значение поля "Количество посещений" на единицу:
public function counter($page_id) {
$hierarchy = umiHierarchy::getInstance();
$element = $hierarchy->getElement($page_id);
$temp = $element->getValue("visits_count"); // Идентификатор поля из шаблона данных
++$temp;
$element->setValue("visits_count", $temp); // Идентификатор поля из шаблона данных
$element->commit();
return $page_id;
Файл \classes\modules\catalog\permissions.custom.php должен быть следующего содержания:
<?php
$permissions = array(
'tree' => array(),
'view' => array('counter')
);
?>
Вызов данного макроса нужно добавить в шаблон по выводу карточки товара. В демонстрационном шаблоне demodizzy файл templates\demodizzy\xslt\modules\catalog\object-view.xsl шаблон <xsl:template match="udata" mode="object-view">. Вызов макроса выглядит следующим образом:
<xsl:apply-templates select="document(concat('udata://catalog/counter/', page/@id))" />
,где page/@id - id объекта каталога
Для вывода 5-ти самых популярных товаров воспользуемся usel выборкой (выбираем все объекты каталога, сортируем их по убыванию значения поля "Количество посещений" и берем первые 5 из них).Назовем файл top_visits.xml и добавим в него следующее содержание:
<?xml version="1.0" encoding="utf-8"?>
<selection>
<target result="pages">
<type module="catalog" method="object" />
</target>
<sort order="descending">visits_count</sort>
<limit page="0">5</limit>
</selection>
Вызов получения результатов выборки:
<xsl:apply-templates select="document('usel://top_visits/')" mode="top-visits" />
Добавим файл шаблона top_visits.xsl и подключим его в одном из файлов common.xsl или default.xsl в зависимости от того, в каком файле у Вас подключаются шаблоны: <xsl:include href="top_visits.xsl" /> Содержание файла top_visits.xsl с пустым шаблоном будет выглядеть следующим образом:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:umi="http://www.umi-cms.ru/TR/umi">
<xsl:template match="udata" mode="top-visits">
</xsl:template>
</xsl:stylesheet>
По шаблону <xsl:template match="udata" mode="top-visits"> будет выводиться результат usel выборки, то есть 5-ти самых популярных товаров.