Статьи

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.

Новости

Как создать фото из видео
Кризис заставляет искать дополнительные источники дохода. Одним из таких источников может стать торговля на валютном рынке Форекс. Но чтобы не потерять свои деньги необходимо работать с надежным брокером.

Как оформить группу в вконтакте видео
Дано хотел свой магазин в вк, но не знал с чего начать его делать. Так как хотелось не банальный магазин с кучей ссылок и фото, а красиво оформленный. С меню, с аватаркой. После просмотра видео создал