private:koding:hostcms:modules:shop:groups:minmaxpricegroup

Добавление минимальной и максимальной цены на основе товаров группы и её подгрупп

<?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)
			);
	}
}
private/koding/hostcms/modules/shop/groups/minmaxpricegroup.txt · Last modified: 27.06.17 в 15:36 by maximzasorin_gmail.com