This shows you the differences between two versions of the page.
koding:hostcms:shop:minmaxpricegroup [06.05.15 в 18:41] Артем Куц создано |
— (current) | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | <code><?php | ||
- | defined('HOSTCMS') || exit('HostCMS: access denied.'); | ||
- | |||
- | /** | ||
- | * | ||
- | * Версия для HostCMS v.6x | ||
- | * @author KAD | ||
- | * http://www.artemkuts.ru/ | ||
- | * artem.kuts@gmail.com | ||
- | * | ||
- | * Копирование и использование файлов модуля | ||
- | * в коммерческих целях ЗАПРЕЩЕНО | ||
- | * | ||
- | Core_Event::attach('Shop_Group_Model.onBeforeGetXml', array('Kad_Shop_Group_Observers_Minmaxpriceob', 'onBeforeGetXml')); | ||
- | * | ||
- | */ | ||
- | |||
- | class Kad_Shop_Group_Observers_Minmaxpriceob | ||
- | { | ||
- | |||
- | // Кэш | ||
- | static public $aCache = NULL; | ||
- | |||
- | /** | ||
- | * The singleton instances. | ||
- | * @var mixed | ||
- | */ | ||
- | static public $instance = NULL; | ||
- | |||
- | public function __construct() | ||
- | { | ||
- | return self::instance(); | ||
- | } | ||
- | |||
- | static public function instance() | ||
- | { | ||
- | if (is_null(self::$instance)) | ||
- | { | ||
- | self::$instance = new self(); | ||
- | } | ||
- | |||
- | return self::$instance; | ||
- | } | ||
- | |||
- | // Добавляем информацию о минимальной и максимальной цене товара в группе | ||
- | static public function onBeforeGetXml($object, $operation) | ||
- | { | ||
- | /*if (CURRENT_SITE != 2) | ||
- | { | ||
- | return; | ||
- | }*/ | ||
- | |||
- | if (!isset(self::$aCache[$object->id])) | ||
- | { | ||
- | // Получаем подгруппы | ||
- | $aGroupsId = array(); | ||
- | $currGroupId = $object->id; | ||
- | $aGroupsId[] = $currGroupId; | ||
- | $aoCurGroups = array(Core_Entity::factory('Shop_group', $currGroupId)); | ||
- | |||
- | do{ | ||
- | $aoParGroups = $aoCurGroups; | ||
- | $aCurGroupsId = array(); | ||
- | $aoCurGroups = array(); | ||
- | |||
- | foreach($aoParGroups as $oParGroup) | ||
- | { | ||
- | $aCurGroupsId[] = $oParGroup->id; | ||
- | $aGroupsId[] = $oParGroup->id; | ||
- | } | ||
- | |||
- | $aGroups = Core_Entity::factory('Shop_group'); | ||
- | $aGroups->queryBuilder() | ||
- | ->where('parent_id', 'IN', $aCurGroupsId); | ||
- | $aoCurGroups = $aGroups->findAll(); | ||
- | }while(count($aoCurGroups) != 0); | ||
- | |||
- | $oQB = Core_QueryBuilder::select(array('max(price)', 'max'), array('min(price)', 'min')) | ||
- | ->from('shop_items') | ||
- | ->where('shop_group_id', 'IN', $aGroupsId); | ||
- | $aRes = $oQB->execute()->asAssoc()->result(); | ||
- | |||
- | $min = $aRes[0]['min']; | ||
- | $max = $aRes[0]['max']; | ||
- | |||
- | self::$aCache[$object->id]['min'] = $min; | ||
- | self::$aCache[$object->id]['max'] = $max; | ||
- | } else | ||
- | { | ||
- | $min = self::$aCache[$object->id]['min']; | ||
- | $max = self::$aCache[$object->id]['max']; | ||
- | } | ||
- | |||
- | $object | ||
- | ->addEntity( | ||
- | Core::factory('Core_Xml_Entity') | ||
- | ->name('min_price') | ||
- | ->value($min) | ||
- | ) | ||
- | ->addEntity( | ||
- | Core::factory('Core_Xml_Entity') | ||
- | ->name('max_price') | ||
- | ->value($max) | ||
- | ); | ||
- | } | ||
- | }</code> |