Народ ,кто-нибудь знаком с модификаторами modx?
Значения тв выводятся в виде:
фантазии хватило только на
как положить каждое значение в тег span?
Не хочу загонять в доп. сниппет и пилить строку, подскажите модификатор, пожалуйста!
текст1||текст2||текст3||текст4и.т.дфантазии хватило только на
[[+version:replace=`||==, `]] || заменяет на запятые,как положить каждое значение в тег span?
Не хочу загонять в доп. сниппет и пилить строку, подскажите модификатор, пожалуйста!
Комментарии: 44
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
причину устал искать, наверно очередной баг modx, вот и написал сюда
Не знаю где вы там искали, но точно не там где нужно, т.е. в документации к выше перечисленным компонентам. Прочтите про параметры processTVs и prepareTVs
Но смущают такие фразы, типа: реально настолько отвратительно? :) И то, и то шаблонизаторы, принципиальной разницы нету.
Что уже говорить про разношерстность этих модификаторов. Одних только != модификаторов (notequalto, notequals, isnt, isnot, neq, ne) уже шесть штук, зачем? Один разработчик использует одно, второй — другое, третий — третье.
Так что еще очень хороший вопрос о том, что разношерстнее — модификаторы или несколько вариаций обращения к массиву в Fenom.
Если «шаблонизатор» не позволяет пройтись по массиву в цикле, то это никакой не шаблонизатор, это фильтры ввода-вывода — именно так они правильно и называются.
Или еще как-то лаконичнее.
Есть какой-то стандарт требований к шаблонизатору? Я не нашел. Так можно и шире рассуждать, мол зачем вообще писать сниппеты, пусть «тру-шаблонизатор» отрабатывает все.
Под вариациями можно понимать обращение к массиву либо через точку, либо через квадратные скобки, но это легко решается — к массиву можно обращаться всегда через скобки, прямо как в php.
Так это для тебя привычен этот вариант, а если тебе достанется сайт от другого разработчика, которому будет привычен вариант notequals?
Так стандартные модификаторы напрямую связаны со стандартными тегами modx.
Не будешь же ты проверять через Fenom-овский {if} наличие [[*id]]
Так это и так уже есть — альтернативный синтаксис через прямую черту. Например,
Чем не единый стиль?
Шаблонизатор — это ведь про удобную обработку входящих данных в твоем шаблоне.
Представь, что тебе в чанк прилетел массив, который тебе нужно обработать.
Для первых 3 элементов тебе нужно добавить один css-класс, для остальных — другой.
Шаблонизатор должен решать эти задачи, в этом его и назначение.
Fenom с этим отлично справляется, как и какой-нибудь Smarty/Twig/Blade/etc.
Фильтры ввода-вывода не могут даже по массиву пройтись, тебе нужно будет писать сниппеты или парсить малюсенькие чанки столько раз, сколько элементов в твоем массиве.
Чувствуешь разницу?
Сниппеты нужны для инкапсуляции небольшой логики, которую нерационально оставлять в шаблоне, но никак не для одного if, как в случае со стандартными фильтрами.
А вызов вида в шаблоне сниппета по-моему не работает вообще. Или тут какие-то подводные камни снова?
p.s. Если что, я не говорю, что стандартный шаблонизатор лучше, он просто выглядит логичнее и проще.
'id' | placeholder — то же самое, что и $modx->placeholders['id'], какие тут могут быть подводные камни? Если $modx->placeholders['id'] доступен, значит и альтернативная конструкция что-то вернет.
Так стандартный «шаблонизатор» практически ничего не умеет. Он призван лишь фильтровать вывод. Это, например, когда нужно вывести текст-заглушку, если плейсхолдер пуст. Тут — никаких проблем. Но что-то сложнее — увы.
Поэтому по большому счету их даже некорректно сравнивать, у них разное предназначение, и там, где Fenom справляется без проблем, стандартный «шаблонизатор» ни в зуб ногой, как говорится.
@Артем @Баха Волков Я работаю с fenom, я даже не утверждаю что он хуже, наоборот, выше писал, что там плюшек больше и это дело привычки. Но мне, персонально, не нравится как это выглядит (в сравнении с [[+]], [[*]], [[$]] и т.п.). А вы мне пытаетесь обосновать то, что мне это должно нравиться :)
Наше обсуждение можно привести к аналогии:
— Мне не нравится капуста.
— Но тебе должна нравится капуста, она полезна.
— Ну чет не мое, не люблю капусту.
— Да любишь, смотри, голубцы можно сделать же, и прочее, красота!
— …
:)
В итоге вопрос снят, спасибо за обсуждение!
в далёкой галактикепытался комбинировать феном синтаксис с модыксовскимУже не помню, на чём забуксовал — не пошло или лень стало. Но получилось бы прикольно. )
Я недавно писал про парсер MODX, про специфику и недостатки. В текущее время, с развитием стандартов и большого количества готовых и универсальных шаблонизаторов, парадигма шаблонизации в MODX выглядит как минимум странно.
На данный момент родной «шаблонизатор» в modx просто нельзя назвать шаблонизатором — он не справляется с большинством типовых задач шаблонизации, это же очевидно.
Лаконичнее в нем только вызов тегов — тут согласен. Но в реальных сценариях никто не вызывает просто теги, практически всегда требуется дополнительная обработка. А когда ты пишешь сниппет «If», то это уже не кажется таким лаконичным.
Да, вот если бы в нем был такой функционал, то это был бы полноценный шаблонизатор, со своими фичами и идеей, и это было бы круто.
Проясню, что все негодование связано с тем, что текущий вариант шаблонизации в modx без использования Fenom приносит исключительно боль и страдания.
Но в современном мире разработки — это уже анахронизм. Ибо фреймворки захватывают мир разработки. Они двигают свои стандарты.
Был бы ещё один шаблонизатор похожий на другие, но в отличие от них (универсальных), он использовался бы только в MODX. А значит судьба его была бы предрешена. И зачем тогда на него тратить время?
Но и с другими шаблонизаторами в MODX ситуация не лучше. Попробуй написать таблицу умножения римскими цифрами. Тот же Fenom заставляют работать в парадигме шаблонизации MODX, а у него другая логика. Я об этом тоже уже много раз говорил.
Так и тут — создавай 25 маленьких чанков, чтобы обработать одну вьюху.
Правда?
Задача: вывести массив товаров, у каждого товара 3 поля — id, sizes, pictures. Каждые 3 итерации меняется класс товара. Сначала 'a', потом 'b', потом 'c', потом по новой. Если есть размер 50, то товар получает класс 'xl', если же 50 нет, но есть 48, то 'l', в противном случае 'm'. В массиве 'pictures' содержится 2 поля — image & thumb. Если thumb нет, то нужно вывести image.
На вход получаешь один массив со всеми товарами.
Покажи, пожалуйста, альтернативное решение без проблем. Разумеется, без Fenom.
Почему? Smarty используется вне modx? Да. Fenom используется вне modx? Да.
Можно было бы написать некий аналог Fenom, но с некоторыми крутыми фичами, которые работали бы только в modx.
Тут согласен, да. Чего только стоят issue в репе Fenom о том, что ignore не работает в modx.
и вуаля
Не понимаю, в чем вариативность и в чем сложность вообще?
В твоем примере:
Это легко читается программистом
{'tvname' | resource}
Т.е. в итоге, Хотя, к примеру, {'content' | resource} выведет именно содержание, тут нет ошибки в модификаторе | resource?
Если нужно получить сразу значение, то просто добавляй префикс tv.:
и почему нельзя было эти массивы выделить в отдельные переменные
Это сформированные массивы из глобальных объектов, которые есть в каждом запросе. Зачем их засовывать в объект $_modx? По привычке наверно.
П.С. Доберусь до компа, попробую. Главное — не забыть! )
и такое довольно часто происходит. Потому, я считаю, это очень весомый аргумент. Как ты в чанке потом до глобальных свойств доберёшься?
А если уж очень хочется «попроще» писать, то Баха дал рабочий вариант выше.
Но для меня ещё один вопрос не понятен (в своё время Коля Ланец тоже об этом говорил) — нафига вообще нужен этот microMODX класс? Только не говори за безопасность? Ты где-нибудь видел в Ларе или Симфони создавали такие вещи? А сниппеты pdoTools вообще убирают вопрос безопасности в дальний угол.
Для любителей костылей сойдёт. Всякие бест практисы так делать не советуют. Согласись, стрелки и точки в одном выражении как-то не кашерно.
Потому что чанки писать и править может простой менеджер, без доступа к сниппетам, файлам и знаниям PHP.
Есть ещё одна дыра (Женя Борисов говорил, ты про неё знаешь). Дай мне доступ в админку только с правами контент-менеджера и установленным pdoTools и я стану админом.
Но эти вопросы ты почему-то счситаешь неопасными. Вот я и говорю, всё в мире относительно.
pdoTools пользуются очень много где, и по умолчанию доступ ко всякому опасному через Fenom отключен.
Вопросы безопасности самого MODX меня не касаются.
Понимаю Женю Борисова, который кричал о дырах безопасности, а разрабы MODX его не слышали. Но есть отличие — меня вопросы безопасности pdoTools не касаются! Я сайты не делаю. А те, кто использует pdoTools, держите в уме то, что я написал выше.
Я не занимаюсь разработкой MODX уже давно, а pdoTools поддерживаю в актуальном состоянии. Про критические баги pdoTools, дающие возможность взломать сайт, лично я ничего не знаю, иначе бы исправил.
Если у тебя есть такая информация — будь добр, напиши мне про это в телеграмме.
Не хочешь как взрослый общаться — до свидания.