Developer Soft: Инструменты разработчика
Очень полезная вещь для разработчика Документация
Форматировать дату в Bitrix
Форматирование даты
В Битрикс форматировать дату обычно удобно с функцией FormatDateEx
FormatDateEx(поле с датой, формат даты в поле, формат даты на выходе);
$dateFormatted = FormatDateEx($arItem["DATE_CREATE"],"DD.MM.YYYY","j F Y");
Cоздание highload инфоблоков
создание highload инфоблоков из sql файлов ;)
$arrErrors = $DB->RunSqlBatch($_SERVER["DOCUMENT_ROOT"]."/local/install/b_tablename.sql");
Bitrix работа с БД
вариант 1
$conn = \Bitrix\Main\Application::getInstance()->getConnection(); $rsItems = $conn->query("select ID,NAME from b_iblock_element as el WHERE limit 0,5 "); while($item = $rsItems->fetch()){ // всякие манипуляции с данными }
вариант 2
use \Bitrix\Iblock\ElementTable; \Bitrix\Main\Loader::includeModule('iblock'); $LIMIT = 5; $IBLOCK_ID__VIDEO = 13; $query = new \Bitrix\Main\Entity\Query(ElementTable::getEntity()); $query->setSelect(array("ID", "NAME")) ->setFilter(array("IBLOCK_ID" => $IBLOCK_ID__VIDEO)) ->setOrder(array("ID" => "ASC")) ->setLimit($LIMIT); $rsItems = $query->exec(); while($item = $rsItems->fetch()){ // всякие манипуляции с данными }
Эрмитаж Bitrix
Для того чтобы подключить эрмитаж в своей компоненте на 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>
ссылки по теме
свойства инфоблока
Тип Дата
"PROPERTY_TYPE"=>"S", // строка "USER_TYPE"=>"DateTime", // Дата
Тип привязка к разделу
"PROPERTY_TYPE"=>"G", // привязка к разделам (секкциям, категориям) "IBLOCK_ID" => 3, // ID инфолока в котором создаём свойство "LINK_IBLOCK_ID"=> 2 // ID инфолока категории которого привязываем "USER_TYPE"=> false,
Фильтр по свойству тип Дата
$arFilter[">=PROPERTY_DATE_END"] = date("Y-m-d", time());
Uncaught ReferenceError: BX is not defined
Ошибка Uncaught ReferenceError: BX is not defined
Решение
- Вариант 1
В header.php подключаем ядро BX следующей строчкой
CJSCore::Init();
Кеш в Bitrix
Вариант 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); // при автокеширование шаблон также кешируется за компанию }
Как прописать права для инфоблока
Задача:
Изменить права информационных блоков
Дано:
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] Модуль информационных блоков не подключен'; }
Получить название страны по ID
Получить название страны по ID
Вариант 1
GetCountryByID($arResult["PERSONAL_COUNTRY"], "ru");
Получить список стран
$arCountries = GetCountryArray();
Положить массив в select
SelectBoxFromArray("COUNTRY_ID",$arCountries, $countryID, "выберите страну" );
Bitrix: Получаем картинки
$this->arResult["PREVIEW_PICTURE"] = \CFile::GetFileArray($this->arResult["PREVIEW_PICTURE"]); $this->arResult["DETAIL_PICTURE"] = \CFile::GetFileArray($this->arResult["DETAIL_PICTURE"]);
Как узнать ID группы пользователя по её символьному коду
Получаем ID группы
$userGreoupBlogsID = CGroup::GetIDByCode('blogs');
недокументированная функция, забавно, но факт
Bitrix d7 создание таблицы
public static function createTable(){ $connection = Application::getInstance()->getConnection(); if (!$connection->isTableExists(static::getTableName())) { static::getEntity()->createDbTable(); return true; } else return false; } public static function dropTable(){ $connection = Application::getInstance()->getConnection(); $connection->dropTable(static::getTableName()); return true; }
Bitrix: Resize Image
$arSlider=[]; foreach ($arItem["PROPS"]["MORE_PHOTO"]["VALUE"] as $fileId){ $detail = \CFile::ResizeImageGet($fileId,array("width"=>1009,"height"=>487),BX_RESIZE_IMAGE_PROPORTIONAL,true); $preview = \CFile::ResizeImageGet($fileId,array("width"=>285,"height"=>134),BX_RESIZE_IMAGE_EXACT,true); $arSlider[] = array( "DETAIL_PICTURE"=>["SRC"=>$detail["src"]], "PREVIEW_PICTURE"=>["SRC"=>$preview["src"]], ); }
Подключение скриптов в компонент
В компоненте создаём файл component_epilog.php
<? use Bitrix\Main\Page\Asset; Asset::getInstance()->addJs($templateFolder.'/your.js'); // подключаем скрипт
аналогично подключаем стили (файлы css)
<? use Bitrix\Main\Page\Asset; Asset::getInstance()->addCss($templateFolder.'/your.css'); // подключаем ваш css файл
Заглушка
После написания модуля заглушки для Market Place я полагал, что тема с подобными заглушками для меня закрыта, но пришла следующая.
Задача:
Во время определённого периода времени сайт должен быть:
- закрыт для посетителей
- открыт для редакторов
- открыт для администраторов
Мат. часть
Битрикс реализует закрытие публичной части от посещений отслеживая состояние 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>
Решение
пришлось повесить на крон два скрипта, которые:
- в час X выключает сайт
- в час Z включает обратно
Как снять скриншот в Mac OS X
- Command + Shift + 3: весь экран в файл на рабочем столе
- Command + Shift + 4: выделенная область в файл
- Command + Shift + 4 + пробел: окно программы в файл

