Розробка свого компонента для Бітрікс з класами та D7
З 12-ї версії 1С-Бітрікс з'явилася можливість писати компоненти використовуючи класи, але найбільш примітною, як на мене, стала можливість успадковувати класи компонентів. Таким чином, можна написати стандартний компонент, а потім при необхідності успадковуватися від нього і додавати новий необхідний функціонал, не копіпастя повторювані і стандартні шматки коду. Так само з 12-ї версії хлопці анонсували появу нового ядра D7 (чому таку назву я не знаю), вони переписують ядро, з'явилися неймспейси, ORM, у 14-й версії стали з'являтися компоненти, переписані під нову ідеологію, з'явився цілий розділ у документації. D7. Спираючись на ці нововведення, спробуємо написати компонент по новому. Відразу скажу, я не фанат компонентів, які налаштовуються цілком і повністю і виконують 100 500 завдань. У моєму розумінні компонент має мінімальну кількість налаштувань та виконує одну конкретну задачу.
Стандартні параметри для компонента:
- вибір типу інфоблоку (список);
- вибір інфоблоку (список);
- показувати посторінкову навігацію (чекбокс);
- кількість елементів (число; якщо 0, то показувати всі елементи; якщо не нуль та встановлений чекбокс посторінкової навігації, то це кількість елементів на сторінці; якщо не нуль та чекбокс посторінкової навігації не встановлений, то кількість елементів, вибраних зверху);
- поле для сортування (сортувань зазвичай два);
- напрямок сортування;
- кешування (тип кешування, час кешування).
- підключає мовний файл (для виведення мовних фраз) - цей метод є стандартним, ми його лише перевизначаємо;
- готує параметри компонента - даний методє стандартним, перевизначається. Важливо, що всі параметри компонента були підготовлені, наскільки можна приведені до очікуваного типу, т.к. від цього залежить кеш компонента;
- підключає необхідні модулі;
- підключає обов'язкові параметри;
- виконує дії перед кешуванням;
- кешує роботу компонента;
- проводить вибірку даних для відображення;
- підключає шаблон виведення;
- виконує дії після кешування (наприклад, встановлення заголовків, виконання відкладених функцій, будь-які дії, які необхідно виконувати постійно за кешем компонента).
Відмінні риси:
- за новою ідеологією, у разі появи нештатної ситуації необхідно викинути виняток, тому у коді з'явилися бітриксові винятки;
- з'явилися неймспейси, тому роботу з мовними фразами здійснюється через клас Bitrix\Main\Localization\Loc, у своїй необхідно явно підключати мовні файли через метод Loc::getMessages(__FILE__), а отримання мовної фрази — Loc::getMessage();
- підключення модулів здійснюється через метод Bitrix\Main\Loader::includeModule();
- у разі викидання ексепшена Main\ArgumentNullException необхідно вказати код поля, він підставиться шаблон виведення повідомлення про помилку.