1c-bitrix

Замена CUser::GetParam()

/**
 * Возвращает все данные текущего пользователя, можно выбрать 1 параметр по ключу, можно указать ID другого пользователя
 * @param string $s_ParamKey - Ключ поля CUser
 * @param intval $i_UserID - ID пользователя данные которогонужно выбрать
 * @return mixed
 */
public static function getUserParams($s_ParamKey = false, $i_UserID = false)
{
	global $USER;
	if( ! $i_UserID && ! $USER->IsAuthorized() )
		return; 	
	
	$ar_User = CUser::GetByID( ( intval($i_UserID) > 0 ) ? intval($i_UserID) : $USER->GetID() )->Fetch();
	return (!$s_ParamKey) ? $ar_User : $ar_User[$s_ParamKey]; 
}

Вместо ущербного CUser::GetParam()

1С-Битрикс, добавить логотип к службе доставки CSaleDelivery::Add()

Чтобы добавить логотип при добавлении настраиваемой службы доставки, нужно добавить ключ: LOGOTIP

$ar_Fields = array(
    'NAME'  => 'New drlivery',
    ...
    'LOGOTIP' => CFile::MakeFileArray($_SERVER["DOCUMENT_ROOT"].$s_ImagesPatch)
);
if($i_NewID = CSaleDelivery::Add($ar_Fields))
{
}

Лайфхак для CUser::Register() [bitrix api]

CUser::Register() регистрирует нового пользователя и отправляет ему типовое письмо о успешной регистрации, смене пароля и тд. Иногда нужно чтобы это не происходило.

1) Можно удалить шаблоны (не рекомендуется)
2) Есть вариант при котором письма не отправятся, 7 параметр [string site_id = false], ID сайта почтовых шаблонов, если указать не существующий ID сайта, то и не будет шаблонов и как следствие писем.

global $USER; 
$USER->Register("admin", "", "", "123456", "123456", "a@m.ru", "no_send");

Особенность Add2BasketByProductID() [bitrix api]

Итак есть одна особенность у это функции, которая так облегчает нам жизнь. И так суть в том, что когда вы добавляете товар в корзину в кол-ве 10 штук, туда попадает 1 или 4 и т.д. В общем кол-во не всегда правильное и это сбивает с толку.

Continue reading

Предыдущий следующий элемент массива по кругу [php]

Для формирования ссылок на детальных страниц нужно искать предыдущий и следующий элемент, для построения url.

Это первое способ, собрать все ID в массив и найти prev и next. Второй способ если у вас много элементов, использовать pagination (постраничну навигацию) с настройкой списка в 1 элемент.

Snippet для 1 случая:

// массив с ID
$ar_ElementID = array();

// текущий ID (должен присутствовать в $ar_ElementID)
$i_CurrentID = 777

// находим текущий ключ
$i_KeyCurrent =	array_search($i_CurrentID, $ar_ElementID);

// кол-во элементов в массиве
$i_CountElement = count($ar_ElementID);


/* коротко */

	// слудеющий ID	
	$i_NextID = ( $i_KeyCurrent !== ($i_CountElement -1) ) 
		? $ar_ElementID[$i_KeyCurrent + 1] : 0;

	// предыдущий ID
	$i_PrevID = ( $i_KeyCurrent == 0 ) 
		? $ar_ElementID[$i_CountElement - 1] : $ar_ElementID[$i_KeyCurrent - 1];


/* длинно */

	// слудеющий ID	
	if($i_KeyCurrent !== ($i_CountElement -1) )
	{
		$i_NextID = $ar_ElementID[ $i_KeyCurrent + 1 ];
	}	
	else 
	{
		$i_NextID = 0;
	}	
		
	// предыдущий ID
	if($i_KeyCurrent == 0 )
	{
		$i_PrevID = $ar_ElementID[$i_CountElement - 1];
	}	
	else
	{
		$i_PrevID = $ar_ElementID[$i_KeyCurrent - 1];
	}