следующий код 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+ лет. Все это время я провел в веб-разработке, участвовал в проектах различной сложности и обучал мастерству программирования новобранцев.
Как добавить дополнительную область на сайт? Bitrix main include — включаемая область
Рассмотрим ситуацию, к примеру на сайт необходимо добавить блок или код выданный счетчиком поисковой системой, или к примеру код для подключения вывода объявлений из систем контекстных объявлений Yandex.Директ или Google.Adsense.
Для этого в Bitrix существует специальный функционал: bitrix main include, а именно Компонент включаемой области.
Рассмотрим функционал bitrix main include
Для решения разного рода задач очень интересен функционал компонента bitrix:main.include, а именно очень часто требуется внедрить определенный блок на сайт, но не править этот блок в самом шаблоне, боясь нарушить его или внести случайную правку. Для таких целей и служит сей компонент. Помимо этого компонент весьма удобен для редактора сайта, изменить содержимое блока не нарушив работоспособность сайта весьма удобно. К примеру, вы переехали и у вас изменился адрес офиса, разработчик внедрил Bitrix main include и добавил в эту область ваш адрес, изменить старый адрес на сайте на новый теперь проще простого. Или к примеру, необходимо изменить номер телефона:
Для того чтобы изменить данный телефон из примера, достаточно авторизоваться и перейти в режим правки сайта:
Вход в админку битрикс
Шаг 3. Переходим в режим правки:
Шаг 4.
Шаг 5. Нажатием на определенную кнопку «Изменить область» вы переходите в режим правки этой области в визуальном редакторе.
Шаг 6.
Шаг 7. Зеленая кнопка «Сохранить» сохранит ваш новый номер телефона в этом поле. И так можно менять такие поля сколь угодно.
НО, существует задача к примеру ДОБАВИТЬ такую область, а не изменить, тут предстоит поправить шаблон сайта или конкретной страницы.
Задача №1. Добавить область для конкретной страницы и чтоб в этой области была определенная информация, меняя которую в одном месте, автоматически она менялась на всех страницах где эта область подключена. Такого рода задачи бывают в том случае, к примеру когда необходимо вывести информацию об акции на разных страницах сайта и даже на разных его разделах. Изменяя текст в одном месте он меняется везде, к примеру в тексте во включаемой области содержится период проведении акции и необходимо изменить его интервал, таким образом, если бы не включаемая область, то пришлось бы везде где прописана эта акция, проходить и менять интервал к примеру с 1 января по 31 января на с 1 февраля по 28 (29)февраля на каждой странице, а не в одном месте. Итак для этого нам понадобится собственно настроить и внедрить на страницу компонент включаемой области bitrix:main.include.
Для того чтобы внедрить в страницу включаемую область необходимо также как и выше по шагам пройти в систему администрирования сайта, перейти в режим правки (Шаги выше 1,2 и 3). Далее перейти на конкретную статичную страницу сайта или раздела сайта, т.е. туда куда необходимо внедрить эту область. Далее нажать в верхней панели редактирования «Эрмитаж» на редактирование страницы
Далее в текстовом окне, в режиме редактирования, есть специальный блок, который выводит включаемую область, для этого нажимаем на меню справа «Служебные»
В появившемся меню, двойным кликом, выбираем «Включаемая область»
И компонент bitrix:main.include автоматически появится на вашей странице в редакторе и останется его только настроить. Здесь стоит заметить что при режиме редактирования сайтом в виде «Режим редактирования исходного кода» область не появится, для этого необходимо перевести режим правки сайта в визуальный редактор, для этого поменяйте в меню справа режим на «Визуальный режим». Отличить их просто:
После этого область появится у вас в текстовом редакторе и автоматически выведется область настроек данного компонента:
Для того чтобы, как я и писал ранее, вывести определенный текст этим компонентом, в меню настроек мы должны выбрать:
Показывать включаемую область: Из файла
Путь к файлу области ( для удобства все файлы для включаемых областей я рекомендую складывать в одном месте, если это не относится непосредственно к шаблону сайта, поэтому я создаю в админ-интерфейсе папку include и в ней уже находятся все файлы используемые для подключения к страницам ):/include/inc_area_example.php
Шаблон области по умолчанию:[standard.php] Стандартная страница
После этого нажимаем кнопку сохранить. Включаемая область готова. остается только ее наполнить содержимым. Т.е. текстом. Для этого наводим на красную точку в квадратике (это как раз и есть наша включаемая область) и в выпадающем меню нажимаем «Добавить область«.
После этого автоматически создается и папка и включаемый файл с такими названиями как мы указали в настройках, т.е. папка: include с файлом inc_area_example.php. Откроется редактор включаемой области доступный для правки.
После внесения информации в тело области нажимаем сохранить, тем самым, файл сохранится с содержимым текста и в дальнейшем можно использовать его для включения на других страницах сайта.
Таким образом вы добавили область текста на странице сайта.
Задача 2. Добавить включаемую область на сайт в шаблон слева под левым меню, как показано на примере:
Причем чтоб эта область выводила определенный контент (текст, изображение, что угодно) в заданной части сайта и рекурсивно по разделу, т.е. переходя по сайту внутри раздела она всегда публиковалась, а в других разделах чтоб ее не было. К примеру есть раздел «О компании», в нем есть подраздел например «История», также есть подраздел «Документы», «Реквизиты» и подраздел «Сотрудники». Таким образом во всех подразделах необходимо чтобы эта область показывала определенный контент. Для примера я приведу пути от родительского раздела по подразделам, чтобы это было нагляднее:
В структуре сайта это будет выглядеть так:
Для того чтобы вывести определенный контент в заданном месте шаблона сайта во всех этих разделах, нам необходимо пройти в режим правки шаблона сайта, это можно сделать через систему администрирования сайта, или если есть доступ к FTP серверу, то можно и через него. Остановимся на первом варианте.
Итак переходим в режим администратора и включаем режим правки как я уже это описывал ранее по шагам (Шаги выше 1,2 и 3).
Далее переходим в режим правки шаблона сайта и делаем это очень аккуратно, чтобы не повредить верстку сайта.
Нажимаем «Редактировать шаблон». Система нас перемещает в раздел правки шаблона сайта в системе администрирования. В верстке сайта обычно левая или правая часть называется sidebar это общепринято программистами и теми кто занимается версткой сайта, поэтому в коде шаблона ищем именно этот класс или идентификатор, вида или >
Заходим на любую страницу сайта. Переходим в режим редактирования страницы сайта
Далее также выводим настройки включаемой области
В настройках компонента включаемой области bitrix:main.include выбираем пункты:
Показывать включаемую область: для раздела
Суффикс имени файла включаемой области: inc_area_right
Рекурсивное подключение включаемых областей разделов: галочка
Таким образом мы настроили компонент для вывода информации в главном разделе «О компании» и его подразделах. Галочка на настройке: Рекурсивное подключение включаемых областей разделов, как раз и будет выводить информацию из области по всем подразделам главного радела.
После настройки компонента, нажимаем кнопку сохранить. Настроенный компонент уже находится на странице, остается его скопировать и вставить в шаблон сайта. Для этого, переходим в режим правки страницы «Режим редактирования исходного кода»
В Самом низу после текста у нас будет код компонента «Включаемая область» вида:
Вы можете отсюда скопировать данный код или создать свой как описано выше.
Вставка включаемой области в Битрикс
Если в Битрикс вы хотите вставить дополнительные области, это можно сделать через редактор, но нужно знать и код. специально для любознательных. давайте разбираться.
Вставка включаемой области (это они так назвали), то есть дополнительная какая-либо включаемая область текста например.
Вставка дополнительного файла на странице:
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
);?>
Подключение компонента обратной связи в шаблон компонента 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, не копируя шаблон.
Включаемая область Битрикс
Для реализации функционала с вставкой включаемой областью в битрикс понадобится компонент 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