Проверка пользователя - администратор он или нет
global $USER; if ($USER->IsAdmin()): // администратор if ($USER->IsAuthorized()): // авторизован ли if(in_array(2,$USER->GetUserGroupArray()) // пользователь в группе 2 if (CSite::InGroup( array(4,5) ) ): // пользователь в группе 4 или 5 (или в обеих)
Информация о пользователе
$rsUser = CUser::GetByID(123); $arUser = $rsUser->Fetch(); echo $arUser["ADMIN_NOTES"];
Объекты Context, Request в Битрикс D7
// Подключение use Bitrix\Main\Application, Bitrix\Main\Context, Bitrix\Main\Request, Bitrix\Main\Server; $application = Application::getInstance(); // Объект приложения $docRoot = Application::getDocumentRoot(); // root $connection = Application::getConnection(); // соединение с БД $context = Context::getCurrent(); // контекст текущего хита $request = $context->getRequest(); // объект Request $server = $context->getServer(); // объект Server $siteId = $context->getSite(); // ID текущего сайта ("s1") $langId = $context->getLanguage(); // ID текущего языка ("ru") $request = Context::getCurrent()->getRequest(); // Объект запроса $request = $context->getRequest(); // альтернатива $value = $request->get("param"); // получение параметра $value = $request["param"]; // получение параметра $values = $request->getQueryList(); // список параметров $value = $request->getQuery("param"); // получение GET-параметра $value = $request->getPost("param"); // получение POST-параметра $values = $request->getPostList(); // получение списка POST-параметров $value = $request->getFile("param"); // получение загруженного файла $values = $request->getFileList(); // получение списка загруженных файлов $value = $request->getCookie("param"); // получение значения куки $values = $request->getCookieList(); // получение списка $method = $request->getRequestMethod(); // получение метода запроса $flag = $request->isGet(); // true - GET-запрос, иначе false $flag = $request->isPost(); // true - POST-запрос, иначе false $flag = $request->isAjaxRequest(); // true - AJAX-запрос, иначе false $flag = $request->isHttps(); // true - HTTPS-запрос, иначе false $flag = $request->isAdminSection(); // true - находимся в админке, иначе false $requestUri = $request->getRequestUri(); // Запрошенный адрес (напр. "/catalog/category/?param=value") $requestPage = $request->getRequestedPage(); // Запрошенная страница (напр. "/catalog/category/index.php") $rDir = $request->getRequestedPageDirectory(); // Директория запрошенной страницы (напр. "/catalog/category") $server = Context::getCurrent()->getServer(); // сервер $server->getDocumentRoot(); // DOCUMENT_ROOT $server->getHttpHost(); // HTTP_HOST $server->getServerName(); // SERVER_NAME $server->getServerAddr(); // SERVER_ADDR $server->getServerPort(); // SERVER_PORT $server->getRequestUri(); // REQUEST_URI $server->getRequestMethod(); // REQUEST_METHOD $server->getPhpSelf(); // PHP_SELF $server->getScriptName(); // SCRIPT_NAME $server->get('HTTP_ACCEPT'); // Любое значение из $_SERVER
Дата в D7
// подключение use Bitrix\Main\Type\DateTime; $objDateTime = DateTime::createFromPhp(new \DateTime('2020-07-10')); $objDateTime = DateTime::createFromTimestamp(1594383132); // или $objDateTime = new DateTime(); $objDateTime = new DateTime("25.12.2012 12:30:00"); // из строки в формате сайта $objDateTime = new DateTime("2007-05-14 12:10:00", "Y-m-d H:i:s"); // из строки указав формат $objDateTime->getTimestamp(); // timestamp $objDateTime->toString(); // формат текущего сайта $objDateTime->format("Y-m-d H:i:s"); // произвольный формат $objDateTime->add("1 day"); // плюс 1 день $objDateTime->add("-1 day"); // минус 1 день $objDateTime->add("2 months - 10 days + 15 minutes");
Информация о файле
$arFile = CFile::GetFileArray($arElement["PREVIEW_PICTURE"]); if($arFile) echo '<img src="'.$arFile["SRC"].'" />';
Нарезать фото "на лету"
Полезность этой функции в том, что фото нарезается 1 раз, а потом нарезанное в нужном размере фото хранится на сервере. При повторном запуске функции нарезка не происходит и ресурсы не используются.
Таким образом мы можем показывать на сайте фото в разном размере, что сложно сделать изначально нстройками инфо-блоков.
$resizedImage = CFile::ResizeImageGet(123, array('width'=>200, 'height'=>150), BX_RESIZE_IMAGE_PROPORTIONAL, false ); if($arFile) echo '<img src="'.$resizedImage["src"].'" />';
Возможные варианты:
BX_RESIZE_IMAGE_EXACT - точные размеры
BX_RESIZE_IMAGE_PROPORTIONAL
BX_RESIZE_IMAGE_PROPORTIONAL_ALT
Настройки сайта
$APPLICATION->GetCurPage(true); // страница SITE_ID // ID сайта (например, s1) LANGUAGE_ID // язык SITE_TEMPLATE_PATH // путь к шаблону SITE_SERVER_NAME // адрес сайта (без http://) $rsSites = CSite::GetByID(SITE_ID); $arSite = $rsSites->Fetch();
Хлебные крошки / breadcrumbs
$APPLICATION->SetPageProperty("NOT_SHOW_NAV_CHAIN", "Y"); // не показывать строку навигации $APPLICATION->AddChainItem("TITLE", "PATH"); // добавить элемент $APPLICATION->AddChainItem("TITLE"); // добавить элемент без ссылки // Вызов компонента в шаблоне $APPLICATION->IncludeComponent("bitrix:breadcrumb","",Array( "START_FROM" => "0", "PATH" => "", "SITE_ID" => SITE_ID ) );
Подключение компонента
$APPLICATION->IncludeComponent( "bitrix:menu", // название компонента ".default", // шаблон array( "ALLOW_MULTI_SELECT" => "N", // параметры ), false );
Файлы в компоненте:
template.php - обязательный .parameters.php component_epilog.php result_modifier.php style.css style.min.css
Страница 404:
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php"); CHTTP::SetStatus("404 Not Found"); @define("ERROR_404","Y"); require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php"); exit;
Установка заголовков
$APPLICATION->SetTitle('заголовок'); $APPLICATION->SetPageProperty("title", "Мета заголовок"); $APPLICATION->SetPageProperty("description", "Мета описание"); $APPLICATION->SetPageProperty("keywords", "Ключевые слова");
Информация о заказе
use Bitrix\Sale; \Bitrix\Main\Loader::includeModule('sale'); $order = Sale\Order::loadByAccountNumber('N44EM3'); // получаем заказ по коду $order = Sale\Order::load(7); // получаем заказ по номеру // публичную ссылку на заказ можно получить так: if (Sale\Helpers\Order::isAllowGuestView($order)) $publicLink = Sale\Helpers\Order::getPublicLink($order);
// данные заказа
$order->getId(); // ID заказа
$order->getSiteId(); // ID сайта
$order->getDateInsert(); // дата, объект Bitrix\Main\Type\DateTime
$order->getPersonTypeId(); // ID типа покупателя
$order->getUserId(); // ID пользователя
// состояние
$order->isPaid(); // оплачен
$order->isAllowDelivery(); // разрешена доставка
$order->isShipped(); // отправлен
$order->isCanceled(); // отменен
// суммы
$order->getPrice(); // Сумма заказа
$order->getDiscountPrice(); // Размер скидки
$order->getDeliveryPrice(); // Стоимость доставки
$order->getSumPaid(); // Оплаченная сумма
$order->getCurrency(); // Валюта заказа
// массив доступных полей $ar = $order->getAvailableFields();
$order->getField("ORDER_WEIGHT"); // Вес заказа
$order->getField('PRICE'); // Сумма заказа
$order->getField('USER_DESCRIPTION'); // Комментарий к заказу
// сохранение заказа $order->setField('STATUS_ID', 'N'); $order->save();
Подключение файлов
// подключение служебной части пролога и эпилога require($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_before.php'); require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/epilog_after.php"); // подключение настроек при многосайтовости require_once($_SERVER['DOCUMENT_ROOT']."/bitrix/modules/main/include/mainpage.php"); $site_id = CMainPage::GetSiteByHost(); $page = CMainPage::GetIncludeSitePage($site_id); // хидер и футер require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php"); require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php"); // в шапке файлов header/footer <?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?> // компонент подключения файла <?$APPLICATION->IncludeFile(SITE_DIR . "include/fileName.php", Array(), Array("MODE" => "php") );?>
Не желательно подключать файлы css и js напрямую. Для этого лучше всего использовать соответствующие функции 1С-Битрикс, что позволит их объединить, сжать и значительно экономить время загрузки страницы. Включение сжатия происходит в настройках главного модуля в разделе Оптимизация CSS.
// Подключение css, js и jquery <?$APPLICATION->SetAdditionalCSS(SITE_TEMPLATE_PATH . "/css/style.css");?> <?$APPLICATION->AddHeadScript(SITE_TEMPLATE_PATH . "/js/script.js");?> <?$APPLICATION->SetHeadString('<meta name="viewport" content="width=device-width, initial-scale=1">'); <?CJSCore::Init(array("jquery"));?> // Подключение файлов CSS и JS в D7 use Bitrix\Main\Page\Asset; Asset::getInstance()->addCss(SITE_TEMPLATE_PATH . '/css/style.css'); Asset::getInstance()->addJs(SITE_TEMPLATE_PATH . '/js/script.js'); Asset::getInstance()->addString('<meta name="viewport" content="width=device-width, initial-scale=1">'); // Подключение js и css в шаблоне компонента $this->addExternalJS('/local/js/script.js'); $this->addExternalCss('/local/css/style.css');
Шаблон
<? $APPLICATION->ShowTitle(); ?> // мета-заголовок <? $APPLICATION->ShowTitle(false); ?> // заголовок H1 <? $APPLICATION->ShowHead(); ?> // вывод основных тегов (Content-Type, robots, keywords, description; стили CSS; скрипты javascript) <? $APPLICATION->ShowPanel(); ?> // выводит панель управления <?=SITE_TEMPLATE_PATH;?> // путь к шаблону
<?=SITE_SERVER_NAME;?> // сайт <?=LANG_CHARSET;?> // Кодировка сайта // Мета-теги по отдельности <? $APPLICATION->ShowMeta("description") ?> <? $APPLICATION->ShowMeta("keywords") ?> <? $APPLICATION->ShowCSS(); ?> // template_styles.css и styles.css <? $APPLICATION->ShowHeadStrings() ?> // специальные стили, JavaScript <? $APPLICATION->ShowHeadScripts() ?> // служебные скрипты
Поля элемента в шаблоне
<?=$arItem["NAME"]?> // название <?=$arItem["DETAIL_PAGE_URL"]?> // ссылка <?=$arItem["PREVIEW_TEXT"];?> // анонс <?=$arResult["DETAIL_TEXT"];?> // детальное описание <?=$arItem["PREVIEW_PICTURE"]["SRC"]?> // изображение для анонса <?=$arItem["DETAIL_PICTURE"]["SRC"]?> // изображение <?=$arResult['DISPLAY_ACTIVE_FROM']?> // дата начала активности <?=$arItem['DATE_CREATE']?> // дата создания <?=$arResult["SECTION"]["PATH"][0]["NAME"]?> // название раздела элемента
// проверка на наличие фото <?if (strlen($arItem["DETAIL_PICTURE"]["SRC"])>0):?> <img src="<?=$arItem["DETAIL_PICTURE"]["SRC"]?>"/> <?else:?> изображения нет <?endif?>
Вывод меню
<? $APPLICATION->IncludeComponent( "bitrix:menu", "top_menu", array( "ROOT_MENU_TYPE" => "top", // меню типа top "MENU_CACHE_TYPE" => "A", "MENU_CACHE_TIME" => "3600", "MENU_CACHE_USE_GROUPS" => "Y", "MENU_CACHE_GET_VARS" => array( ), "MAX_LEVEL" => "1", "CHILD_MENU_TYPE" => "left", "USE_EXT" => "N", "DELAY" => "N", "ALLOW_MULTI_SELECT" => "N" ), false ); ?>
Пример простой страницы
<? require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php"); $APPLICATION->SetTitle("Заголовок страницы"); ?> <? require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php"); ?>
Пример страницы без дизайна
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php"); require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/epilog_after.php");
Вывод данных из справочника
Выводим массив элемента highload-блока на примере вывода данных расширенных настроек сайта. Так удобно хранить настройки сайтов, если их много в панели администратора.
// подключаем пространство имен класса HighloadBlockTable use Bitrix\Highloadblock\HighloadBlockTable as HLBT; // id highload-инфоблока const MY_HL_BLOCK_ID = 1; //подключаем модуль highloadblock CModule::IncludeModule('highloadblock'); //Функция получения экземпляра класса function GetEntityDataClass($HlBlockId) { if (empty($HlBlockId) || $HlBlockId < 1) { return false; } $hlblock = HLBT::getById($HlBlockId)->fetch(); $entity = HLBT::compileEntity($hlblock); $entity_data_class = $entity->getDataClass(); return $entity_data_class; } $entity_data_class = GetEntityDataClass(MY_HL_BLOCK_ID); $arFilter = Array( Array( "LOGIC"=>"OR", Array( "UF_SITE"=> SITE_SERVER_NAME ), Array( "UF_SITE"=> 'www.'.SITE_SERVER_NAME ), Array( "UF_SITE"=> str_replace('www.','',SITE_SERVER_NAME) ) ) ); $rsData = $entity_data_class::getList(array( 'select' => array('*'), 'filter' => $arFilter )); while($el = $rsData->fetch()){ $site_info = $el; }