следующий код application includecomponent bitrix catalog main array
Функция CMain::IncludeComponent
Что же это за функция такая CMain::IncludeComponent() у основного класса приложения в Bitrix, как ей пользоваться, что не так в документации о ней.
Введение
Давайте разберемся, что за функция CMain::IncludeComponent(), и как ей пользоваться, чтобы потом не было стыдно (кстати, это не функция, а метод * но я специально использую слово функция для лучшего ранжирования ).
Документация, конечно же, есть (ссылочка на нее), и могу сказать, что она на 90% правильная, но кое-что в ней все-таки не так. Давайте разбираться по порядку.
Чтобы правильно препарировать любую функцию нужно знать ответ на три вопроса мироздания об этой функции:
Зная ответ на каждый из этих вопросов, вы сможете правильно пользоваться данной функцией.
1. Что делает функция?
Тут все просто и без каких-либо чудес: метод подключает указанный компонент с указанным шаблонов в том месте, где он вызывается. Если вам надо подключить компонент на странице, то просто «нажимаем на этот метод».
2. Какие параметры функция принимает?
Здесь тоже, в целом, все написано верно в документации, повторим все параметры.
Что ж, нашинковали, думаю, теперь понятно как компонентом можно управлять, а теперь перейдем к самому интересному.
3. Что функция возвращает?
Даже мне, человеку, который знает, что метод возвращает на самом деле, с моим богатым ассоциативным воображением, тяжеловато соотнести это словосочетание с правдой. Давайте разбираться.
Если документации верить нельзя, а спросить не у кого (представим что я не знаю, что там происходит на самом деле), то нужно идти в исходный код, его можно посмотреть на специальном сайте bxapi.ru, или в вашем любимом редакторе, открыв файл: bitrix/modules/main/classes/general/main.php.
А откуда он берется
Теперь мы знаем, что метод IncludeComponent() класса CMain возвращает то, что возвращает метод IncludeComponent() класса CBitrixComponent. Теперь докопаемся до него по той же схеме.
Заходим в этот класс и ищем метод с тем же названием, ссылка на bxapi.ru, сам файл: bitrix/modules/main/classes/general/component.php
Тут мы видим два источника все той же переменной $result, работает либо один либо другой:
Первая от ядра D7, если вы создали class.php, кстати, если вы не переопределяли метод executeComponent(), то его код выглядит так:
Отсюда делаем еще один вывод: class.php в обычном режиме (без переопределения, или сделав parent::executeComponent()) подключает внутри себя файл component.php.
Внутри метода __includeComponent() мы увидим такую строку кода:
Итого
Если обобщить, то метод CMain::IncludeComponent() (вы его часто видите в виде $APPLICATION->IncludeComponent()) возвращает то, что возвращает сам компонент. Т.е. вы полностью управляете тем, что будет возвращено этим методом при подключении вашего собственного компонента. Например, такой механизм можно использовать в паре компонентов «Фильтр» + «Список»: фильтр возвращает массив для фильтрации, а список его принимает в качестве параметра.
И это прям совсем не «код компонента», как нам обещали в документации. Доверяй, но проверяй.
Резюме
Кратко резюмируем полученную информацию:
Автор: Волков Михаил Профиль
Профессиональный веб-разработчик со стажем 10+ лет. Все это время я провел в веб-разработке, участвовал в проектах различной сложности и обучал мастерству программирования новобранцев.
Вставка включаемой области в Битрикс
Если в Битрикс вы хотите вставить дополнительные области, это можно сделать через редактор, но нужно знать и код. специально для любознательных. давайте разбираться.
Вставка включаемой области (это они так назвали), то есть дополнительная какая-либо включаемая область текста например.
Вставка дополнительного файла на странице:
IncludeComponent(
«bitrix:main.include»,
«»,
Array(
«AREA_FILE_SHOW» => «file»,
«PATH» => SITE_TEMPLATE_PATH.»/include/company.php»
)
);?>
Тут мы видим, что подключается файл из папки include прямо на страницу. Вот такой вот незамысловатый код.
Функция подключения компонента
Включаемая область для раздела
IncludeComponent(
«bitrix:main.include»,
«»,
Array(
«AREA_FILE_SHOW» => «sect»,
«AREA_FILE_SUFFIX» => «inc»,
«AREA_FILE_RECURSIVE» => «Y»,
«EDIT_MODE» => «html»,
«EDIT_TEMPLATE» => «» //
),
false
);?>
AREA_FILE_RECURSIVE — рекурсивное подключение (Y,N)
EDIT_MODE — режим редактирования (html, php)
EDIT_TEMPLATE — шаблон области по умолчанию, должен лежать в директории page_templates шаблона сайта
Включаемая область для страницы
IncludeComponent(
«bitrix:main.include»,
«»,
Array(
«AREA_FILE_SHOW» => «page»,
«AREA_FILE_SUFFIX» => «inc»,
«EDIT_MODE» => «html»,
«EDIT_TEMPLATE» => «»
),
false
);?>
Включаемый файл шаблона
Подключается file.php из шаблона
Цепочка навигации
IncludeComponent(
«bitrix:menu»,
«horizontal_multilevel»,
array(
«ROOT_MENU_TYPE» => «left»,
«MENU_CACHE_TYPE» => «N»,
«MENU_CACHE_TIME» => «3600»,
«MENU_CACHE_USE_GROUPS» => «Y»,
«MENU_CACHE_GET_VARS» => array(),
«MAX_LEVEL» => «1»,
«CHILD_MENU_TYPE» => «left»,
«USE_EXT» => «N»,
«ALLOW_MULTI_SELECT» => «N»
),
false
);?>
ROOT_MENU_TYPE — тип меню верхнего уровня
CHILD_MENU_TYPE — тип меню остальных уровней
MAX_LEVEL — максимальный уровень вложенности
Вертикальное меню
IncludeComponent(
«bitrix:menu»,
«vertical_multilevel»,
array(
«ROOT_MENU_TYPE» => «left»,
«MENU_CACHE_TYPE» => «N»,
«MENU_CACHE_TIME» => «3600»,
«MENU_CACHE_USE_GROUPS» => «Y»,
«MENU_CACHE_GET_VARS» => array(),
«MAX_LEVEL» => «1»,
«CHILD_MENU_TYPE» => «left»,
«USE_EXT» => «N»,
«ALLOW_MULTI_SELECT» => «N»
),
false
);?>
IncludeComponent(
«bitrix:system.auth.form»,
«»,
Array(
«REGISTER_URL» => «»,
«PROFILE_URL» => «»,
«SHOW_ERRORS» => «N»
),
false
);?>
REGISTER_URL — путь к странице регистрации
PROFILE_URL — путь к странице профиля пользователя
Форма поиска
PAGE — путь к странице поиска
Список новостей
DISPLAY_DATE — показывать дату (Y,N)
DISPLAY_NAME — показывать название (Y,N)
DISPLAY_PICTURE — показывать картинку анонса (Y,N)
DISPLAY_PREVIEW_TEXT — показывать анонс (Y,N)
NEWS_COUNT — количество выводимых новостей
Новостная лента
IncludeComponent(
«bitrix:news.line»,
«»,
Array(
«IBLOCK_TYPE» => «news»,
«IBLOCKS» => «»,
«NEWS_COUNT» => «20»,
«FIELD_CODE» => «»,
«SORT_BY1» => «ACTIVE_FROM»,
«SORT_ORDER1» => «DESC»,
«SORT_BY2» => «SORT»,
«SORT_ORDER2» => «ASC»,
«DETAIL_URL» => «»,
«ACTIVE_DATE_FORMAT» => «d.m.Y»,
«CACHE_TYPE» => «A»,
«CACHE_TIME» => «300»
),
false
);?>
DETAIL_URL — путь к странице детального просмотра, по умолчанию берется из настроек инфоблока
NEWS_COUNT — количество выводимых новостей
Малая корзина
IncludeComponent(
«bitrix:sale.basket.basket.small»,
«»,
Array(
«PATH_TO_BASKET» => «/personal/basket.php»,
«PATH_TO_ORDER» => «/personal/order.php»
),
false
);?>
Включаемая область Битрикс
Для реализации функционала с вставкой включаемой областью в битрикс понадобится компонент bitrix:main.include, который необходим для выноса статичьных данных в отденьный файл и редактирования их средствами cms битрикс с помощью «режима правки»
Компонент bitrix:main.include
Включаемая область в битркис для всего раздела
Параметр «AREA_FILE_SHOW» => «sect» подключает включаемую область для всего раздела. Для этого в разделе создаем файл с именем sect_inc.php Установив компонент в шаблоне и перейдя в раздел сайта мы увидим подключение sect_inc.php Если установим параметр «AREA_FILE_RECURSIVE» => «Y» все внутренние разделы также покажут этот файл.
Включаемая область для страницы
Параметр «AREA_FILE_SHOW» => «page» подключает включаемую область для определенной страницы. Для этого в разделе создаем файл с именем index_inc.php Установив компонент в шаблоне и перейдя на определенную страницу сайта мы увидим подключение index_inc.php
Включаемая область из файла
Параметр «AREA_FILE_SHOW» => «file» подключает включаемую область в битрикс из файла. Для этого в параметре «PATH» => SITE_TEMPLATE_PATH.»/include/header-logo.php» указываем путь до файла отностительно корня сайта.
Навыки и умения Знание PHP5, MySQL, JS, HTML5, CSS3. Работа с технологиями XML, AJAX, GIT, SOAP Большой опыт взаимодействия с сервером. Работа с 1C-BITRIX FRIMEWORK, BITRIX24
Вставка включаемой области на все страницы сайта
Евгений,
посоветуйте пожалуйста как лучше реализовать включаемую область
У меня есть один файл ***.php
для ***.php?SECTION_ID=238 нужно вывести один текст во включаемой области
а для ***.php?SECTION_ID=237 нужно выводить уже другой текст во включаемой области.
Я поставил вывод включаемой области для страницы., но она показывается разумеется одинаковая.
может я не там копаю?
Евгений Жуков,
Не придирайтесь. Человек спросил про два раздела, естественно это было примером а не конкретным решением. Пусть хоть в зависимости от вложенности включаемую область вешает.
И прежде чем минусовать, скажите как бы вы сделали.
Цитата |
---|
Артур Глазов пишет: И прежде чем минусовать, скажите как бы вы сделали |
Цитата |
---|
Евгений Жуков пишет: А если понадобится вывести третий текст для раздела с > |
Проще делаетсо :)Добавляем в корень папку, туда файлы. Далее, в общем шаблоне указываем путь, вот и всё.
в element.php комплексного компонента новостей помещаем код, таким образом для каждого элемента вы сможете получить уникальную включаемую область.
Добрый день!
Для раздела «Акции» добавил включаемую область. Нужно что бы эта область была только в корне данного раздела. Но она у меня отображается в каждой новости (акции)
Пробовал использовать включаемую область «для страницы», «из файла» но ни каких изменений нет. Область всегда отображается и в корне раздела и в самой акции.
В самой акции
Подскажите пожалуйста как сделать что бы область отображалась только в корне раздела.
Подключение компонента обратной связи в шаблон компонента catalog.element
Если я передаю в элемент массива «CONTENT» то что выше без кавычек то компонент работает но отображается выше табс. (см фото Проблема1)
Если я ставлю кавычки разные и даже пробую открывающие закрывающие теги php то получается как по фото Проблема2
Все это конечно же я пришу как вы советовали исходя из этого подключаемого модуля в компонент эпилог файле.
Все понятно, вызов компонента выводит html и поэтому форма появляется над табами, а во втором случае вызов становится просто стройкой.
Надо сделать вот так:
У меня работает
Цитата |
---|
Scrooge написал: Все понятно, вызов компонента выводит html и поэтому форма появляется над табами, а во втором случае вызов становится просто стройкой. |
Надо сделать вот так:
Но вот то что dreamweaver понаписал в сопутствующих файлах css вот там было огромное количество кода.
Я то думал что можно присвоить ключу строковое значение со всем содержимым подключаемого модуля.
Ваш код у меня заработал тоже. Вот только непойму почему таб по умолчанию не скрывается когда я присваиваю «ACTIVE» => «N», Я думал это и влияет на изначальное открытие\скрытие таба.
Если только изучаете, то никаких кодогенераторов, все вручную, начать писать код лучше в Notepad++, потом, через 1-2 года, когда почувствуется дзен, можно переходить на IDE для ускорения и повышения заработка.
Если нужно убрать таб, когда он только один, то можно попробовать скопировать шаблон компонента catalog.tabs и дописать подходящее условие в цикле foreach(), вот здесь.
https://monosnap.com/file/fYVTrb8qIcF1vMCj0T7y1UKswGe0h7.png
Но не факт, что джаваскрипт табов будет работать, если скрыть ul li, попробуйте лучше скрыть таб в css, не копируя шаблон.