Bitrix получить кол-во элементов в инфоблоке с фильтрами
1 2 3 4 5 6 |
$count = intval(CIBlockElement::GetList(false, [ "IBLOCK_ID" => 5, "PROPERTY_NAME" => 'VALUE', ], ['IBLOCK_ID'])->Fetch()['CNT']); echo $count; |
1 2 3 4 5 6 |
$count = intval(CIBlockElement::GetList(false, [ "IBLOCK_ID" => 5, "PROPERTY_NAME" => 'VALUE', ], ['IBLOCK_ID'])->Fetch()['CNT']); echo $count; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
<?php include $_SERVER['DOCUMENT_ROOT'] . "/standalone.php"; require $_SERVER['DOCUMENT_ROOT'] . "/classes/sberbank.class.php"; $sber = new SberbankController; $sber->setUser('sber Login'); $sber->setPassword('sber Pass'); $sber->setPasswordTest('SberPass test'); $sber->testMode(true); // тестовый режим активирован // Получаем тип объектов $typesCollection = umiObjectTypesCollection::getInstance(); $objectTypeId = $typesCollection->getBaseType('emarket', 'order'); // Здесь id объекта // Получаем объекты $objects = umiObjectsCollection::getInstance(); // фильтрация $sel = new umiSelection; $objectType = $typesCollection->getType($objectTypeId); $sel->addObjectType($objectTypeId); //Устанавливаем фильтр по типу данных $sel->addPropertyFilterEqual($objectType->getFieldId('payment_status_id'), 166); //108 $sel->addPropertyFilterEqual($objectType->getFieldId('status_oplaty_ot_sberbanka'), 1); //Получаем результаты $result = umiSelectionsParser::runSelection($sel); //Массив id объектов $total = umiSelectionsParser::runSelectionCounts($sel); //Количество записей foreach ($result as $orderId) { $obj = $objects->getObject($orderId); $sberId = $obj->getValue('number_sber'); // номер в сбербанке $sumPay = $obj->getValue('summa_oplaty'); // оплачено $sumNeed = $obj->getValue('total_price'); // стоимость заказа $status = $sber->getOrderStatusExtended($sberId); // проверяем статус заявки if ($status->errorCode == 0 && $status->orderStatus == 1) { // проверяем сумму оплаты и сумму заказа $withdraw = ($sumNeed >= $sumPay) ? $sumPay : $sumPay - $sumNeed; // кидаем номер заказа и сумму списания $res = $sber->deposit($sberId, (float) $withdraw * 100); if ($res->errorCode == 0) { $obj->setValue('status_oplaty_ot_sberbanka', 2); $obj->setValue('summa_spisaniya', $withdraw); $obj->setValue('data_spisaniya', date('d.m.Y H:i:s')); $obj->commit(); } } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
<?php require $_SERVER["DOCUMENT_ROOT"] . '/bitrix/modules/main/include/prolog_before.php'; if(!CModule::IncludeModule('highloadblock')) die(); global $USER; if(!$USER->IsAdmin()) die(); use Bitrix\Highloadblock as HL; use Bitrix\Main\Entity; $hlblock = HL\HighloadBlockTable::getById(1)->fetch(); $hlEntity = HL\HighloadBlockTable::compileEntity($hlblock); $entDataClass = $hlEntity->getDataClass(); $sTableID = 'tbl_'.$hlblock['TABLE_NAME']; $arFilter = array("!UF_USER_ID" => NULL, "UF_GIFT" => 4, "!UF_DATET" => NULL); //задаете фильтр по вашим полям $rsData = $entDataClass::getList(array( "select" => array('*'), //выбираем все поля "filter" => $arFilter, "limit" => 5000000, "order" => array("UF_DATET"=>"DESC") // сортировка по полю UF_SORT, будет работать только, если вы завели такое поле в hl'блоке )); $rsData = new CDBResult($rsData, $sTableID); while ($arRes = $rsData->Fetch()) { echo $arRes['UF_DATET'] . "<br/>"; } |
Материалы https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=43&CHAPTER_ID=05745&LESSON_PATH=3913.5062.5745 https://thisis-blog.ru/elementi-highload-bloka/ http://julliet.ru/articles/highload-api.html
Выведем товара у которых есть свойство старая цена (old_price) и отсортируем по цене старой, чтобы элементы которые имеют старую цену в значение 0, передвинуть в самый низ Документация по методу на офф сайте UMI. Сделаем udata запрос (фильтра UMI) метода getSmartCatalog
1 |
udata://catalog/getSmartCatalog/notemplate/220/20/1/2/old_price/0 |
Получим кол-во элементов по фильтру
1 |
<xsl:value-of select="count(document('udata://catalog/getSmartCatalog/notemplate/220/20/1/2/old_price/0')/udata/lines/item)" /> |
Сделаем проверку, получим элементы только те у… Read More »
Например, Элемент(товар) изменился через админ панель или после выгрузки 1С. Перейдем в classes/modules/catalog Редактируем файл events.php Мы добавили строчку
1 |
new umiEventListener('exchangeOnUpdateElement', 'catalog', 'CustomExchangePrice1C'); |
Откроем файл _custom.php Добавим в абстрактный класс __custom_catalog наш Метод(событие)
1 2 3 4 5 6 |
public function CustomExchangePrice1C(iUmiEventPoint $event) { if ($event->getMode() == 'after') { $objId = $event->getRef('element')->objectId; file_get_contents('/customEvent/discountById.php?id=' . $objId); } } |
Создадим папку от корня customEvent и в ней создадим файл discountById.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
<?php include $_SERVER['DOCUMENT_ROOT'] . "/standalone.php"; if (isset($_GET['id'])) { $id = $_GET['id']; function getDiscountPrice($price, $percent) { $discount = $price * $percent / 100; return $price - $discount; } // Получаем объекты $get = umiObjectsCollection::getInstance(); $object = $get->getObject($id); $percent = $object->getValue('sale_percent'); $dateStart = $object->getValue('sale_start'); $dateEnd = $object->getValue('sale_end'); if (isset($percent) && isset($dateStart) && isset($dateEnd)) { $price = $object->getValue('price'); $priceOld = $object->getValue('old_price'); $dateNow = new DateTime(); $dateNow = $dateNow->format('Y-m-d'); $needDiscount = ($dateNow >= $dateStart && $dateNow <= $dateEnd) ? true : false; if ($needDiscount) { // Ставим скидку $newPrice = getDiscountPrice($price, $percent); if ($priceOld == 0) { $object->setValue('price', $newPrice); $object->setValue('old_price', $price); $object->commit(); } else if ($priceOld == $price) { $object->setValue('price', $newPrice); $object->commit(); } } else { // убираем скидку if ($priceOld != 0) { // если есть старая цена $object->setValue('price', $priceOld); $object->setValue('old_price', 0); $object->commit(); } } } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
<?php include $_SERVER['DOCUMENT_ROOT'] . "/standalone.php"; function getDiscountPrice($price, $percent) { $discount = $price * $percent / 100; return $price - $discount; } // Получаем тип объектов $typesCollection = umiObjectTypesCollection::getInstance(); $objectTypeId = $typesCollection->getBaseType('catalog', 'object'); // Здесь id объекта // Получаем объекты $objects = umiObjectsCollection::getInstance(); // фильтрация $sel = new umiSelection; $objectType = $typesCollection->getType($objectTypeId); $sel->addObjectType($objectTypeId); //Устанавливаем фильтр по типу данных $sel->addPropertyFilterNotEqual($objectType->getFieldId('sale_start'), NULL); $sel->addPropertyFilterNotEqual($objectType->getFieldId('sale_end'), NULL); //Получаем результаты $result = umiSelectionsParser::runSelection($sel); //Массив id объектов $total = umiSelectionsParser::runSelectionCounts($sel); //Количество записей foreach ($result as $key) { $object = $objects->getObject($key); $percent = $object->getValue('sale_percent'); $dateStart = $object->getValue('sale_start'); $dateEnd = $object->getValue('sale_end'); $price = $object->getValue('price'); $priceOld = $object->getValue('old_price'); $dateNow = new DateTime(); $dateNow = $dateNow->format('Y-m-d'); $needDiscount = ($dateNow >= $dateStart && $dateNow <= $dateEnd) ? true : false; if ($needDiscount) { // Ставим скидку if ($priceOld == 0) { $object->setValue('price', getDiscountPrice($price, $percent)); $object->setValue('old_price', $price); $object->commit(); } } else { // убираем скидку if ($priceOld != 0) { // если есть старая цена $object->setValue('price', $priceOld); $object->setValue('old_price', 0); $object->commit(); } } // Очищаем переменные unset($percent, $dateStart, $dateEnd, $price, $priceOld); } |
umi выборка, umi фильтрация, umi update, umi set, umi значение объекта
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
include "standalone.php"; // Получаем тип объектов $typesCollection = umiObjectTypesCollection::getInstance(); $objectTypeId = $typesCollection->getBaseType('catalog', 'object'); // Здесь id объекта // Получаем объекты $objects = umiObjectsCollection::getInstance(); /** * Все объекты * @var object */ $allObjects = $objects->getGuidedItems($objectTypeId); foreach ($allObjects as $key => $value) { $object = $objects->getObject($key); $percent = $object->getValue('sale_percent'); $dateStart = $object->getValue('sale_start'); $dateEnd = $object->getValue('sale_end'); $price = $object->getValue('price'); $priceOld = $object->getValue('old_price'); echo $key . " " . $percent . " " . $price . " " . $priceOld . " " . $dateStart . " " . $dateEnd . "<br>"; // Очищаем переменные unset($percent, $dateStart, $dateEnd, $price, $priceOld); } |
Хотим сменить фразу
1 |
Контрольная строка, а также ваши регистрационные данные были высланы по E-Mail. Пожалуйста, дождитесь письма, так как контрольная строка изменяется при каждом запросе. |
на
1 |
Ссылка для смены пароля, а также ваши регистрационные данные были высланы по E-Mail. Пожалуйста, дождитесь письма. |
Находится фраза здесь
1 |
/bitrix/modules/main/lang/ru/classes/general/user.php |
Создадим файл
1 |
bitrix/php_interface/user_lang/ru/lang.php |
С переменной
1 |
$MESS["/bitrix/modules/main/lang/ru/classes/general/user.php"]['ACCOUNT_INFO_SENT'] = "Ссылка для смены пароля, а также ваши регистрационные данные были высланы по E-Mail. Пожалуйста, дождитесь письма."; |
Источник: https://dev.1c-bitrix.ru/community/blogs/vad/1560.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |
<?php /* TODO: Получаем список email активных юзеров и засылаем их в sendpulse */ require($_SERVER["DOCUMENT_ROOT"] . '/bitrix/modules/main/include/prolog_before.php'); // Получаем список email всех активных юзеров global $USER; $filter = Array( "ACTIVE" => "Y", ); $email = Array(); $rsUsers = CUser::GetList(($by = "NAME"), ($order = "desc"), $filter); while ($arUser = $rsUsers->Fetch()) { $phone = $arUser['PERSONAL_PHONE']; $phone = !is_null($phone) ? trim($phone) : null; $fields = [ "email" => $arUser['EMAIL'], "name" => $arUser['NAME'], "phone" => $phone ]; array_push($email, $fields); } $apiKey = 'КЛЮЧ API'; // Массив с исключениями $array = Array( "retailcrm.com", "retailcrm.ru", "sberbank.ru", "matveevs.ru", ); /** * Ищем если совпадение * * @param string $value Искомое значение * @param Array $array Массив исключений * * @return Boolean Результат */ function strposArray($value, $array) { $res = false; foreach ($array as $key) { $res = strpos($value, $key) ? true : $res; } return $res; } // удаляем с исключением покупателей foreach ($email as $key => $value) { if (strposArray($value['email'], $array)) { unset($email[$key]); } } // чистим поля покупателей для подписчиков)) unset($rsUsers, $arUser, $value, $key, $phone, $fields); $emailSub = Array(); // Subscribe CModule::IncludeModule('subscribe'); $rsUsers = CSubscription::GetList(Array(), $filter, false); while ($arUser = $rsUsers->Fetch()) { $fields = [ "email" => $arUser['EMAIL'], ]; array_push($emailSub, $fields); } // удаляем с исключением подписчиков foreach ($emailSub as $key => $value) { if (strposArray($value['email'], $array)) { unset($emailSub[$key]); } } unset($value, $key); function addSubscribe($bookID, $array, $mode = false) { global $apiKey; $query = [ 'list_ids' => $bookID, 'fields[email]' => $array['email'], 'api_key' => $apiKey, 'double_optin' => 3, 'tags' => urlencode("Added using API by positron-it.ru") ]; if ($mode) { $query['fields[Name]'] = $array['name']; $query['fields[phone]'] = $array['phone']; } $ch = curl_init(); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $query); curl_setopt($ch, CURLOPT_TIMEOUT, 10); curl_setopt($ch, CURLOPT_URL, 'https://api.unisender.com/ru/api/subscribe?format=json'); $result = curl_exec($ch); } foreach ($email as $key => $value) { addSubscribe('id книги с покупателями', $value, true); } unset($key, $value); foreach ($emailSub as $key => $value) { addSubscribe('id книги с подписчиками', $value); } |
Парсим элементы
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
<?php die('Все спарсили'); require($_SERVER["DOCUMENT_ROOT"] . '/bitrix/modules/main/include/prolog_before.php'); CModule::IncludeModule("iblock"); // инфоблоки function getItems($sql) { $DB = new CDatabase; $DBHost = "localhost"; $DBLogin = "LOGIN к БД MODX"; $DBPassword = "Пароль к БД modx"; $DBName = "имя базы modX"; $DB->Connect($DBHost, $DBName, $DBLogin, $DBPassword); $query = $DB->Query($sql); if ($query->SelectedRowsCount() > 0) { $res = []; while($data = $query->Fetch()) { array_push($res, $data); } return $res; } else if ($query->SelectedRowsCount() == 0) { return false; } $DB->Disconnect(); } function translit($string) { $arTransParams = array( "max_len" => 100, "change_case" => false, "replace_space" => '_', "replace_other" => '-', "delete_repeat_replace" => true, ); $transName = CUtil::translit($string, "ru", $arTransParams); return $transName; } $items = getItems("SELECT * FROM `modx_site_content` where parent = 28"); $el = new CIBlockElement; foreach ($items as $item) { $id = $item['id']; $title = $item['pagetitle']; $desc = $item['description']; $previewText = $item['introtext']; $detailText = $item['content']; $prop = [2 => $id]; $fields = [ "IBLOCK_SECTION_ID" => false, "IBLOCK_ID" => 6, "NAME" => $title, "CODE" => translit($title), "ACTIVE" => "Y", "PROPERTY_VALUES" => $prop, "PREVIEW_TEXT" => $previewText, "DETAIL_TEXT" => $detailText, "IPROPERTY_TEMPLATES" => [ "ELEMENT_META_DESCRIPTION" => $desc ] ]; if ($element = $el->Add($fields)) { echo "New ID: ".$element; } else { echo "Error: ".$el->LAST_ERROR; } echo "<hr/>"; } |
Парсим картинки (Галерею)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
<?php require($_SERVER["DOCUMENT_ROOT"] . '/bitrix/modules/main/include/prolog_before.php'); CModule::IncludeModule("iblock"); // инфоблоки function getItems($sql) { $DB = new CDatabase; $DBHost = "localhost"; $DBLogin = "логин modx"; $DBPassword = "пароль modx"; $DBName = "база modx"; $DB->Connect($DBHost, $DBName, $DBLogin, $DBPassword); $query = $DB->Query($sql); if ($query->SelectedRowsCount() > 0) { $res = []; while($data = $query->Fetch()) { array_push($res, $data); } return $res; } else if ($query->SelectedRowsCount() == 0) { return false; } $DB->Disconnect(); } function galleryImage ($id) { $sql = 'SELECT items.id, items.item, item.filename FROM `modx_gallery_albums` as album LEFT JOIN `modx_gallery_album_items` as items ON items.album = album.id LEFT JOIN `modx_gallery_items` as item ON item.id = items.item where album.name = "album'.$id.'"'; $items = getItems($sql); $arr = []; foreach ($items as $key) { $file = ["VALUE" => CFile::MakeFileArray("/var/www/user/data/www/siteMODX.ru/assets/gallery/" . $key['filename'])]; array_push($arr, $file); } return $arr; } $arSelect = Array("ID", "NAME", "DATE_ACTIVE_FROM", "PROPERTY_ID_GALLERY"); $arFilter = Array("IBLOCK_ID" => 6, "ACTIVE_DATE"=>"Y", "ACTIVE"=>"Y", "PROPERTY_GALLERY" => false); $res = CIBlockElement::GetList(Array(), $arFilter, false, Array("nPageSize" => 500), $arSelect); $el = new CIBlockElement; while($ob = $res->GetNext()) { $elementID = $ob['ID']; $galleryID = $ob['PROPERTY_ID_GALLERY_VALUE']; $images = galleryImage($galleryID); $prop = [ 1 => $images, 2 => $galleryID ]; $fields = [ "PROPERTY_VALUES" => $prop ]; $el->Update($elementID, $fields); } |
#45 строка Можно указать абсолютный путь или внешний url расположение картинки в текущем примере рассмотрен вариант абсолютный путь до изображения (сайт bitrix и modx) находятся на одном сервере