Настраиваем период активности акции на 1С-Битрикс

1С-Битрикс

К сожалению, разработчики Битрикса не придумали возможности задать расписания для акции, поэтому нам с Вами приходится извращаться и искать окольные пути.

Поэтому приступим к очередной надстройке для битрикса.

Для этого нам понадобиться создать агента и запускать его.

К примеру, хотим чтобы акция была ночная с 11 часов вечера до 7 утра. Агент будет выглядеть следующим образом:

function ReActiveDiscount(){
	global $USER;
	if (!is_object($USER)) $USER = new CUser;
	$hours=date("H");
	$minutes = date("i");
	CModule::IncludeModule('catalog');

	if ($hours>=23 && $hours<7){
		CCatalogDiscount::Update(11, array("ACTIVE" => "Y"));
	}
	else{
		CCatalogDiscount::Update(11, array("ACTIVE" => "N"));
	}
	
	return "ReActiveDiscount();";
}

Ничего особенно в нем нет, используя API битрикса мы производим проверку по времени, время серверное, и если попадает под условие, то активируем её, в противном случаее в остальное время её отключаем

В функцию CCatalogDiscount::Update первым параметром передает ID правила (акции) для которого необходимо производить данные манимуляции.

 

Иногда верхний код может не сработать, от версии к версии, причин много на это может быть и можно воспользоваться таким кодом.

function ReActiveDiscount(){
	global $USER;
	if (!is_object($USER)) $USER = new CUser;
	$hours=date("H");
	$minutes = date("i");
	CModule::IncludeModule('catalog');

	if ($hours>=23 && $hours<7){
		$dbProductDiscounts = CCatalogDiscount::GetList(
			array("SORT" => "ASC"),
			array(),
			false,
			false,
			array("ID", "ACTIVE")
		);
		while ($arProductDiscounts = $dbProductDiscounts->Fetch())
		{
			if ($arProductDiscounts["ID"]=="11"){
				$znak=CCatalogDiscount::Update($arProductDiscounts["ID"], array("ACTIVE" => "Y"));
			}
		}
	}
	else{
		$dbProductDiscounts = CCatalogDiscount::GetList(
			array("SORT" => "ASC"),
			array("ACTIVE" => "Y", ),
			false,
			false,
			array("ID", "ACTIVE")
		);
		while ($arProductDiscounts = $dbProductDiscounts->Fetch())
		{
			if ($arProductDiscounts["ID"]=="11"){
				$znak=CCatalogDiscount::Update($arProductDiscounts["ID"], array("ACTIVE" => "N"));
			}
		}
	}
	
	return "ReActiveDiscount();";
}