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> | ||