Самые популярные товары (xslt)

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

Актуально для версии 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-ти самых популярных товаров.