Pull to refresh

Comments 14

А почему всё это не опубликовали на сайте разработчиков?
Можно конечно. Но у меня нет желания…
Интераций? (в заголовке последней таблицы)
Очередная заметка «как все плохо» в Revolution от мастера Evolution.

Параметры
Параметр надо удалять в наборе «по умолчанию». Кастомные наборы, это ка бы ссылки на умолчательный набор, поэтому там можно только поменять значение.


{} в настройках контекстов
В этих скобочках MODX ищет системные переменные типа {core_path}, {assets_path} и т.д. Авторы не предполагали, наверное, что вы будете хранить название фирмы как параметр для контекста.

Если скобки есть — внутри должна быть переменная, если ее нет — то получается пустой тег, а пустые теги парсер удаляет. На мой взгляд — нормально поведение. Есть спецсимволы на такой случай.

Вложенные чанки
Я использую всегда getChunk — он все сразу парсит и проблем не встречал.

Ну и в вашем примере гораздо правильнее было бы вызвать phpthumbof сниппетом, через $modx->runSnippet(). Так быстрее и парсеру лишний раз не надо работать.

Парсер
Разбирать сейчас исходный код нет времени и желания, но могу предположить, что событие происходит при каждой итерации парсера. А парсер рекурсивный, и по умолчанию делает до 10 проходов, чтобы разобрать ваши вложенные чанки.

У пустой страницы есть шаблон? Если есть — его тоже надо загрузить и пропарсить.
Событие должно вызываться только на первом проходе? Или на последнем? Или на пятом? Как понять?

Делайте меньше вложений, больше пишите на php, а не на phx и будет работать быстрее. Используйте для служебных страниц шаблон «Пустой» — он для того и нужен.

Кэш
Даю подсказку — при сохранении каждой страницы есть галочка «Очистить кэш», она слушает системную настройку или ее можно переключать руками. Если отключена — кэш не чистится.

Вы можете добавлять новости каждый день, без проблем. Просто надо еще немного освоить MODX Revolution.

Заключение
Работал с Etomite, затеем с Evolution, сейчас с Revolution и не написал ни одной такой критической заметки.

MODX не идеален, нет. Но надо привыкать\исправалять или дальше искать идеал.
Очередная заметка «как все плохо» в Revolution от мастера Evolution.

А без этой фразы никак?

Сразу видно, что заметка читалась по диагонали.
Кастомные наборы, это ка бы ссылки на умолчательный набор, поэтому там можно только поменять значение.
И что теперь делать, если я создал параметр не с тем именем в своем наборе? Типа сам виноват?

На мой взгляд — нормально поведение. Есть спецсимволы на такой случай.
А на мой взгляд ненормальное поведение. Гараздо лучше была бы замена {name} на { name }
Про случаи, когда регулярное выражение не подходит я описал.

Я использую всегда getChunk — он все сразу парсит и проблем не встречал.

Какая разница, getChunk или parseChunk. Вторая функция все равно вызывает getChunk. А проблема есть. Описана в статье.

Ну и в вашем примере гораздо правильнее было бы вызвать phpthumbof сниппетом, через $modx->runSnippet()

Я ждал этого совета. Поэтому специально привел пример с phpthumb. Ну допустим, мы написали сниппет и начинаем интегрировать его работу в дизайн. Требуется phpthumb с одними параметрами. После редизайна с другими. А где-то он окажется вообще не нужен. И что? Каждый раз править сниппет?

У пустой страницы есть шаблон? Если есть — его тоже надо загрузить и пропарсить.

В статье написано, что шаблон blank. Т.е. нет шаблона. И да, почему пустая страница парсится 3 раза, а с вызовом чанка 2? Где логика?

Событие должно вызываться только на первом проходе? Или на последнем? Или на пятом? Как понять?

Событие должно вызываться на каждом проходе. Но плагин на это событие сродни мазохизм.

Даю подсказку — при сохранении каждой страницы есть галочка «Очистить кэш», она слушает системную настройку или ее можно переключать руками. Если отключена — кэш не чистится.

Ну неужели я просто так взял и записал это в минус? А после редактирования страниц кеш тоже не отчищать? Солько я лет уже работаю с MODX — у меня с первого раза никогда не получалось создать новый документ без последующих корректировок. То ачепятки, то переносы красиво расставить и т.п.

Работал с Etomite, затеем с Evolution, сейчас с Revolution и не написал ни одной такой критической заметки.

Снимите уже розовые очки.
Одни проблемы, да я понял. В основном, оттого, что система не работает через жопу, как тебе хочется, а живет по своим правилам.

Или привыкай, или исправляй, или ищи другую систему. Нытья на Хабре «про сложности» я не понимаю.
Преодолевай и не ной, ты ж мужик, или кто?

Про парсер тут, я промахнулся.
Кто ноется? К каждой сложности я попытался найти решение. По большей части эта статья не нытье, а памятка какие костыли стоит использовать в каких случаях.
Перечитал про парсер и заметил про шаблон blank. Проверил, да, так и есть — функция вызывается несколько раз.
Но вызывается, а не отрабатывает.

Проверяем: вставка echo не при старте функции, а вот тут:
        if ($collected= $this->collectElementTags($content, $tags, $prefix, $suffix, $tokens)) {
			static $test; echo ++$test."<br />";

И, о чудо, на пустой странице нет ни одной циферки. А если в страницу засунуть плейсхолдер — то есть.

Как парсер должен сразу, без проверки, догадаться, что страница пустая? А вдруг в процессе обработки в ней что-то появится? Может, вы плагином измените content или еще что?

Конечно, на несуществующий плейсхолдер\чанк\сниппет вызовов будет больше — ибо он останется необработанным на всех итерациях.
А для существующего плейсхолдера у меня показывает только 1 запуск.
Спасибо за уточнение. Дальше копать было уже лень. А видимо стоило. Но это все мелочи. По большей части меня заботит пункт "Работа с вложенными чанками". Почему при первом проходе парсера во вложенный сниппет передается нераспарсеный параметр, а при всех остальных уже получаем нормальное значение. Думаю тут дело даже не в парсере самом, а в кеше…
Щас и это посмотрю, может замечу что-то.
Поменяй parseChunk() на getChunk() и удивление гарантирую.

Только что проверил.
Спасибо. Добавил в топик это решение.
И вот почему:

parseChunk() вызывает getChunk() без массива параметров. Соответственно, он получает чанк с необработанными плейсхолдерами, и просто пытается заметить их на твои значения. Тупой str_replace();

Дальше просто догадка
В первый раз не выходит, так как некэшированный phpthumbof вызывается раньше, чем получает плейсхолдер. Но во второй, и последующие разы phpthumbof берется уже из кэша и поэтому работает верно, то есть, успевает получить плейсхолдер. Тут надо глубоко копать кэширование, но жалко времени.


А вот если вызвать getChunk() с параметрами — то он нормально все обрабатывает, вызывая метод process() класса modChunk.

И твой пример работает, как положено. Вот такие тонкости.
Sign up to leave a comment.

Articles

Change theme settings