Статьи

marvin255 / bxfoundation

  1. Зміст
  2. Service locator
  3. Роутінг

Набір додаткових Інструмети для 1С-Бітрікс "Управління сайтом".

Зміст

установка

За допомогою Composer

  1. Додайте в ваш composer.json в розділ require:

    "Require": { "marvin255 / bxfoundation": "*"}
  2. Якщо потрібно автоматичне оновлення бібліотеки через composer, то додайте в розділ scripts:

    "Scripts": [{ "post-install-cmd": "\\ marvin255 \\ bxfoundation \\ installer \\ Composer :: injectModule", "post-update-cmd": "\\ marvin255 \\ bxfoundation \\ installer \\ Composer :: injectModule ",}]
  3. Виконайте в консолі всередині вашого проекту:

    composer update
  4. Якщо пункт 2 не виконано, то скопіюйте папку vendors / marvin255 / bxfoundation / marvin255.bxfoundation в папку local / modules вашого проекту.

  5. Встановіть модуль в адміністративному розділі 1С-Бітрікс "Управління сайтом".

звичайна

  1. Скачайте архів з репозиторієм.
  2. Скопіюйте папку marvin255.bxfoundation з архіву сховища в папку local / modules вашого проекту.
  3. Встановіть модуль в адміністративному розділі 1С-Бітрікс "Управління сайтом".

Service locator

У D7 з'явився спільний об'єкт для докладання, який доступний з кожного файлу скрипта сайту. Проте, він не дозволяє ефективно і легально додавати до себе визначення сервісів, які використовуються на сайті.

На додаток до об'єкта \ Bitrix \ Main \ Application пропонується використовувати об'єкт \ marvin255 \ bxfoundation \ application \ Application, який не тільки дає доступ до всіх стандартних методів \ Bitrix \ Main \ Application (за фактом, він просто містить в собі посилання на \ Bitrix \ Main \ Application і переадресує на нього виклики всіх методів, які не визначені в самому \ marvin255 \ bxfoundation \ application \ Application за допомогою __call), але і на додаток реалізує патерн service locator.

Для використання досить оголосити в блоці use \ marvin255 \ bxfoundation \ application \ Application замість \ Bitrix \ Main \ Application.

// init.php use Bitrix \ Main \ Loader; use marvin255 \ bxfoundation \ application \ Application; Loader :: includeModule ( 'marvin255.bxfoundation'); $ App = Application :: getInstance (); // реєструємо новий сервіс $ app -> locator -> set ( 'my_new_service', new MyNewService); // сервіс буде доступний в будь-якому іншому файлі скрипта сайту за допомогою use marvin255 \ bxfoundation \ application \ Application; $ My_new_service = Application :: getInstance () -> locator -> get ( 'my_new_service'); // або більш коротко $ my_new_service = Application :: getInstance () -> my_new_service;

Роутінг

Як роутінга у Бітрікс пропонується використовувати комбінацію з комплексних компонентів і urlrewrite.php, але такий підхід не завжди дозволяє очевидно визначити звідки саме буде відображена сторінка. Крім того, виникає необхідність в постійному дублювання шаблонів комплексних компонентів.

В замін такому підходу пропонується використовувати об'єкт для роутінга запитів.

Використання даного об'єкта вимагає, щоб всі вхідні запити були б переадресовані на головну сторінку (index.php), приклад налаштування urlrewrite для такого випадку:

$ ArUrlRewrite = array (array ( "CONDITION" => "# ^ / #", "RULE" => "", "ID" => "page", "PATH" => "/index.php",), );

Приклад головної сторінки:

require_once ($ _SERVER [ 'DOCUMENT_ROOT']. '/bitrix/modules/main/include/prolog_before.php'); use Bitrix \ Main \ Loader; use marvin255 \ bxfoundation \ application \ Application; use marvin255 \ bxfoundation \ routing \ rule \ Regexp; use marvin255 \ bxfoundation \ routing \ action \ Component; use marvin255 \ bxfoundation \ routing \ action \ Chain; $ App = Application :: getInstance (); // список новин $ app -> router -> registerRoute (new Regexp ( '/ news'), new Chain ([new Component ( 'bitrix: catalog.filter', '', [ 'IBLOCK_TYPE' => 'content', 'IBLOCK_ID' => '1', 'FILTER_NAME' => 'news_filter', 'FIELD_CODE' => [ 'NAME', 'ACTIVE_FROM'],]), new Component ( 'bitrix: news.list', '', [ 'IBLOCK_TYPE' => 'content', 'IBLOCK_ID' => '1', 'FILTER_NAME' => 'news_filter',])])); // новина детально $ app -> router -> registerRoute (new Regexp ( '/ news / <ID: \ d +>'), new Component ( 'bitrix: news.detail', '', [ 'IBLOCK_TYPE' => ' content ',' IBLOCK_ID '=>' 1 ',' ELEMENT_ID '=>' $ ruleResult.ID ',])); // сторінка 404 $ app -> router -> registerRouteException (404, new Component ( 'bitrix: search.page')); // Рауса поточну посилання і друкуємо результат echo $ app -> router -> route ($ app -> request, $ app -> response); require ($ _SERVER [ 'DOCUMENT_ROOT']. '/bitrix/modules/main/include/epilog_after.php');

Кожен роут складається з пари об'єктів: правила, яке реалізує \ marvin255 \ bxfoundation \ routing \ rule \ RuleInterface, і дії, яке реалізує \ marvin255 \ bxfoundation \ routing \ action \ ActionInterface. Відповідно, об'єкт роутер дозволяє зареєструвати будь-яка множина таких пар правило-дію за допомогою методу registerRoute. При запиті результату роутер буде послідовно викликати кожне правило до тих пір, поки одна з них не відповість, що url підходить, після цього буде викликано відповідне правилу дію, яке поверне рядок для відображення. Якщо ж все правила будуть випробувані і url не буде відповідати жодному з них, то роутер викине виняток зі статусом 404.

Правило може отримати деякі дані з url, як, наприклад, ідентифікатор новини з прикладу вище. Ці дані будуть так само передані в дію і доступні за допомогою макросу '$ ruleResult.ID', де замість ID потрібно буде вказати ім'я параметра, яке отримало правило.

Як правила і дії можна передавати будь-які об'єкти, які реалізують \ marvin255 \ bxfoundation \ routing \ rule \ RuleInterface і \ marvin255 \ bxfoundation \ routing \ action \ ActionInterface відповідно.

Крім того, можна зареєструвати дію на той випадок, якщо дія або правило поверне виняток. Для цього служить метод registerRouteException роутера. Першим параметром потрібно передати код статусу стану (як в прикладі вище: 404, сторінка не знайдена) і відповідає цьому статусу об'єкт, який реалізує \ marvin255 \ bxfoundation \ routing \ action \ ActionInterface.

Класи правил, які поставляються з бібліотекою:

\ Marvin255 \ bxfoundation \ routing \ rule \ Regexp

В якості єдиного елемента конструктора приймає регулярний вираз, якому повинен відповідати переданий url. За допомогою синтаксису виду <ІмяПараметра: регулярний вираз для відповідності> можна задати частина url, яка може змінюватися відповідно до зазначеного регулярному виразу.

\ Marvin255 \ bxfoundation \ routing \ rule \ Iblock

Правило, яке порівнює посилання з правилами зазначеними в налаштуваннях відповідного Інфоблоки (DETAIL_PAGE_URL, SECTION_PAGE_URL або LIST_PAGE_URL). В якості першого параметра приймає об'єкт класу \ marvin255 \ bxfoundation \ services \ iblock \ Locator, який служить для отримання даних про Інфоблоки, другим параметром - код Інфоблоки, третім - масив сутностей зазначеного Інфоблоки, для яких спрацює дане правило (iblock, section або element ).

Класи дій, які поставляються з бібліотекою:

\ Marvin255 \ bxfoundation \ routing \ action \ Component

Дія, яке просто викликає вказаний в конструкторі компонент Бітрікс. В якості першого параметра приймає ім'я компонента, як для виклику $ APPLICATION-> includeComponent (), другого - назва шаблону компонента, третього - масив параметрів (arParams), які будуть передані в компонент при виклику.

\ Marvin255 \ bxfoundation \ routing \ action \ Chain

Дія, яке дозволяє об'єднати виклик кількох дій в ланцюжок. В якості єдиного аргументу в конструктор приймає масив об'єктів, що реалізують \ marvin255 \ bxfoundation \ routing \ action \ ActionInterface.

Новости