Статьи

4 способи розширити стандартні компоненти 1С-Бітрікс

  1. 1. Додаємо призначені для користувача настройки
  2. 2. Розширюємо функціональність
Часто у своїй роботі стикаюся з сайтами, написаними цілком на саморобних компонентах, без використання стандартних. Підтримка таких сайтів з часом перетворюється на справжнє пекло: кожна зміна в логіці / структурі / виведення інформації вимагає доопрацювання всього компонента. А це не правильно.
Ще пару років тому я і сам би віддав перевагу написати ще один компонент за вибіркою / додаванню / зміни елементів Інфоблоки. Так, в якихось ситуаціях це має сенс: потрібен компонент для свого модуля, швидкість роботи стандартного компонента не влаштовує (і ні що не виходить з цим зробити), занадто багато непотрібного функціонала (а відключити всі, крім потрібного не можна). Але як правило це не буде найкращим рішенням.
Механізм компонентів Bitrix має ряд інструментів, що дозволяють розширювати стандартний функціонал, змінюючи їх під свої потреби.
Крім цього, існує пара прийомів, що полегшують роботу з шаблонами: вони дозволяють винести css і js код у файли шаблону і викликати тільки на сторінках, де вони дійсно потрібні.

1. Додаємо призначені для користувача настройки

Файл .parameters.php в шаблоні компонента
При створенні шаблону компонента, часто виникає необхідність ввести якісь додаткові налаштування. Для прикладу уявімо, що необхідно зробити слайдер останніх новин. Ми, як досвідчені розробники, вирішили використовувати компонент списку новин (bitrix: news.list) і підключити в шаблоні JS бібліотеку. Але от невдача, для нашого улюбленого скрипта необхідно проставити швидкість зміни слайда і ефект переходу.
Боже, скільки разів я стикався з тим, що такі параметри просто хардкодят в шаблонах. Ну да, правильно, так само швидше, та й працює відмінно. Тільки ось замовникам доведеться бігати до розробників кожен раз, коли потрібно змінити ефект або трохи зменшити швидкість (читай щодня).
Слава богу, цього можна легко уникнути. Скопіюємо для початку шаблон компонента.
Якщо зараз заглянути в структуру, можна помітити, що у нас вже є файли .parameters.php і style.css. Вони скопіювали з дефолтного шаблону, для чистоти експерименту давайте уявимо, що їх не було (тим більше, в більшості випадків, стандартні шаблони містять тільки template.php і папку з lang файлами).
Далі створимо файл .parameters.php, його структура схожа з параметри компонента. Детальніше про налаштування параметрів компонента я писав тут .
А тепер опишемо необхідні властивості: SLIDER_EFFECT зі списком можливих переходів і SLIDER_TIME, куди ми будемо вводити час зміни слайдів
<? if (! defined ( "B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED! == true) die (); $ ArTemplateParameters = array ( 'SLIDER_EFFECT' => array ( 'NAME' => 'Ефект зміни слайдів', 'TYPE' => 'LIST', 'SORT' => '10', 'VALUES' => array ( 'sliding '=>' Ковзання ',' fading '=>' Загасання ',),' MULTIPLE '=>' N ',),' SLIDER_TIME '=> array (' NAME '=>' Скорочть зміни слайдів (мс) ', 'TYPE' => 'STRING', 'SORT' => '20', 'DEFAULT' => '5000',),); ?>

Тепер наші властивості можна знайти в налаштуваннях компонента в розділі "Додаткові налаштування" і використовувати в шаблоні, як і інші параметри $ arParams.

2. Розширюємо функціональність

Файли result_modifier.php і component_epilog.php
Давайте уявимо іншу ситуацію. У Інфоблоки новин є властивість "Прив'язка до користувача", нам необхідно вивести все ті ж останні записи, але крім стандартних полів треба показати своє ім'я користувача, який створив новина. Стандартні компоненти таке робити не вміють.
Знову ж таки, ми з вами круті розробники, ми не кидаємося в бій не обдумавши можливі рішення. Перший і найочевидніший: створити свій компонент з блекджек і повіями куртизанками і преферанс. Другий і самий безглуздий: взяти стандартний компонент bitrix і внести в нього зміни. Третій і оптимальний: чи не розробляти все з нуля, а взяти за основу готовий компонент.
Якраз для таких випадків використовуються файли result_modifier.php і component_epilog.php.
Щоб зрозуміти в чому між ними різниця, давайте для початку поглянемо на схему роботи компонентів в Bitrix.
Як видно зі схеми, result_modifier.php підключається відразу після component.php. У ньому можна, наприклад, отримати додаткові дані і, записавши їх в $ arResult, передати далі в шаблон компонента. Детальніше про файл result_modifier в офіційній документації .
Файл component_epilog.php потрібен для зміни закеширувалася даних. Код, поміщений в файл, буде виконуватися в будь-якому випадку, незалежно від того, віддається інформація з кеша або виходить в ході роботи component.php. Офіційна документація .
Давайте створимо файл result_modifier.php і отримаємо необхідні дані.
<? Php if (! Defined ( "B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED! == true) die (); // Масив ідентифікаторів користувачів $ usersID = array (); // Збираємо все id користувачів foreach ($ arResult [ 'ITEMS'] as $ item) {$ usersID [] = $ item [ 'PROPERTIES'] [ 'TEST'] [ 'VALUE']; } // Отримання списку користувачів по їх ID $ dbUsers = CUser :: GetList (($ by = 'id'), ($ order = 'asc'), array ( 'SELECT' => array ( 'ID' => implode ( '!', $ usersID),))); while ($ arUsers = $ dbUsers-> Fetch ()) {// Передаємо нові дані в шаблон, записавши їх в $ arResult $ arResult [ 'USERS'] [$ arUsers [ 'ID']] = $ arUsers [ 'NAME' ]; } Готово. Тепер в шаблоні ми можемо по ключу вивести імена користувачів.

3. Додаємо багато JS коду

файл script.js
Давайте повернемось до нашого прикладу про слайдер. Для його реалізації нам потрібно написати js скрипт. Тут також можливі кілька варіантів:
  1. Викликати скрипт в шаблоні сайту. Але тоді він буде підключатися на кожній сторінці, незалежно є там компонент чи ні
  2. Викликати скрипт поза компонента на сторінці. Трохи краще, але є велика ймовірність, що контент редактор випадково зітре ваш код, і слайдер перестане працювати.
  3. Написати код в шаблоні компонента. Чи не саме витончене рішення, js код великий, він перемішається з кодом шаблону, працювати буде незручно.
  4. Створити файл script.js, який підключиться до шаблону автоматично. Ідеально.
Тут мені додати нічого. Як я вже говорив, файл підключається автоматично. Нічого додатково робити не треба.

4. Додаємо стилі компонента

файл style.css
Така ж ситуація і з CSS. Якщо ви не хочете, щоб template_styles.css шаблону сайту неймовірно розростався і тягнув за собою все оформлення (використовується воно на сторінці чи ні) можна винести специфічні стилі в style.css шаблону компонента.
Після створення, файл підключиться автоматично всюди, де використовується компонент з даними шаблоном.
Lt;?

Новости