Битрикс изменение свойств заказа 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;
}

Lazyload Битрикс (ленивая загрузка картинок)

Для ускорения загрузки сайта, часто применяется laziload картинок, то есть загружаются только те картинки, которые попадают в область видимости.
В битриксе можно настроить так:

BX.ready(function() {
	setTimeout(function() {
		BX.LazyLoad.showImages(true);
		window.addEventListener("scroll", BX.LazyLoad.onScroll);
	}, 0);
});
<img id="product_image_<?=$arItem['ID']?>"										  class=""										    src="<?=SITE_TEMPLATE_PATH?>/images/loader.gif"											data-src="<?=$img['src']?>"										    alt="<?=$a_alt;?>" title="<?=$a_title;?>"								/>										<script>BX.LazyLoad.registerImage("product_image_<?=$arItem['ID']?>");</script>

Битрикс доработка модуля яндекс маркет

В маркетплейса Битркиса есть модуль https://marketplace.1c-bitrix.ru/solutions/yandex.market/ который подготавливает прайс-лист для Маркета и Беру.
Задача: наличие товара задается в дополнительном св-ве, а не используется стандартный функционал Битрикса, нужно испольуя это свойство корректно заполнить прайс

Для этого в настройках модуля, в сопоставлении полей полю available сопоставляем наше свойство. При отсутсвии товара, в свойстве передается значение Под заказ
В init.php добавляем следующий обработчик:

use Bitrix\Main;
use Yandex\Market;

$eventManager = Main\EventManager::getInstance();

$eventManager->addEventHandler('yandex.market', 'onExportOfferExtendData', function(Main\Event $event) {

    /** @var $tagValueList Market\Result\XmlValue[] */
    $tagValueList = $event->getParameter('TAG_VALUE_LIST');

    foreach ($tagValueList as $elementId => $tagValue)
    {
        $available = $tagValue->getTagAttribute('offer', 'available');
        if($available == 'Под заказ'){
            $tagValue->setTagAttribute('offer', 'available', 0);
        }
    }

});

Битрикс24 отключение уведомлений в коробке

Задача: не слать уведомления при добавлении контакта и когда пользователь перестает быть ответственным за контакт.

Реализуется через обработчик, размещается в init.php

// уведомления
 AddEventHandler("im", "OnBeforeMessageNotifyAdd", "___OnBeforeMessageNotifyAdd");

function ___OnBeforeMessageNotifyAdd($arFields){
  
    if($arFields['TO_USER_ID'] == 284 && 
   (
      substr_count($arFields['MESSAGE'], 'Вы назначены ответственным за контакт') > 0 || 
      substr_count($arFields['MESSAGE'], "Вы перестали быть ответственным за контакт") > 0
   )
){
    return false; 
    }  
}

Битрикс24 (коробка) отметка прочитанные уведомления

Часто в уведомления падают куча сообщений, от скриптов, ботов, бизнес-процессов. Терять их не хочется, но и читать каждое нет времени. «Прочитать» их можно следующим образом:

CModule::IncludeModule("im");

$im = new CIMNotify($userId);
$notRead = $im->GetUnreadNotify();
$ids = array_keys($notRead['notify']);
if($ids){
    foreach ($ids as $value) {
        $im->MarkNotifyRead($value);
    }
}

Opencv python поиск лиц на фото

import cv2
image_path = "1.jpg"
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
image = cv2.imread(image_path)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(
    gray,
    scaleFactor= 1.1,
    minNeighbors= 5,
    minSize=(10, 10)
)
faces_detected = "Лиц обнаружено: " + format(len(faces))
print(faces_detected)
# Рисуем квадраты вокруг лиц
for (x, y, w, h) in faces:
    cv2.rectangle(image, (x, y), (x+w, y+h), (255, 255, 0), 2)
# viewImage(image,faces_detected)

cv2.imshow("Original image", image)
cv2.waitKey(0)

Битрикс: скачать и распаковать многотомный архив бекапа в Windows

Так как у меня установлен wget, то и скачивать буду им. Для этого нужно создать файл с перечнем всех частей, например url.txt с содержимым:

https://blablabla.ru/bitrix/backup/blablabla_20191127_191708_nosql_9cb4a562.tar.gz
https://blablabla.ru/bitrix/backup/blablabla_20191127_191708_nosql_9cb4a562.tar.gz.1
https://blablabla.ru/bitrix/backup/blablabla_20191127_191708_nosql_9cb4a562.tar.gz.2
...
...
...
...
https://blablabla.ru/bitrix/backup/blablabla_20191127_191708_nosql_9cb4a562.tar.gz.25

Далее запускаем wget:

wget -P D:\ -i D:\url.txt

-P — в какую папку сохранять

-i — файл с перечнем архивов

Объединяем файлы в один, выполнив в cmd:

type blablabla_20191127_191708_nosql_9cb4a562.tar.gz* >> arch.tar.gz

И затем, я использовал 7-zip архиватор, для разархивирования, получившегося архива

Битрикс24(коробка) уведомления только с упоминанием

Упоминания о комментариях в задачах, только если есть упоминание пользователя

AddEventHandler("im", "OnBeforeMessageNotifyAdd", "___OnBeforeMessageNotifyAdd");

function ___OnBeforeMessageNotifyAdd($arFields)
{
    if($arFields['NOTIFY_MODULE'] == 'tasks' && $arFields['NOTIFY_EVENT'] == 'comment'){

        $rsUser = CUser::GetByID($arFields['TO_USER_ID']);
        $arUser = $rsUser->Fetch();
        $name = $arUser['NAME'].' '.$arUser['LAST_NAME'];

        if(substr_count($arFields['PUSH_MESSAGE'], $name) == 0){
            return false;
        }
    }
    
}
$arFields['NOTIFY_MODULE'] == 'tasks' - уведомления из задач
$arFields['NOTIFY_EVENT'] == 'comment' - комментарии