Готовые решения
Проблема с обработкой [[[+name]]] и её решение
Доброго дня. Начал разрабатывать ИМ на miniShop2 и столкнулся с такой интересной проблемой.
По умолчанию в чанке tpl.msOptions.outer поле выводится подобным образом:
Но если внести свои правки, можно столкнуться с такой проблемой:

Попробуйте у себя, заменив стандартный код чанка tpl.msOptions.row на мой:
По умолчанию в чанке tpl.msOptions.outer поле выводится подобным образом:
<select name="options[[[+name]]]">[[+rows]]</select>И в стандартной вёрстке, если чанк не трогать, решение работает.Но если внести свои правки, можно столкнуться с такой проблемой:

Попробуйте у себя, заменив стандартный код чанка tpl.msOptions.row на мой:
<div class="group-item">
<input type="radio" name="options[[[+name]]]" value="[[+value]]" [[+selected]] required />
<label for="[[+value]]">[[+value]]</label>
</div> Модуль "Скидочный купон", пожелания, вложения
Ребята, привет.
Уже ранее в комментариях удалось немного обсудить, но тема была не профильная, поэтому начну тут отдельно.
У меня сейчас стоит задача на двух сайтах клиентов сделать систему скидочных купонов. Тот модуль со скидками, что сейчас — не подходит, так как он выставляет цену на товар и показывает уже со скидкой, а в данном случае скидка должна работать исключительно в корзине. Так как решать два раза одну и ту же задачу неразумно, имеет смысл решить ее один раз и качественно, а результат использовать повторно.
Итак, что имеем.
Уже ранее в комментариях удалось немного обсудить, но тема была не профильная, поэтому начну тут отдельно.
У меня сейчас стоит задача на двух сайтах клиентов сделать систему скидочных купонов. Тот модуль со скидками, что сейчас — не подходит, так как он выставляет цену на товар и показывает уже со скидкой, а в данном случае скидка должна работать исключительно в корзине. Так как решать два раза одну и ту же задачу неразумно, имеет смысл решить ее один раз и качественно, а результат использовать повторно.
Итак, что имеем.
Сниппет Declension для склонения слов
Предлагаю вашему вниманию небольшой сниппет для вывода склонения. Работает как фильтр вывода, использовать нужно примерно так:

Как видите, он применяется к любым тегам с числами, а в options нужно указать три формы слова (1 яблоко, 2 яблока и 10 яблок) для русского, или 2 (1 ticket, 2 tickets) для английского.
Для экспериментов можно повызывать сниппет с произвольными числами:
[[+balls]] [[+balls:declension=`балл,балла,баллов`]]
Как видите, он применяется к любым тегам с числами, а в options нужно указать три формы слова (1 яблоко, 2 яблока и 10 яблок) для русского, или 2 (1 ticket, 2 tickets) для английского.
Для экспериментов можно повызывать сниппет с произвольными числами:
15 [[*id:input=`15`:declension=`яблоко,яблока,яблок`]]Полный код под катом. Удаление старых аватарок Office
Недавно выяснилось, что в платном компоненте Office была недоработка, которая мешала удалению старых аватарок пользователей при редактировании профиля.
То есть, вы залили фотку, потом её удалили или заменили — а старая осталась на сервере. Ошибку я успешно поправил, обновление выпустил, но встал вопрос — а что делать с этими старыми аватарками? Они же место занимают, да и вообще, нехорошо как-то.
Поэтому я написал небольшой скрипт для удаления всех картинок из директории аватарок, которых нет в профилях пользователей. Заодно это может быть неплохим примером работы с файлами.
Скрипт опробован на этом сайте (modx.pro), проблем не было. Но всё равно: внимание, использовать скрипт только после полного бэкапа сайта! Как и любая операция с удалением файлов, этот скрипт потенциально опасен!
Я вас предупредил, претензии не принимаются.
То есть, вы залили фотку, потом её удалили или заменили — а старая осталась на сервере. Ошибку я успешно поправил, обновление выпустил, но встал вопрос — а что делать с этими старыми аватарками? Они же место занимают, да и вообще, нехорошо как-то.
Поэтому я написал небольшой скрипт для удаления всех картинок из директории аватарок, которых нет в профилях пользователей. Заодно это может быть неплохим примером работы с файлами.
Скрипт опробован на этом сайте (modx.pro), проблем не было. Но всё равно: внимание, использовать скрипт только после полного бэкапа сайта! Как и любая операция с удалением файлов, этот скрипт потенциально опасен!
Я вас предупредил, претензии не принимаются.
Автоустановка Modx (и Wordpress) в панеле VestaCP
Решение немного топорное, т.к. устанавливает Modx(Wordpress) при создании домена без уведомлений и возможности отказаться. И в то же время простое, т.к. просто инкюдится скрипт. Если кто решит вопрос с опцией, буду благодарен.
Собрано из кусков сторонних скриптов Василия и с форума VestaCP
Собрано из кусков сторонних скриптов Василия и с форума VestaCP
Использование тегов MODX внутри @INLINE-чанков pdoTools
Многие знают, что в pdoTools в качестве шаблона вывода можно указывать @INLINE-код, чтобы не создавать лишних сущностей.
Некоторые знают, что в таких конструкциях нельзя вызывать сниппеты, не работают фильтры ввода-вывода. А в документации про это даже картинка саркастическая есть.
Хочу раскрыть небольшую тайну, как можно это ограничение иногда обойти… Подробности под катом :-Р
[[!pdoResources?
&tpl=`@INLINE <li>[[+pagetitle]]</li>`
]]Некоторые знают, что в таких конструкциях нельзя вызывать сниппеты, не работают фильтры ввода-вывода. А в документации про это даже картинка саркастическая есть.
Хочу раскрыть небольшую тайну, как можно это ограничение иногда обойти… Подробности под катом :-Р
Автоматическая генерация оглавления страницы
На днях появился вопрос об автоматическом создании оглавления статьи, а позже где-то проскочил комментарий, мол неплохо бы такое добавить на docs.modx.pro — там же все документы хорошо структурированы.
И действительно, а почему бы не добавить? Выделил полчасика и набросал сниппет makeContents, который генерирует вот такое оглавление:
И действительно, а почему бы не добавить? Выделил полчасика и набросал сниппет makeContents, который генерирует вот такое оглавление:
Ускоряем админку MODX до нереальной скорости.
В настройках системы изменяем ключ manager_html5_cache в Да.
В дереве документов по пути /manager/cache.manifest.php Удаляем все и копируем код ниже, после сохраняем и наслаждаемся эффектом:
(Осторожно однократно с генерирует большой трафик! И не будет работать в старых браузерах!)
В дереве документов по пути /manager/cache.manifest.php Удаляем все и копируем код ниже, после сохраняем и наслаждаемся эффектом:
(Осторожно однократно с генерирует большой трафик! И не будет работать в старых браузерах!)
Вывод последнего комментария к тикету
Выводим последний коммент с тикету.
У меня выводится последний коммент «верхнего» уровня, т.е. только коммент а не коммент к комменту…Господи что я пишу
Если нужно выводить именно последний комент, меняем parent => 0 на 1
Топаем в сниппет getTickets, ищем 182 строку
У меня выводится последний коммент «верхнего» уровня, т.е. только коммент а не коммент к комменту…
Если нужно выводить именно последний комент, меняем parent => 0 на 1
Топаем в сниппет getTickets, ищем 182 строку
// Special fields for quick placeholdersПосле нее вставляем:$c = $modx->newQuery('TicketComment');
$c->where(array('thread' => $row['thread'], 'parent' => 0));
$c->sortby('id','DESC');
$ticket_comments = $modx->getIterator('TicketComment',$c);
foreach($ticket_comments as $last_ticket_comment){
$row['last_comment'] = $last_ticket_comment->text;
break;
}В tpl.Tickets.list.row вставляем плейсхолдер [[+last_comment]] [Tickets] Компонент TicketMessages
По мотивам заметки про сообщения на Tickets.
Освоил создание компонентов (спасибо Василию за курс) и предлагаю на ваш суд свой первый компонент TicketMessages. Напомню, это дополнение к Tickets, которое позволяет работать с комментариями как с личными сообщениями.
Освоил создание компонентов (спасибо Василию за курс) и предлагаю на ваш суд свой первый компонент TicketMessages. Напомню, это дополнение к Tickets, которое позволяет работать с комментариями как с личными сообщениями.