How To: Метки магазина (облако тегов)
Показ облака тегов для меток магазинов осуществляется с использованием метода show(), контроллера показа меток магазинов Shop_Controller_Tag_Show().
Контроллер принимает экземпляр объекта Shop_Model в качестве параметра, а настройка показа осуществляется через методы контроллера:
- xsl() — принимает XSL-шаблон через экземпляр объекта Xsl_Model;
- group($id) — принимает идентификатор группы товаров или массив идентификаторов;
- offset($offset) — смещение, с которого выводить метки. По умолчанию 0;
- limit($limit) — количество выводимых меток.
<?php // Метки if (Core::moduleIsActive('shop') && Core::moduleIsActive('tag')) { $Shop_Controller_Tag_Show = new Shop_Controller_Tag_Show( Core_Entity::factory('Shop', 1) ); // Показывать метки только для товаров текущей группы if (is_object(Core_Page::instance()->object) && get_class(Core_Page::instance()->object) == 'Shop_Controller_Show' && Core_Page::instance()->object->group) { $Shop_Controller_Tag_Show->group(Core_Page::instance()->object->group); } $Shop_Controller_Tag_Show ->xsl( Core_Entity::factory('Xsl')->getByName('ОблакоТэговМагазина') ) ->show(); } ?>
Пример структуры облака тегов для меток:
<p class="h1 red">Метки</p> <div class="TagsCloud"> <a style="font-size: 9pt" href="/shop/tag/ajax/">ajax</a> <a style="font-size: 10pt" href="/shop/tag/HostCMS/">HostCMS</a> </div>
XSL-шаблон для отображения облака тегов:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:hostcms="https://www.hostcms.ru/"
exclude-result-prefixes="hostcms">
<xsl:output xmlns="http://www.w3.org/TR/xhtml1/strict"
doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
encoding="utf-8" indent="yes" method="html"
omit-xml-declaration="no" version="1.0" media-type="text/xml"/>
<!-- ОблакоТэговМагазина -->
<xsl:template match="/">
<xsl:apply-templates select="/shop"/>
</xsl:template>
<xsl:template match="/shop">
<xsl:if test="count(tag) != 0">
<p class="h1 red">Метки</p>
<xsl:variable name="max_tag_count" select="(/shop/tag/count[not(. < /shop/tag/count)])[1] - 1"/>
<xsl:variable name="max_size" select="16"/>
<xsl:variable name="min_size" select="9"/>
<xsl:variable name="coeff_size">
<xsl:choose>
<xsl:when test="$max_tag_count > 0">
<xsl:value-of select="($max_size - $min_size) div $max_tag_count"/>
</xsl:when>
<xsl:otherwise>0</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<div class="TagsCloud">
<xsl:apply-templates select="tag">
<xsl:with-param name="min_size" select="$min_size"/>
<xsl:with-param name="coeff_size" select="$coeff_size"/>
</xsl:apply-templates>
</div>
</xsl:if>
</xsl:template>
<!-- Облако из групп -->
<xsl:template match="tag">
<xsl:param name="min_size"/>
<xsl:param name="coeff_size" select="10"/>
<!-- Нужный размер шрифта вычисляется по формуле $min_size + количество * $coeff_size -->
<xsl:variable name="size" select="round($min_size + ((count - 1) * $coeff_size))"/>
<xsl:variable name="group_path">
<xsl:if test="/shop/ПутьКГруппе/node()">
<xsl:value-of select="/shop/ПутьКГруппе" />
</xsl:if>
</xsl:variable>
<a href="{/shop/url}{$group_path}tag/{urlencode}/" style="font-size: {$size}pt" hostcms:id="{@id}" hostcms:field="name" hostcms:entity="tag"><xsl:value-of select="name"/></a><xsl:text> </xsl:text>
</xsl:template>
</xsl:stylesheet>
Не нашли ответ на свой вопрос в документации? Направьте обращение в службу поддержки или онлайн чат.