Git Hub
коротко
16 заметок с тегом

API

убрать вкладку «реклама»

5 сентября 2016, 9:31
$eventManager = \Bitrix\Main\EventManager::getInstance();
$eventManager->unRegisterEventHandler("main", "OnAdminIBlockElementEdit", "seo", "\\Bitrix\\Seo\\AdvTabEngine", "eventHandler");
API   D7

Пути к файлам

21 января 2016, 13:21

Получение всяких разных путей

начиная от константы __FILE__
а дальше используем это

$io = CBXVirtualIo::GetInstance();

Как получить относительный путь

$relativePath = str_replace($_SERVER["DOCUMENT_ROOT"],"",__FILE__);
#path   API

CAdminList

19 января 2016, 21:14

формат массива для заголовков

array("id" => "NAME", // индекс поля в ассоциативном массиве
    "content" => "NAME", // текст выводимый в заголовке
    "sort" => "NAME", // поле для сортировки
    "default" => "true"
),

Создаём массив для заголовков

$arHeaders[]=array("id" => "ID",
    "content" => "ИД",
    "sort" => "ID",
    "default" => "true"
);
$arHeaders[]=array("id" => "NAME",
        "content" => "Название",
        "sort" => "NAME",
        "default" => "true"
    );

Создаём экземпляр класса CAdminList и добавляем заголовки

$tableCode = "tbl_product_list_".md5($type.".".$IBLOCK_ID);
$lAdmin = new CAdminList($tableCode, $oSort);
$lAdmin->AddHeaders($arHeaders);

tableCode — должен начинаться с префикса tbl_

Добавляем данные

$row =&  $lAdmin->AddRow(13,array("ID"=>13,"NAME"=>"Штаны полосатый рейс"));
$lAdmin->table_id;  // ид таблицы

Для вывода корректной постраничной навигации необходимо ещё такое заклинание )

$title = 'Рекемендованные товары';
  $rsData = new CAdminResult($rsData, $tableID);
  $rsData->NavStart();
  $lAdmin->NavText($rsData->GetNavPrint($title));

Вывод списка

$lAdmin->DisplayList();

Cсылка на API bitrix
CAdminList

Admin   API   Bitrix

Bitrix $_POST пустой

14 января 2016, 5:03

используйте константу POST_FORM_ACTION_URI

POST

API   Bitrix

Форматировать дату в Bitrix

7 января 2016, 13:27

Форматирование даты

В Битрикс форматировать дату обычно удобно с функцией FormatDateEx

FormatDateEx(поле с датой, формат даты в поле, формат даты  на выходе);
$dateFormatted = FormatDateEx($arItem["DATE_CREATE"],"DD.MM.YYYY","j F Y");
API   Bitrix   Date

Cоздание highload инфоблоков

4 января 2016, 12:00

создание highload инфоблоков из sql файлов ;)

$arrErrors = $DB->RunSqlBatch($_SERVER["DOCUMENT_ROOT"]."/local/install/b_tablename.sql");
API   Bitrix

Эрмитаж Bitrix

11 декабря 2015, 17:59

Для того чтобы подключить эрмитаж в своей компоненте на d7
нужно сделать следующее:

в классе компонента

прописать

//  Добавляем кнопки Изменить, добавить, удалить

    protected function setEditButtons()
    {
        global $APPLICATION; // так и не избавились от глобальных переменных

        if (!$APPLICATION->GetShowIncludeAreas() || $this->showEditButtons === false)
        {
            return false;
        }

        $arButtons = \CIBlock::GetPanelButtons(
            $this->arParams['IBLOCK_ID'],
            $this->arResult['ID'],
            $this->arParams['SECTION_ID'],
            array("SECTION_BUTTONS"=>false, "SESSID"=>false)
        );

        $APPLICATION->SetEditArea(
            $this->getEditAreaId($this->arResult['ID']),
            \CIBlock::GetComponentMenu("configure",$arButtons));
       
    }

в методе executeComponent можем вызвать этот метод перед тем как начнём создавать шаблон

$this->includeModules();
  $this->getResult();
...
 $this->setEditButtons();
...
 $this->includeComponentTemplate($this->page);

в шаблоне компонента

вставить

<div class="element_detail" id="<?=$this->GetEditAreaId($arResult['ID']);?>"  >
...
</div>

ссылки по теме

Интерфейс «Эрмитаж» с точки зрения разработчика

API   Bitrix   Ermitage

свойства инфоблока

9 декабря 2015, 15:44

Тип Дата

"PROPERTY_TYPE"=>"S", // строка
"USER_TYPE"=>"DateTime",  // Дата

Тип привязка к разделу

"PROPERTY_TYPE"=>"G",      // привязка к разделам (секкциям, категориям)
"IBLOCK_ID" => 3,                  // ID инфолока в котором создаём свойство
"LINK_IBLOCK_ID"=> 2          // ID инфолока категории которого привязываем
"USER_TYPE"=> false,
API   Bitrix   Date

Фильтр по свойству тип Дата

9 декабря 2015, 13:04
$arFilter[">=PROPERTY_DATE_END"] = date("Y-m-d", time());
API   Bitrix   Date

Кеш в Bitrix

16 ноября 2015, 13:08

Вариант 1 (CPHPCache)

$cacheTime = 3600*24; // время кеширования
        $cacheID = $iblockCode.'/'.$sectionCode;
        $cachePath =  '/menu';
        $obCache = new \CPHPCache();

        $bValidCache = $obCache->InitCache(
            $cacheTime, // задать ttl
            $cacheID, // cacheID
            $cachePath.'/'.$cacheID // и cachePath
        );

        if($bValidCache)// Если кэш валиден
        {
            $arResult = $obCache->GetVars(); // Извлекаем данные из кэша
        }
        elseif( $obCache->StartDataCache()  )// Если кэш невалиден
        {
        /* ------------- put to cache ------------------------------------------------ */
        // вычисления 
        $arResult["ELEMENTS"] = getElements(); // выполняем запросы к БД и заносим результаты в массив $arResult;
        $obCache->EndDataCache($arResult); // Пишем массив в кеш
        /* ------------- /put to cache ------------------------------------------------ */
        }

Важно, чтобы $cacheID НЕ заканчивался слешем «/»
По-умолчанию кеш лежит в /bitrix/cache/

Шаблоны кеш-путей

  • Шаблон кэш-пути для детальной страницы
сache/[iblockID]/[templateСomponentName]/[detail_elementID]
  • Шаблон пути к списку элементов
cache/[iblockID]/[templateID]/[page_Num]

Вариант 2 (Встроенное автокеширование)

if ($this->startResultCache($this->cacheTime,$cacheID,$this->cachePath)){ // если кеш не валиден, делаем расчёты
                   $arResult = getResultFromDB();    // выполняем запросы к БД и заносим результаты в массив $arResult; 
                   $this->arResult = $arResult;
   $this->includeComponentTemplate($this->page); // при автокеширование шаблон также кешируется за компанию
 }
API   Bitrix   Cache

Как прописать права для инфоблока

2 ноября 2015, 15:42

Задача:

Изменить права информационных блоков

Дано:

1 пользовательская группа
3 информационных блока

Решение:

//Подключаем API битрикса
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");

use \Bitrix\Main\Loader;

if(Loader::includeModule('iblock')){

    $groupCode = 'weeks_editors'; // символьный код группы редакторов
    $groupID = CGroup::GetIDByCode($groupCode); // получаем ID группы

    // список символьных кодов инфоблоков для которых нам требуется изменить права
    $arIBlockCodes = array(
        'candles',
        'holidays',
        'weekly_parts'
    );

    $actionPermission = "W"; // права для группы на изменение / запись

    foreach($arIBlockCodes as $codeIBlock){
        $arIBlockID[] = CIBlockWrapper::GetIdByCode($codeIBlock,SITE_ID); // конвертим символьный код инфоблока в его ID
    }

    foreach($arIBlockID as $iblockID) {
        $arPermissions = CIBlock::GetGroupPermissions($iblockID); // поллучаем уже существующие 
                                                                  // права чтбы не затереть их при записи новых прав
        $arPermissions[$groupID]= $actionPermission; // права для группы на изменение / запись
        CIBlock::SetPermission($iblockID, $arPermissions); //  выставляем права на инфоблок
    }

    $info[] = 'Успешно: [3] Права '.$actionPermission.' прописаны для инфоблоков('.implode(', ',$arIBlockID).')';
}else{
    $errors[] = 'Ошибка: [1] Модуль информационных блоков не подключен';
}
API   Bitrix

Получить название страны по ID

26 октября 2015, 20:01

Получить название страны по ID

Вариант 1

GetCountryByID($arResult["PERSONAL_COUNTRY"], "ru");

Получить список стран

$arCountries = GetCountryArray();

Положить массив в select

SelectBoxFromArray("COUNTRY_ID",$arCountries, $countryID, "выберите страну" );
API   Bitrix

Как узнать ID группы пользователя по её символьному коду

21 октября 2015, 15:15

Получаем ID группы

$userGreoupBlogsID = CGroup::GetIDByCode('blogs');

недокументированная функция, забавно, но факт

API   Bitrix   User

Заглушка

22 сентября 2015, 17:19

После написания модуля заглушки для Market Place я полагал, что тема с подобными заглушками для меня закрыта, но пришла следующая.

Задача:

Во время определённого периода времени сайт должен быть:

  1. закрыт для посетителей
  2. открыт для редакторов
  3. открыт для администраторов

Мат. часть

Битрикс реализует закрытие публичной части от посещений отслеживая состояние site_stopped — опции главного модуля в файле prolog_after.php.
Соответственно для закрытия сайта нам необходим вызов вида

COption::SetOptionString("main","site_stopped","Y");

после этого битрикс заглянет в

/bitrix/php_interface/<ID-сайта>/include/site_closed.php

и если не обнаружит там файла, то заглянет сюда

/bitrix/php_interface/include/site_closed.php

пример содержимого такого файла

<?
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php"); 
CHTTP::SetStatus("503 Service Unavailable"); 

?>
<!DOCTYPE html>
<html>
<head>
        <title>Название информационного русурса</title>
</head>
<body>
	<div class="main">
		<p>
                    В связи с такими-то праздниками сайт закрыт для посещений.
                    Бла-бла-бла с такого-то по такое-то вермя, число нужное зачеркнуть...
                </p>
	</div>
</body>
</html>

Решение

пришлось повесить на крон два скрипта, которые:

  1. в час X выключает сайт
  2. в час Z включает обратно
API   Bitrix

Bitrix: Кол-во страниц

9 августа 2015, 9:16
$rsItems->NavPageCount - это и есть заветное кол-во страниц после выборки
API   Bitrix