<?php defined('HOSTCMS') || exit('HostCMS: access denied.'); /** * v. 1.2 * для HostCMS v.6x * @author KAD * http://www.artemkuts.ru/ * artem.kuts@gmail.com */ /* * В ТДС перед вызовом show() * Kad_Shop_Producer_Filter::instance()->execute($Shop_Controller_Show); * * В xsl для флажков <!-- Шаблон для фильтра производителей ФЛАЖКИ--> <xsl:template match="producers/shop_producer"> <xsl:variable name="id" select="@id"/> <input type="checkbox" name="producer[]" value="{@id}" id="producer_{@id}"> <xsl:if test="/shop/filters/used/producers[producer=$id]/node()"> <xsl:attribute name="checked">checked</xsl:attribute> </xsl:if> </input> <label for="producer_{@id}"><a href="javascript:void(0)" onclick=" $('[id^=producer_]').prop('checked', false); $('#producer_{@id}').prop('checked', true);$('#producer_{@id}').closest('form').submit();"><xsl:value-of select="name"/></a></label> </xsl:template> * В xsl для списка <!-- Шаблон для фильтра производителей СПИСОК--> <xsl:template match="producers/shop_producer"> <xsl:variable name="id" select="@id"/> <option value="{@id}"> <xsl:if test="/shop/filters/used/producers[producer=$id]/node()"> <xsl:attribute name="selected">selected</xsl:attribute> </xsl:if> <xsl:value-of select="name"/> </option> </xsl:template> * Вызов в шаблоне <select name="producer"> <option>...</option> <xsl:apply-templates select="/shop/producers/shop_producer"/> </select> * Далее заменяем код переменной filter <!-- Передаем фильтр --> <xsl:variable name="filter"><xsl:if test="/shop/filter/node()">?filter=1&sorting=<xsl:value-of select="/shop/sorting"/>&price_from=<xsl:value-of select="/shop/price_from"/>&price_to=<xsl:value-of select="/shop/price_to"/><xsl:for-each select="/shop/*"><xsl:if test="starts-with(name(), 'property_')">&<xsl:value-of select="name()"/>=<xsl:value-of select="."/></xsl:if></xsl:for-each></xsl:if><xsl:if test="/shop/filters/used/producers/node()"><xsl:for-each select="/shop/filters/used/producers/producer">&<xsl:value-of select="name()"/>[]=<xsl:value-of select="."/></xsl:for-each></xsl:if></xsl:variable> * */ class Kad_Shop_Producer_Filter { public $input_name = 'producer'; /** * The singleton instances. * @var mixed */ static public $instance = NULL; /** * Register an existing instance as a singleton. * @return object */ static public function instance() { if (is_null(self::$instance)) { self::$instance = new self(); } return self::$instance; } public function __construct() { } /* * Получаем производителей */ public function getProducers() { $aShop_Producers = Kad_Shop_Producer::getAll($this->Shop_Controller_Show->group, true); return $aShop_Producers; } /* * Добавляем производителей к xml */ public function addToXml($aShopProducers, $aActiveProducers) { $oProducersXmlEntity = Core::factory('Core_Xml_Entity')->name('producers'); $aShopProducers = $this->getProducers(); foreach ($aShopProducers as $oShopProducer) { $oProducersXmlEntity->addEntity( $oShopProducer->clearEntities() ); } $this->Shop_Controller_Show->addEntity($oProducersXmlEntity); if ($aActiveProducers) { $xmlFilters = Core::factory('Core_Xml_Entity')->name('filters'); $xmlUsed = Core::factory('Core_Xml_Entity')->name('used'); $oActiveProducersXmlEntity = Core::factory('Core_Xml_Entity')->name('producers'); foreach ($aActiveProducers as $ActiveProducer) { $oProducerXml = Core::factory('Core_Xml_Entity')->name($this->input_name)->value($ActiveProducer); $oActiveProducersXmlEntity->addEntity($oProducerXml); } $this->Shop_Controller_Show->addEntity($xmlFilters->addEntity($xmlUsed->addEntity($oActiveProducersXmlEntity))); } return true; } /* * Фильтр по производителям */ public function filterProducers($aProducers = array()) { $this->Shop_Controller_Show->shopItems() ->queryBuilder() ->where('shop_items.shop_producer_id', 'IN', $aProducers); $this->Shop_Controller_Show->addCacheSignature( 'producer=' . implode(',', $aProducers)); } public function execute($Shop_Controller_Show = Shop_Controller_Show) { $this->Shop_Controller_Show = $Shop_Controller_Show; $aProducers = Core_Array::getGet($this->input_name); if ($aProducers && !is_array($aProducers)) { $aProducers = array($aProducers); } if (count($aProducers)) { $this->filterProducers($aProducers); } $aShop_Producers = Kad_Shop_Producer::getAll($this->Shop_Controller_Show->group); $this->addToXml($aShop_Producers, $aProducers); } }