Цитата |
---|
Omar Khazamov написал: Привет всем,Что такое MVC- мы все знаем. Однако MVC Битрикса отличается от этой модели в привычном ее понимании. Controller и View как-то смешаны в одну сущность, и в некоторых компонентах одно не отличить от другого. |
Не смотря на то, что Битрикс в некоторых моментах говорит о MVC, это всего лишь паттерн, а не обязательная стратегия поведения.
Если сравнивать с общедоступными паттернами, то скорее всего это больше похоже на HMVC. Но что есть, то есть и class.php + ajax жизненный цикл должны отчасти решить эту проблему.
Цитата |
---|
Omar Khazamov написал: т.е всякая логика отображения задается в шаблонах битрикса, а шаблоны подключаются в визуальной части пролога. |
Все верно, но не совсем так. Есть AJAX запросы на подгрузку html части, которые обрабатываются так же, но обнуляют буферизацию вывода в самом компоненте.
Есть некоторые части системы, которые взаимодействуют с /*/tools/ или services и там уже подключается только служебная части.
НО! Ни одна логика не зашита в самом шаблоне!
Цитата |
---|
Omar Khazamov написал:Но в некоторых случаях порядок выполнения страницы становится необъяснимым. Например, в дефолтном компоненте sale.order.ajax после успешного сохранения корзины и создания заказа происходит переадресация на страницу благодарности. Данная переадресация задается где-то в шаблоне, т.е в визуальной части пролога. |
Нет, данная страница находится в шаблоне компонента: confirm.php
Цитата |
---|
Omar Khazamov написал: В своем обработчике по факту создания заказа пытаюсь вывести в консоль сообщение, однако из-за переадресации данное сообщение не выводится. Почему один компонент выполняющийся по времени позже другого влияет на его работу? |
Тонкости работы компонента в режиме ajax. Первый хит на оформление заказа, затем редирект на ок-страницу для утверждения/оплаты.
Цитата |
---|
Omar Khazamov написал: А что, если я внутри обработчика хочу делать инъекцию JS кода в тело страницы? Использовать библиотеку BX? Как? |
На событиях entity такого не делают. Это можно сделать, если есть события которые что-то рендерят или на js-событиях в публичной части.
Все остальное делается только через подключение своих скриптов и перехват, ну или кастомизации шаблона компонента.
Памятуя о Вашем примере оформления заказа - echo не должно быть на событии сохранения заказа.
Цитата |
---|
Omar Khazamov написал: Вообще, не понимаю как происходит отработка JS и его связь с шаблоном. |
1) Есть служебные скрипты которые подключаются при вызове шаблона компонента
2) Есть Asset'ы которые подключаются из любого места
3) В конце концов есть добавление в самом шаблоне/компоненте.
Где-то на странице есть код который вызывает или наборот при ready-событии на dom срабатывают биндеры
А вы открывали код этого ajax?
Он всего лишь записывает просмотр товара пользователем