Как использовать компонент
Урок
137
из
366
Сложность урока:
3 уровень – средняя сложность. Необходимо внимание и немного подумать.
3 из 5
Дата изменения:
16.03.2023
Просмотров:
59068
Недоступно в лицензиях:
Текущую редакцию Вашего 1С-Битрикс можно просмотреть на странице Обновление платформы (Marketplace > Обновление платформы).
Ограничений нет
Видеоурок
В предыдущих уроках мы разобрались, что такое
компонент
Компонент – специальный элемент системы, предназначенный для вывода информации из Базы данных сайта.
Подробнее…
. Система “1С-Битрикс: Управление сайтом” обладает стандартным набором компонентов, которые помогают решить практически все возможные задачи.
Где найти компоненты?
Мы сказали, что в системе есть стандартный набор компонентов. Где же они находятся? На специальной панели в
визуальном редакторе
Визуальный редактор – инструмент, позволяющий отображать редактируемый текст в точности так
же, как он будет выглядеть на странице, без использования HTML кода.
Подробнее…
, в которой компоненты разделены на группы (например – контент, общение, магазин). Строка поиска чуть ниже поможет вам найти компонент по названию.
Как разместить компонент на странице?
Просто
переместите
его мышкой в рабочую область слева от списка. Заметьте, что у простых компонентов серая иконка, а у комплексных – зеленая:
Сразу после размещения появится окно настройки компонента. Пока можете его закрыть, мы обратимся к настройке чуть позже.
Если что-то не получается
- Не вижу панели компонентов в визуальном редакторе:
1. Сначала проверьте, возможно, панель просто скрыта. Раскройте её, нажав на
стрелочку
справа;
2. Панель компонентов показана только для страниц со
статической информацией
Статическая информация – это информация, которая редко меняется с течением времени. Например, рекламные тексты, история компании, контактная информация. Статическая информация создается и редактируется вручную.Подробнее…
. Если вы ее не видите, значит, вы редактируете
Инфоблок
Информационный блок (или Инфоблок) – специальный инструмент “1С-Битрикс: Управление сайтом” с помощью которого заносится информация в Базу данных.
Подробнее…
. - Не могу найти нужный компонент в визуальном редакторе. В этом случае возможны два варианта:
1. либо вы пользуетесь редакцией продукта, в которой отсутствует данный компонент;
2. либо
администратор ограничил
Ограничение работает так: если в поле нет ни одного компонента, то разрешены все. Если в поле добавлен хотя бы один компонент, то будет разрешен только он (все остальные запрещены). Иными словами, для запрета доступа к единственному компоненту в это поле нужно внести все компоненты, которые разрешены.Подробнее…
список разрешенных компонентов. - Я разместил два комплексных компонента, а правильно работает только один из них. Все верно, работать будет только первый комплексный компонент.
Заключение
Компоненты расположены в визуальном редакторе и добавляются на страницу простым переносом. Однако недостаточно просто разместить компонент, мы должны также настроить его. Об этом поговорим в следующем уроке.
-
1С-Битрикс
Доброго времени суток. Нашёл подключение компонента. bitrix:catalog.section, шаблон не соответствует действительности. Куда капать?
<?//SECTION//?>
<?$intSectionID = $APPLICATION->IncludeComponent("bitrix:catalog.section", $view,
array(
"IBLOCK_TYPE" => $arParams["IBLOCK_TYPE"],
"IBLOCK_ID" => $arParams["IBLOCK_ID"],
"ELEMENT_SORT_FIELD" => $arParams["ELEMENT_SORT_FIELD"],
"ELEMENT_SORT_ORDER" => $arParams["ELEMENT_SORT_ORDER"],
),
false,
array("HIDE_ICONS" => "Y")
);?>
-
Вопрос заданболее трёх лет назад
-
3416 просмотров
6
комментариев
-
Куда капать?
капайте в стограммовый стаканчик…
-
название шаблона в переменной $view так-то, а сам шаблон может лежать черти где, как минимум в трех местах, эрмитаж подрубай и ищи через него
чо ты там нашел, не представляю…
курсы разработчика пройди и все вопросы ТАКОГО УРОВНЯ отпадут -
Открываете сайт в режиме правки, наводите на список товаров, появится панелька, в самом конце есть возможность посмотреть какие компоненты используются и есть возможность открыть редактирование шаблона bitrix:catalog.section.
Вот именно в окне редактирования вверху на плашке будет путь к шаблону.
Есть и другие способы, например если знаете какая тема, то найти в папке этой темы. Если этот компонент подключается внутри комплексного компонента Каталог, то можно обнаружить внутри шаблона этого компонента
-
alex-1917, во $view попадает get параметры вида отображения страницы (таблица, лист, прайс). По дефолту лежит table. Но не каких table там нет папок
-
-
MaximMRX, это название шаблона. т.е. у вас три шаблона для разного отображения, не самый оптимальный вариант и первый признак г-кода…
а где он лежит – как я и говорил, в трех местах может лежать. через совет Герасимова ищите, это самый верный вариант из всех верных… хотя мне кажется, вы там и половины слов не поняли.
чтобы вам тут разжевали, давайте больше скринов, в частности, когда откроете шаблон то НАВЕРХУ в шапке всплывшего окна будет путь к нему.
а вы даете какой-то КУСОК скрина, тут что ванги собрались или кто здесь?
Решения вопроса 1
Дампаете переменную $view
, получили название шаблона.
Где искать
/bitrix/templates/ваш_шаблон/components/bitrix/catalog.section/
/bitrix/templates/.default/components/bitrix/catalog.section/
или
/local/templates/ваш_шаблон/components/bitrix/catalog.section/
Ну а вообще, если вы попробуете редактировать шаблон из публичной части, в окне редактирования будет полный путь до шаблона
-
Спасибо. Натолкнули на мысли. Там два одинаковых шаблона. В итоге нашёл в папке .default.
-
lolhunter, в этой директории не рекомендуется править шаблоны.
Пригласить эксперта
Похожие вопросы
-
Показать ещё
Загружается…
17 мая 2023, в 14:02
8000 руб./за проект
17 мая 2023, в 14:01
20000 руб./за проект
17 мая 2023, в 13:48
1000 руб./за проект
Минуточку внимания
Размещение компонентов в системе
В данном уроке рассмотрим, где компоненты размещаются внутри 1С-битрикс.
Фактически компоненты можно разделить на два вида – это системные и пользовательские компоненты. Каждый из видов размещаются в своей директории.
Системные компоненты расположены в директории /bitrix/components/bitrix/. Cодержимое этой папки изменять нельзя. Здесь находятся файлы, которые обновляются разработчиками, а внесенные изменения в них будут стерты. Проект может быть и снят с поддержки, в таком случае усложняется в целом его обновления.
В тоже время все пользовательские компоненты могут лежать прям в этой же паке components или для системного хранения под них можно создать отдельную директорию, которая в терминологии битрикс называться «Пространством имен компонентов».
/bitrix/components/имя_компонента/
или в папке с нашим пространством имен
/bitrix/components/наше_пространство_имен/имя_компонента/
Разработчики битрикс рекомендуют создавать отдельную папку в дереве сайта с названием local. В этой папке, как в директории bitrix, нужно разместить папку под компоненты “components”. В папку components мы копируем системные компоненты или же создаем в ней свои. Такая папка local имеет приоритет перед папкой Битрикс, и все ее компоненты загружаются в первую очередь. Как работать в данной директории я покажу в одном из уроков на практическом примере.
Для общего понимания, давайте скопируем системный компонент в свое пространство имен.
Наименование компонентов
Теперь мы знаем, что в папке bitrix располагаются системные компоненты, названием ее является пространством имен. Это же пространство имен мы видим в компоненте, когда открываем его на редактирование, или в режиме кода. Если компонент находится в нашем пространстве имен, то в режиме кода мы увидим в место bitrix название папки, в которой он расположен.
За пространством имен идет двоеточие, и далее за ним располагается имя компонента, которое может состоять из нескольких слов, разделеных точкой.
Сами имена компонентов имеют следующий вид, идентификатор1.идентификатор2… Например, news, news.list, news.detail и т.д. Имена рекомендуется строить иерархически с общего понятия и заканчивать конкретным названием компонента.
Вообще считается полное имя компонента – это имя компонента с указыванием пространства имен. Оно имеет вид: пространство_имен:имя_компонента. Например, bitrix:news.list или bitrix:news – это все имена компонентов. Если компонент лежит не в пространстве имен, то пространство имен не указывается, а пишется просто: имя_компонента.
Подключение компонента
Компонент подключается на странице при помощи кода вызова. Написать код можно как вручную, так и вставить его через визуальный редактор. В редакторе компоненты располагаются справой стороны. Выбираем тот, который нам нужен и простым перетаскиванием размещаем его в область формы.
Если включить режим кода, мы увидим, как он вызывается.
Каждый компонент подключается при помощи функции IncludeComponent(), объекта $APPLICATION, в который передаются параметры его настроек.
Первый параметр – это название компонента, которое с вами разбирали “bitrix:news.list“. Видим, что оно состоит из двух частей: bitrix: пространство имен компонента и его название news.list.
Второй параметр – это наименование шаблона. Если пустые кавычки, тогда устанавливается шаблон по умолчанию, с именем .default, если установлен шаблон в настройках, тогда увидим в кавычках его наименование.
Третий параметр – это массив входящих параметров, который используется в работе компонента.
<?$APPLICATION->IncludeComponent( "bitrix:news.list", "", array( "ACTIVE_DATE_FORMAT" => "d.m.Y", "ADD_SECTIONS_CHAIN" => "Y", "AJAX_MODE" => "N", ………. ), false );?>
Боле подробно с параметрами мы познакомимся в отдельном уроке, где на практике соберем их самостоятельно.
Запомните главную вещь: любой из компонентов состоит из обязательного набора папок и файлов!!! Разницы не имеет, какой бы вы из них рассматриваете структура их будет едина. То есть, что компонент Google Maps, что фотогалерея, компонент “каталог” – у них одна структура. Отличие сможете найти только между простым и комплексным компонентами. Это означает то, что не нужно изучать громаду документации. На самом деле все достаточно просто устроено! Вам нужно только понять, как это все работает, и сможете реализовать любую идею, которая у вас появится.
Детально с каждым из видов компонентов я познакомлю в отдельном уроке, там же разберем их отличия и файловую структуру.
Оставить комментарий:
Компоненты позволяют выводить нужную информацию из базы данных в произвольном месте на сайте.
Как вставить компонент на страницу
Включите режим правки в публичной части сайта.
Наведите мышь на нужную область сайта и вызовите визуальный редактор, нажав на кнопку «Изменить область».
Либо нажмите «Изменить страницу» – «В визуальном редакторе» для редактирования всей страницы.
Разверните боковую панель редактора, если она скрыта, кликнув по ней.
Компоненты разделены на группы по назначению (например, контент, сервисы, служебные), либо по автору (если вы установили компонент из Маркетплейса).
Если нужный компонент не отображается в списке, то нажмите на стрелку справа от кнопки «Компоненты» (1), и нажмите «Обновить» во всплывающей подсказке (2).
Внимание! Панель компонентов выводится только для страниц со статической информацией. Если вы ее не видите, значит, вы редактируете информационный блок.
Переместите нужный компонент мышкой в рабочую область слева от списка.
Как настроить компонент?
Существует несколько способов изменить настройки компонента.
- Способ 1. Дважды кликните по компоненту левой кнопкой мыши.
- Способ 2. Кликните по компоненту правой кнопкой мыши и выберите «Параметры компонента» во всплывающей подсказке.
-
Способ 3. В режиме правки наведите мышь на компонент и кликните по значку в форме шестеренки.
После этого появится всплывающее окно с параметрами данного компонента.
* Набор настроек для каждого компонента индивидуален.
Теперь можно выполнить необходимые настройки и нажать «Сохранить».
Пример создания своего компонента для CMS 1С Битрикс
Редактировать
В этой статье предпринята попытка пошагово описать процесс создания простого компонента для 1С Битрикс
с минимальным использованием функционала старого ядра и максимально близко к принципам написания кода на D7.
Репозиторий примера можно посмотреть тут
Размещение компонента в файловой структуре сайта
Компоненты в битрикс размещаются по пути от корня вашего сайта /bitrix/components
В этой папке всегда есть каталог bitrix
нем расположены компоненты, которые достались вам при установки Битрикса
и количество этих компонентов варьируется в зависимости от используемой вами редакцией продукта.
В папке /bitrix/components
можно создавать свои папки, в терминах битрикса это называется “пространством имен”,
так например при установке модулей из Маркетплейс модули партнеров скопируют свои компоненты именно в эту папку,
предварительно создав в ней свое “пространство имен”.
Не путайте термин “пространства имен” в рамках Битрикса и пространства имен PHP
этот термин остался в Битриксе исторически и нам придется с этим мириться.
Так же компоненты можно разместить в каталоге /local/components
в этой папке нужно так же создать свое “пространство имен” в
виде отдельного каталога в котором и разместить свой компонент.
Для размежения локальных компонентов, которые пишутся под конкретный проект, а так же для кастомизации стандартных компонентов
Битрикса нужно использовать именно папку /local/components
Для нашего примера будем использовать папку ‘example’ в качестве “пространства имен”, а назовем компонент compsimple
таким образом итоговый путь к файлам разрабатываемого компонента будет таким: /local/components/example/compsimple
.
Структура файлов и папок компонента
Основной файл компонента к которому происходит обращение при подключении компонента на странице и в котором находится точка входа в логику работы компонента class.php
.
Следующий по важности файл .description.php
он содержит описание компонента и путь для его отображения в интерфейсе системы.
Принято выносить языкозависимые тексты в языковые файлы поэтому нам нужна папка lang
в которой будут находиться папки с кодами языков, в нашем случае только ru
в ней должен быть еще один файл .description.php
, а он уже содержит массив с переводами текстов.
Почти каждый компонент в итоге своей работы выводит информацию на сайт, для этого нужно создать файлы шаблонов компонента. Папка templates
создается для хранения шаблонов отображения, шаблон по умолчанию должен располагаться в папке .default
в файле template.php
.
Выше был описан минимальный набор файлов, обеспечивающий работу компонента. Если компоненту для своей работы требуются дополнительные файлы или логика компонента требует создания нескольких классов, то никто не запрещает добавлять все нужные данные в папку компонента и подключать их в нужных местах кода.
Большей части компонентов для обеспечения корректной работы требуется передать какие-либо начальные значения, обеспечить отображение полей для ввода параметров позволит файл .parameters.php
Итоговая структура файлов и папок используемых в примере выглядит так:
/local/components/example/compsimple #component root directory
├── /lang
| └── /ru
| └── .description.php
├── /templates
| └── /.default
| └── template.php
├── .description.php
├── .parameters.php
└── class.php
class.php
В файле class.php должен располагаться класс компонента унаследованный от CBitrixComponent
.
Принцыпы именования класса компонента нигде не регламинтированы, но рекомендуется давать имя классу максимально похожее на путь к компоненту. Наш класс будет называться ExampleCompSimple
.
пример из официальной документации
Пример содержимого нашего файла:
<?php
use BitrixMainLoader;
use BitrixMainApplication;
if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) die();
class ExampleCompSimple extends CBitrixComponent {
private $_request;
/**
* Проверка наличия модулей требуемых для работы компонента
* @return bool
* @throws Exception
*/
private function _checkModules() {
if ( !Loader::includeModule('iblock')
|| !Loader::includeModule('sale')
) {
throw new Exception('Не загружены модули необходимые для работы модуля');
}
return true;
}
/**
* Обертка над глобальной переменной
* @return CAllMain|CMain
*/
private function _app() {
global $APPLICATION;
return $APPLICATION;
}
/**
* Обертка над глобальной переменной
* @return CAllUser|CUser
*/
private function _user() {
global $USER;
return $USER;
}
/**
* Подготовка параметров компонента
* @param $arParams
* @return mixed
*/
public function onPrepareComponentParams($arParams) {
// тут пишем логику обработки параметров, дополнение параметрами по умолчанию
// и прочие нужные вещи
return $arParams;
}
/**
* Точка входа в компонент
* Должна содержать только последовательность вызовов вспомогательых ф-ий и минимум логики
* всю логику стараемся разносить по классам и методам
*/
public function executeComponent() {
$this->_checkModules();
$this->_request = Application::getInstance()->getContext()->getRequest();
// что-то делаем и результаты работы помещаем в arResult, для передачи в шаблон
$this->arResult['SOME_VAR'] = 'some result data for template';
$this->includeComponentTemplate();
}
}
.description.php
В принципах описания компонента ничего не меняется почи с времен появления БУС. Тут относительно подробное описание структуры файла.
Рассмотрим пару примеров размещения компонента в визуальном редакторе:
- Разместить компонент в ветке на ровне с остальными основными ветками
<?if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();
use BitrixMainLocalizationLoc;
$arComponentDescription = [
"NAME" => Loc::getMessage("EXAMPLE_COMPSIMPLE_COMPONENT"),
"DESCRIPTION" => Loc::getMessage("EXAMPLE_COMPSIMPLE_COMPONENT_DESCRIPTION"),
"COMPLEX" => "N",
"PATH" => [
"ID" => Loc::getMessage("EXAMPLE_COMPSIMPLE_COMPONENT_PATH_ID"),
"NAME" => Loc::getMessage("EXAMPLE_COMPSIMPLE_COMPONENT_PATH_NAME"),
],
];
?>
Результат:
- Разместить компонент в дочернюю ветку
<?if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();
use BitrixMainLocalizationLoc;
$arComponentDescription = [
"NAME" => Loc::getMessage("EXAMPLE_COMPSIMPLE_COMPONENT"),
"DESCRIPTION" => Loc::getMessage("EXAMPLE_COMPSIMPLE_COMPONENT_DESCRIPTION"),
"COMPLEX" => "N",
"PATH" => [
"ID" => Loc::getMessage("EXAMPLE_COMPSIMPLE_COMPONENT_PATH_ID"),
"NAME" => Loc::getMessage("EXAMPLE_COMPSIMPLE_COMPONENT_PATH_NAME"),
"CHILD" => [
"ID" => Loc::getMessage("EXAMPLE_COMPSIMPLE_COMPONENT_CHILD_PATH_ID"),
"NAME" => GetMessage("EXAMPLE_COMPSIMPLE")
]
],
];
?>
Результат:
Пример файла языковых констант lang/ru/.description.php
:
<?if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();
$MESS["EXAMPLE_COMPSIMPLE_COMPONENT_PATH_ID"] = "local";
$MESS["EXAMPLE_COMPSIMPLE_COMPONENT_CHILD_PATH_ID"] = "compsimplechiltpath";
$MESS["EXAMPLE_COMPSIMPLE_COMPONENT_PATH_NAME"] = "Компоненты проекта";
$MESS["EXAMPLE_COMPSIMPLE"] = "Дочерняя ветка";
$MESS["EXAMPLE_COMPSIMPLE_COMPONENT"] = "Тестовый компонент";
$MESS["EXAMPLE_COMPSIMPLE_COMPONENT_DESCRIPTION"] = "Описание тестового компонента";
.parameters.php
Для отображения полей для передачи параметров в форме настроек компонента предназначен файл .parameters.php. Он содержит в себе массив с определением типа и значений входных параметров компонента.
Официальная документация
Пример файла:
<?if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();
/**
* @var string $componentPath
* @var string $componentName
* @var array $arCurrentValues
* */
use BitrixMainLoader;
use BitrixMainLocalizationLoc;
if( !Loader::includeModule("iblock") ) {
throw new Exception('Не загружены модули необходимые для работы компонента');
}
// типы инфоблоков
$arIBlockType = CIBlockParameters::GetIBlockTypes();
// инфоблоки выбранного типа
$arIBlock = [];
$iblockFilter = !empty($arCurrentValues['IBLOCK_TYPE'])
? ['TYPE' => $arCurrentValues['IBLOCK_TYPE'], 'ACTIVE' => 'Y']
: ['ACTIVE' => 'Y'];
$rsIBlock = CIBlock::GetList(['SORT' => 'ASC'], $iblockFilter);
while ($arr = $rsIBlock->Fetch()) {
$arIBlock[$arr['ID']] = '['.$arr['ID'].'] '.$arr['NAME'];
}
unset($arr, $rsIBlock, $iblockFilter);
$arComponentParameters = [
// группы в левой части окна
"GROUPS" => [
"SETTINGS" => [
"NAME" => Loc::getMessage('EXAMPLE_COMPSIMPLE_PROP_SETTINGS'),
"SORT" => 550,
],
],
// поля для ввода параметров в правой части
"PARAMETERS" => [
// Произвольный параметр типа СПИСОК
"IBLOCK_TYPE" => [
"PARENT" => "SETTINGS",
"NAME" => Loc::getMessage('EXAMPLE_COMPSIMPLE_PROP_IBLOCK_TYPE'),
"TYPE" => "LIST",
"ADDITIONAL_VALUES" => "Y",
"VALUES" => $arIBlockType,
"REFRESH" => "Y"
],
"IBLOCK_ID" => [
"PARENT" => "SETTINGS",
"NAME" => Loc::getMessage('EXAMPLE_COMPSIMPLE_PROP_IBLOCK_ID'),
"TYPE" => "LIST",
"ADDITIONAL_VALUES" => "Y",
"VALUES" => $arIBlock,
"REFRESH" => "Y"
],
// Произвольный параметр типа СТРОКА
"SECTION_IDS" => [
"PARENT" => "SETTINGS",
"NAME" => Loc::getMessage('EXAMPLE_COMPSIMPLE_PROP_SECTION_IDS'),
"TYPE" => "STRING",
"MULTIPLE" => "N",
"DEFAULT" => "",
"COLS" => 25
],
// Настройки кэширования
'CACHE_TIME' => ['DEFAULT' => 3600],
]
];
Языковой файл lang/ru/.parameters.php
<?if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();
$MESS["EXAMPLE_COMPSIMPLE_PROP_SETTINGS"] = "Выбор инфоблока и разделов";
$MESS["EXAMPLE_COMPSIMPLE_PROP_IBLOCK_TYPE"] = "Тип инфоблока";
$MESS["EXAMPLE_COMPSIMPLE_PROP_IBLOCK_ID"] = "Инфоблок";
$MESS["EXAMPLE_COMPSIMPLE_PROP_SECTION_IDS"] = "ID разделов через запятую";
Шаблон компонента
Компонент может содержать множество шаблонов. Шаблон по умолчанию находится в папке .default и именно он отрабатывает, если приподключении компонента оставить имя шаблона пустым.
В нашем примере просто выведем дамп массива входных параметров и массива результатов работы компонента.
<?php if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?>
<?
BitrixMainDiagDebug::dump($arParams);
BitrixMainDiagDebug::dump($arResult);
?>