• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/discountbase.php
  • Класс: BitrixSaleDiscountBase
  • Вызов: DiscountBase::loadDiscountList
protected function loadDiscountList()
{
	if (empty($this->discountIds))
		return;

	$couponList = DiscountCouponsManager::getForApply(
		array('MODULE_ID' => 'sale', 'DISCOUNT_ID' => $this->discountIds),
		array(),
		true
	);

	$this->saleDiscountCacheKey = md5('D'.implode('_', $this->discountIds));
	if (!empty($couponList))
		$this->saleDiscountCacheKey .= '-C'.implode('_', array_keys($couponList));

	$this->saleDiscountCacheKey .= '-MF'.implode('_', $this->executeModuleFilter);

	if (!isset($this->saleDiscountCache[$this->saleDiscountCacheKey]))
	{
		$currentList = DiscountRuntimeCacheDiscountCache::getInstance()->getDiscounts(
			$this->discountIds,
			$this->executeModuleFilter,
			$this->getSiteId(),
			$couponList?: array()
		);

		if (!empty($currentList))
		{
			$evalCode = '';
			$executeFields = $this->getExecuteFieldList();
			foreach (array_keys($currentList) as $index)
			{
				$discount = $currentList[$index];
				if (!$this->loadDiscountModules($discount['MODULES']))
				{
					unset($currentList[$index]);
					continue;
				}

				foreach ($executeFields as $field)
				{
					if (!empty($discount[$field]))
						$evalCode .= '$currentList['.$index.'][''.self::getExecuteFieldName($field).''] = '.$discount[$field].";n";
				}
			}
			unset($field, $code, $discount, $index, $executeFields);

			if ($evalCode !== '')
			{
				if (PHP_MAJOR_VERSION >= 7)
				{
					try
					{
						eval($evalCode);
					}
					catch (ParseError $e)
					{
						$this->showAdminError();
					}
				}
				else
				{
					eval($evalCode);
				}
			}
			unset($evalCode);
		}

		$this->saleDiscountCache[$this->saleDiscountCacheKey] = $currentList;
	}
	unset($couponList);
}