MODX Revolution. Как работают сниппеты.

preview_player
Показать описание
Друзья, а кто-нибудь задумывался, как MODX заставляет работать сниппет, который хранится в базе данных, когда пользователь открывает страничку, на которой вызывается данный сниппет? В этом видео я покажу, как разработчикам MODX Revolution удалось это сделать. Уверен, как минимум один вопрос к этим разработчикам у вас появится ))

Рекомендации по теме
Комментарии
Автор

Сергей, не забывайте, что вызовы сниппетов могут быть вложены друг в друга, а начинать парсинг нужно с самого последнего и подниматься вверх по вложенности. Поэтому Ваш вариант с одной строкой вряд ли будет работать корректно (не проверял). Второе: Возможность делать элементы статическими появилась в MODX Revo не с первой версии, этот код был дописан намного позже. Изначально дизайн не был на это рассчитан. Не забывайте так же об обратной совместимости версий и т.п. Когда писался MODX Revo не было таких инструментов как Composer, даже GIT-ом мало кто пользовался. Брать код сниппета из БД или из файла - разница не большая, в любом случае где-то нужно хранить список этих снипетов. Именно по этим причинам код местами может быть некрасив и избыточен. Я не совсем понимаю в чём смысл подобного контента. Пустая критика - это мало продуктивно. Но я ни в коем случае не пытаюсь Вас унизить. У вас очень много толковых разработок и материала в блоге.

КвадрикКоптеров
Автор

Раз ответа нет, почему это не говнокод,
тогда придется ответить мне, почему говнокод (выражаюсь Вашим языком).
1. if (intval($pluginId)) {
Здесь intval() не имеет смысла.
2. А вот здесь имеет, но его нет:
unset
3. Логика функции была такая, что если событие не найдено, то возвращается FALSE. Но с Вашими изменениями логика нарушена. Если не найден, всё равно вернёт TRUE.
Вот мой вариант (но нет пределов совершенству):

КвадрикКоптеров
join shbcf.ru