Битрикс: подключение стилей и скриптов при вызове компонента через ajax

Если компонент вызывается через ajax, то css и js не подключается, можно пойти путем вынесения этих стилей в общий, для всего сайта или воспользоваться методом:

$APPLICATION->ShowAjaxHead();

Разместив его в обработчике ajax запроса, перед вызовом компонента. Так же необходимо подключение пролога:

require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");

Сохранение Utm меток в Cookie wordpress

Для отслеживания рекламных каналов используются utm метки, их можно получить при заходе посетителя. Но если посетитель пошел дальше по страница то они из url удалятся, при этом utm метки могут понадобиться, например при заполнении форм.
Для этого сохраним их в куки И когда надо, достанем оттуда

Читать далее «Сохранение Utm меток в Cookie wordpress»

Битрикс: получить название полей таблицы Highload-блока

При работе с Highload-блоками бывает необходимо получить название полей, а так как они хранятся в отдельной таблице, то в этом поможет код ниже. Найденный на просторах исходников Битрикса. Первый параметр — сам HL блок, второй — массив полей, третий — язык

global $USER_FIELD_MANAGER;

$fields = $USER_FIELD_MANAGER->getUserFieldsWithReadyData(
	'HLBLOCK_11',
	array(),
	LANGUAGE_ID
);

API Почта России отправка писем и посылок, создание заказа на PHP

Так как на оф.сайте пример только для python`на, решил поделиться. Для тех кто не хочет потрать кучу времени на непонятную ошибку типа :
[timestamp] => 2018-01-31T08:31:48+0300
[status] => 400
[error] => Bad Request
[exception] => org.springframework.http.converter.HttpMessageNotReadableException
[message] => Bad Request
[path] => /1.0/user/backlog

$data = array("address-type-to" => "DEFAULT",
    "given-name" => "Иван",
    "house-to" => "37",
    "index-to" => 117105,
    "mail-category" => "ORDINARY",
    "mail-direct" => 643,
    "mail-type" => "POSTAL_PARCEL",
    "mass" => 1000,
    "middle-name" => "Иванович",
    "order-num" => "001",
    "place-to" => "г Москва",
    "region-to" => "г Москва",
    "street-to" => "ш Варшавское",
    "surname" => "Иванов",
    "tel-address" => 79459562067,
    "transport-type" => "SURFACE"
);

$json = '['.json_encode($data).']';
                                                             
$request = curl_init('https://otpravka-api.pochta.ru/1.0/user/backlog');
$headers[] = 'Authorization: AccessToken hsdgfbnytvstdblsudtybsuftlsuf';
$headers[] = 'X-User-Authorization: Basic jhn;dfghligulGLGb68wur423vcterterrtyrGFgfGFD';
$headers[] = 'Content-Type: application/json';
$headers[] = 'Accept: application/json;charset=UTF-8';
$headers[] = 'Content-Length: ' . strlen($json);
curl_setopt($request, CURLOPT_POSTFIELDS, $json);
curl_setopt($request, CURLOPT_HTTPHEADER, $headers);
curl_setopt($request, CURLOPT_RETURNTRANSFER, true);
curl_setopt($request, CURLOPT_CUSTOMREQUEST, 'PUT');
$return = curl_exec($request);

$result = json_decode($return);

Битрикс добавление купона D7

DISCOUNT_ID — ID скидки (правило корзины)
$days — кол-во дней, сколько будет действовать скидка
$coupon — вернется код купона

$activeFrom = new \Bitrix\Main\Type\DateTime();
$activeTo = new \Bitrix\Main\Type\DateTime();
$activeTo = $activeTo->add($days.' day');
$coupon = \Bitrix\Sale\Internals\DiscountCouponTable::generateCoupon(true);
$addDb = \Bitrix\Sale\Internals\DiscountCouponTable::add(array(
                'DISCOUNT_ID' => 3,
                'COUPON' => $coupon,
                'TYPE' => \Bitrix\Sale\Internals\DiscountCouponTable::TYPE_ONE_ORDER,
                'ACTIVE_FROM' => $activeFrom,
                'ACTIVE_TO' => $activeTo,
                'MAX_USE' => 1,
                // 'USER_ID' => 0,
                'DESCRIPTION' => ''
            ));
if ($addDb->isSuccess()){
   echo $coupon;
} else {
   echo $addDb->getErrorMessages();
}

Удалить товары из умного фильтра

Стояла задача убрать из умного фильтра товары, которые были отмечены как распроданные. При этом активны на сайте. Решил через удаление их из фасетного индекса.

$arSelect = Array("ID", "IBLOCK_ID", "NAME");//IBLOCK_ID и ID обязательно должны быть указаны, см. описание arSelectFields выше
$arFilter = Array("IBLOCK_ID"=>60, "ACTIVE_DATE"=>"Y", "ACTIVE"=>"Y", "PROPERTY_SOLD" => "Y");
$res = CIBlockElement::GetList(Array(), $arFilter, false, array("nPageSize" => 50, "iNumPage" => $i), $arSelect);
while($ob = $res->GetNextElement()){ 
	$arFields = $ob->GetFields(); 
	\Bitrix\Iblock\PropertyIndex\Manager::deleteElementIndex(60, $arFields["ID"]);
	echo "<br>";
}
$i++;
echo "<meta http-equiv='refresh' content='1; url=?i=".$i."' />";

Удаляется за раз 50 элементом, затем страница перезагружается(работает в браузере, возможно переделаю для запуска в консоли).

Битрикс изменение свойств заказа D7

$_REQUEST[‘order_id’] — id заказа

$_REQUEST[‘data’] — массив свойств вида ID_св-ва =>значение

global $USER;
 
$order = Bitrix\Sale\Order::load($_REQUEST['order_id']);
 
$propertyCollection = $order->getPropertyCollection();
$ar = $propertyCollection->getArray();
 
foreach ($ar['properties'] as $key => $value) {
    if($_REQUEST['data'][$value['ID']]){
        $orderPropValue = $propertyCollection->getItemByOrderPropertyId($value['ID']);
        $orderPropValue->setValue(iconv("UTF-8", "WINDOWS-1251", $_REQUEST['data'][$value['ID']]));
    }
}
$propertyCollection->save();

Битрикс, пагинация в старом ядре

В данном примере получаем массив пользователей $arResult[‘ITEMS’] и Html код пагинации $arResult[‘NAV_STRING’] с дефолтным шаблоном.

$filter = ["GROUPS_ID" => [38]];
$select = [
	'FIELDS' => [
		'LAST_NAME',
		'NAME',
		'ID',
		'PERSONAL_CITY',
		'PERSONAL_PHONE'
	],
	'SELECT' => [
		'UF_*'
	],
	'NAV_PARAMS' => [
		"nPageSize" => 50
	]
];
$rsUsers = CUser::GetList(($by = "NAME"), ($order = "desc"), $filter, $select);
$rsUsers->NavStart(0);
$arResult['NAV_STRING'] = $rsUsers->GetPageNavStringEx($navComponentObject, "Элементов:", "");
while ($arUser = $rsUsers->Fetch()) {
    $arResult['ITEMS'][] = $arUser;
}