Примеры небольших, но часто крайне полезных php сниппетов для Битрикса.
Набор полезных рецептов для Bitrix
29.09.2020
Получаем "пользовательские свойства" (цвет, картинка, и т.д.):
1 | $aProp = CIBlockElement::GetByID( $aItem [ 'ID' ])->GetNextElement()->GetProperties(); |
Битрикс тесторование (Битрикс самопроверка)
Запустить проверку можно из раздел Настройки - Инструменты - Проверка системы (http://SITE.local/bitrix/admin/site_checker.php?lang=ru)
Самопроверка Bitrix выдает ошибку. Проблема с сокетами.
Все примеры, если они не в модули/компоненты битрикса должны начинаться с подключения файла:
1 | require_once ( $_SERVER [ 'DOCUMENT_ROOT' ]. "/bitrix/modules/main/include/prolog_before.php" ); |
Получить все категории со значениями SEO метатегов:
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 | $aCategories = CIBlockSection::GetList( array ( 'sort' => 'asc' ), array ( 'ACTIVE' => 'Y' , 'GLOBAL_ACTIVE' => 'Y' , 'IBLOCK_ID' => $arParams [ 'arParams' ][ 'IBLOCK_ID' ], //'SECTION_ID' => $arParams['arParams']['SECTION_ID'] // Можно указать ID родительской категории ) ); $aTMP = array (); $iPos = 0; if ( $aCategories ->SelectedRowsCount() > 0) { $i = 0; // while ($row = $aCategories->Fetch()) while ( $row = $aCategories ->GetNext()) { $ipropValues = new \Bitrix\Iblock\InheritedProperty\SectionValues( $row [ "IBLOCK_ID" ], $row [ "ID" ] ); $row [ "IPROPERTY_VALUES" ] = $ipropValues ->getValues(); $sTitle = isset( $row [ "IPROPERTY_VALUES" ][ 'SECTION_PAGE_TITLE' ])? $row [ "IPROPERTY_VALUES" ][ 'SECTION_PAGE_TITLE' ]: $row [ 'NAME' ]; } } |
Получить категорий со значениями пользовательских полей (userfields):
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 | $aCategories = CIBlockSection::GetList( array ( 'sort' => 'asc' ), array ( 'ACTIVE' => 'Y' , 'GLOBAL_ACTIVE' => 'Y' , 'IBLOCK_ID' => 1, // !!! Нужно передавать обязательно, иначе user fields не возвращаются 'SECTION_ID' => 98 ), FALSE, array ( "UF_SOTYPE" ) // Можно указать "UF_*" ); if ( $aCategories ->SelectedRowsCount() > 0) { $i = 0; // while ($row = $aCategories->Fetch()) while ( $row = $aCategories ->GetNext()) { if ( $row [ 'UF_SOTYPE' ] == 1) { $aItems1 [] = $aItem ; } else { $aItems2 [] = $aItem ; } } } |
Как получить значение пользовательских полей, для товара Bitrix:
bitrix разработчикам как получить значение поля продукта списка / bitrix каталог получить значение свойства.
1 2 3 4 5 6 7 8 9 10 11 | $block_id = 1; // block_id магазины, обычно 1 $id = 101; // ID товара $sCode = 'SO_PUBLISHED' ; // Имя пользовательского свойства $db_props = \CIBlockElement::GetProperty( $block_id , $id , array ( "sort" => "asc" ), Array( "CODE" => $sCode )); if ( $ar_props = $db_props ->Fetch()) { $sPublished = IntVal ( $ar_props [ "VALUE" ]); } else { $sPublished = false; } |
Получение списка товаров (старый "стиль"):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | $items = GetIBlockElementList( $IBLOCK_ID , false, Array( "SORT" => "ASC" )); $aTMP = array (); while ( $row = $items ->GetNext()) { $sTitle = $row [ 'NAME' ]; $aTMP [ $i ] = array ( 'url' => $row [ 'DETAIL_PAGE_URL' ], 'name' => $sTitle , 'id' => $row [ 'ID' ], 'price' => (int) CPrice::GetBasePrice( $row [ 'ID' ])[ 'PRICE' ], ); } |
Получение списка товаров:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | $arOrder = array ( 'SORT' => 'ASC' ); $arFilter = array (); $res = CIBlockElement::GetList( $arOrder , $arFilter ); while ( $aItem = $res ->GetNext()) { $id = $aItem [ 'ID' ]; if ( $id == 3026) { echo '<pre>' ; print_r( $aItem ); echo '</pre>' ; } } |
Получение списка товаров для определенной категории со свойствами:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | $arOrder = array ( 'SORT' => 'ASC' ); $arFilter = array ( 'SECTION_ID' =>23, // Id категории 'IBLOCK_ID' => 1 ); $res = CIBlockElement::GetList( $arOrder , $arFilter ); $i = 0; $aTMP = []; while ( $aItem = $res ->GetNext()) { $aProp = CIBlockElement::GetByID( $aItem [ 'ID' ])->GetNextElement()->GetProperties(); $aTMP [ $i ][ 'sku' ] = $aProp [ 'EL_SKU' ]; // Артикул $aTMP [ $i ][ 'title' ] = $aItem [ 'NAME' ]; // Название товара echo '<pre>' ; print_r( $aTMP [ $i ]); print_r( $prop ); print_r( $aItem ); echo '</pre>' ; $i ++; } |
Получение всех категорий/разделов, к которым относиться товар:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | $id = $arParams [ 'arResult' ][ 'ID' ]; $IBLOCK_ID = $arParams [ 'arResult' ][ 'IBLOCK_ID' ]; $res = CIBlockElement::GetElementGroups( $id , false, array ( 'ID' , 'NAME' , 'SECTION_PAGE_URL' ) ); $aItems = array (); while ( $row = $res ->GetNext()) { echo '<pre>' ; print_r( $row ); echo '</pre>' ; } |
Получение картинки:
1 2 3 4 5 | // Сразу выводит изображение echo CFile::ShowImage( $row [ 'PICTURE' ], 200, 200, "" , "" , true); // Возвращает массив с данными о фотографии $file = CFile::GetFileArray( $row [ 'PICTURE' ]); |
Включенние вывода всех товаров каталога, если категория не указана:
1 2 3 4 5 6 7 8 9 10 11 | // bitrix/components/bitrix/catalog/templates/.default/section.php $APPLICATION ->IncludeComponent( 'bitrix:catalog.section' , '' , array ( 'SHOW_ALL_WO_SECTION' => 'Y' , // показывать товары, если не задан раздел // … ), $component ); |
Пример вывода всех товаров из категории, со значением свойства "ASKARON_REVIEWS_COUNT" больше 0
1 2 3 4 5 6 7 8 9 10 | $arSelect = Array( "ID" , "NAME" , "PROPERTY_ASKARON_REVIEWS_COUNT" ); $arFilter = Array( "IBLOCK_ID" =>1, "SECTION_ID" => $id_cat , ">PROPERTY_ASKARON_REVIEWS_COUNT" => 0, "ACTIVE" => "Y" ); $res = CIBlockElement::GetList(Array(), $arFilter , false, Array(), $arSelect ); while ( $ob = $res ->GetNextElement()) { $arFields = $ob ->GetFields(); echo '<pre>' ; print_r( $arFields ); // ASKARON_REVIEWS_COUNT echo '</pre>' ; } |
Подробнее:
Основная функция
Фильтр по числам
Фильтр по маскам (для определенных типов полей)
Как повлиять на выводимые в каталоге товары:
1 2 3 4 5 6 7 8 9 10 11 12 13 | global $_aSoGlobal , $arrFilter ; if ( $_aSoGlobal [ 'otzyvy-o-tovarakh' ]) { $arrFilter = Array( "IBLOCK_ID" =>1, ">PROPERTY_ASKARON_REVIEWS_COUNT" => 0, "ACTIVE" => "Y" ); } $APPLICATION ->IncludeComponent( "bitrix:catalog" , "catalog_new" , array ( ... ... |
Получение товаров из корзины:
С проверкой, есть ли товароы в корзине из определенной категории.
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 | // Проверка на наличие продукции "Barrier" $bBarrier = FALSE; $dbBasketItems = CSaleBasket::GetList( array ( "NAME" => "ASC" , "ID" => "ASC" ), array ( "FUSER_ID" => CSaleBasket::GetBasketUserID(), "LID" => SITE_ID, "ORDER_ID" => "NULL" ), false, false, array ( "ID" , "MODULE" , "PRODUCT_ID" , "QUANTITY" , "CAN_BUY" , "PRICE" ) ); while ( $arItems = $dbBasketItems ->Fetch()) { $arItems =CSaleBasket::GetByID( $arItems [ "ID" ]); $res = CIBlockElement::GetElementGroups( $arItems [ "PRODUCT_ID" ], false, array ( 'ID' , 'NAME' , 'SECTION_PAGE_URL' ) ); while ( $row = $res ->GetNext()) { if ( $row [ 'ID' ] == 188) { $bBarrier = TRUE; break ; } } } |
Обновление цены товара (у товарного предложения):
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 | CModule::IncludeModule( "catalog" ); $PRODUCT_ID = 3026; $PRICE_TYPE_ID = 1; $arFields = Array( "PRODUCT_ID" => $PRODUCT_ID , "CATALOG_GROUP_ID" => $PRICE_TYPE_ID , "PRICE" => 29.95, ); $res = CPrice::GetList( array (), array ( "PRODUCT_ID" => $PRODUCT_ID , "CATALOG_GROUP_ID" => $PRICE_TYPE_ID ) ); if ( $arr = $res ->Fetch()) { CPrice::Update( $arr [ "ID" ], $arFields ); } /* else { CPrice::Add($arFields); } */ |
Подробнее:
Массовое изменение цен товаров.
Массовое изменение цен в 1C-Bitrix
CPrice::Update
CIBlockElement::Add
Как программно запустить экспорт (например в Маркет):
10 - это ID нужной выгрузки. Посмотреть его можно в пенале администрирования.
1 | CCatalogExport::PreGenerateExport(10); |
Как программно добавить товар:
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 | <?php //die('!'); error_reporting (E_ALL); ini_set ( 'display_errors' , 'On' ); require_once ( $_SERVER [ 'DOCUMENT_ROOT' ]. "/bitrix/modules/main/include/prolog_before.php" ); //CModule::IncludeModule("catalog"); CModule::IncludeModule( "iblock" ); $IBLOCK_ID = 2; // ID Инфоблока каталога $el = new CIBlockElement; $PROP = array (); $PROP [12] = "Белый" ; // свойству с кодом 12 присваиваем значение "Белый" $PROP [3] = 38; $PROP [11] = 111111; $arLoadProductArray = Array( "MODIFIED_BY" => $USER ->GetID(), // элемент изменен текущим пользователем //"IBLOCK_SECTION_ID" => false, // элемент лежит в корне раздела "IBLOCK_SECTION_ID" => 7, // ID категории "IBLOCK_ID" => $IBLOCK_ID , "PROPERTY_VALUES" => $PROP , "NAME" => "Элемент" , "ACTIVE" => "N" , // активен "CODE" => "MySyperCode2" , // Ссылочный код "PREVIEW_TEXT" => "текст для списка элементов" , "DETAIL_TEXT" => "текст для детального просмотра" , "DETAIL_PICTURE" => CFile::MakeFileArray( $_SERVER [ "DOCUMENT_ROOT" ]. "/image.gif" ) ); if ( $PRODUCT_ID = $el ->Add( $arLoadProductArray )) echo "New ID: " . $PRODUCT_ID ; else echo "Error: " . $el ->LAST_ERROR; ?> Done <? |
По теме: CIBlockElement add
Получение заказа по ID:
1 2 3 4 5 6 7 8 9 10 | if (!( $arOrder = CSaleOrder::GetByID( $ORDER_ID ))) { echo "Заказ с кодом " . $ORDER_ID . " не найден" ; } else { echo "<pre>" ; print_r( $arOrder ); echo "</pre>" ; } |
Получение цены товара (стоимость товара) по его ID:
1 | 'price' => CPrice::GetBasePrice( $arItem [ 'ITEM_ID' ])[ 'PRICE' ]; |
bitrix includearea:
Как добавить в bitrix Include Area
Данные из заказа (текущей корзины):
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 | /** * Возвращает сумму текущего заказа из в корзине * * @return float */ static function getCurrentOrderTotalPrice() { $arBasketItems = array (); $dbBasketItems = CSaleBasket::GetList( array ( "NAME" => "ASC" , "ID" => "ASC" ), array ( "FUSER_ID" => CSaleBasket::GetBasketUserID(), "LID" => SITE_ID, "ORDER_ID" => "NULL" ), false, false, array ( "ID" , "MODULE" , "PRODUCT_ID" , "QUANTITY" , "CAN_BUY" , "PRICE" ) ); $fRet = 0; while ( $arItems = $dbBasketItems ->Fetch()) { $arItems =CSaleBasket::GetByID( $arItems [ "ID" ]); $arBasketItems []= $arItems ; //$cart_num+=$arItems['QUANTITY']; $fRet += $arItems [ 'PRICE' ]* $arItems [ 'QUANTITY' ]; } return $fRet ; } |
Как получить ссылку на товар в Bitrix:
1 2 3 | $res = \CIBlockElement::GetByID( $id ); $aTMP = $res ->GetNext(); echo $aTMP [ 'DETAIL_PAGE_URL' ]; |