Сергей Шлоков

Сергей Шлоков

Был в сети 06 ноября 2025, 19:54
Заказы не принимаю
Вот этот сниппет достоин плюса.
Есть пара замечаний.
Непонятна вот эта конструкция
$outputSeparator = $modx->getOption('outputSeparator', $scriptProperties, PHP_EOL);
if (!isset($scriptProperties['outputSeparator'])) {
    $scriptProperties['outputSeparator'] = '||';
}
Представь, как будет выглядеть вывод, если вызвать сниппет с параметром &outputSeparator=`||`.
Ну и второе. Ничего сложного с биндингом нет. Достаточно глянуть в
документацию. Нужно добавить одну строчку и одну изменить.
...
$pdoTools = $modx->getService('pdoTools');
foreach ($groupped as $group) {
   $wrapper  = implode(PHP_EOL, $group);
   $output[] = $pdoTools->getChunk($tplWrapper, array('wrapper' => $wrapper));
}
Тогда шаблон можно указать в стиле pdoTools, к которому многие уже привыкли
$tplWrapper = $modx->getOption('tplWrapper', $scriptProperties, '@INLINE <div class="group-wrapper">[[+wrapper]]</div>');

П.С. Не увидел ни одного комментария Ильи. Видимо вы с ним телепатически общаетесь.
Собственный сниппет выглядит уже короче и серьёзнее. Я же говорил, что автор может лучше. )
Но это ещё не предел. Если обратить внимание на любой сниппет pdoTools, то можно увидеть, что у них есть параметры tpl, в которых можно указать чанк или INLINE код. Что гораздо удобнее, чем указывать теги, классы, id и т.д. Таким образом, один параметр tpl заменяет несколько параметров. Как я уже писал выше, для данного сниппета достаточно 2 параметров. Или 3-х, если нужно указать сниппет получения результатов. Но так как в этом сообществе уже мало кто пользуется getResources, то и этот параметр можно опустить. Просто сразу вызывать pdoResources, но разумеется с проверкой его наличия.
Это и раньше работать не могло, если только Вы ошибки без восклицательного знака вызывали.
Могло и может. Всё очень просто. Парсер по умолчанию гоняет 10 циклов. Если за 9 циклов он не обработает какой-нибудь плейсхолдер, то на 10-й раз он его удалит.
В данном случае, парсер в первом проходе проверяет плейсхолдер [[!+cp.error_message]]. Он пустой, поэтому остается не обработанным. Далее обрабатывается тег сниппета. Он (сниппет) выставляет этот плейсхолдер. Во втором цикле парсер проверяет оставшиеся плейсхолдеры и на этот раз распарсивает этот плейсхолдер.
А когда используется фильтр notempty, то плейсхолдер обрабатывается сразу же. Т.е. парсер на первом цикле вернет или пустое значение или указанное в фильтре. На втором круге парсить уже нечего.
Как-то так.
Если в коде нет ни строчки вашего кода, то беру свои слова «выложил как свое решение» обратно. Но тогда тем более не понятно возмущение Павла отсутствием плюсов.
Что за грубости в мой адрес…
Где я произнёс хоть одно слово грубости? Я дискутирую с Павлом. Про автора упомянул 1 раз. И ничего плохого я не вижу в коде начинающего программиста. Лично я помню, что сам был таким. Просто заметил, что для плюса он пока слабоват. Уверен, что тот же Павел сможет его сократить минимум раза в 3.
Не мне судить, плохо это или хорошо. Однако, это говорит о том, что такие люди неблагодарные.
Прикольно. Эти два предложения писал один и тот же человек? )) Павел, помню твои горячие споры про «благоДарю» и алкоголь. Ты идеалист. Но мир не черно-белый. Если человек не подходит под твое понимание добра и зла, это не значит что он плохой. Он просто другой. Тем более, что ты сам когда-то пришел к такому
выводу.
Для примера скажу. Я мог бы добавить эту заметку в закладки для того, чтобы не забыть идею и использовать её в будущем, если вдруг встанет такая задача. Но плюса я бы не поставил. Человек взял чужой сниппет, старый престарый, и выложил как своё решение. Для новичка неплохо. Но выглядит оно как решение практического задания на курсах PHP первого уровня.
if ($scriptProperties['wrapper'] == 1) {
    $output .= "\n<" . $scriptProperties['wrapperTag'] . " ";
};
 
if (isset($scriptProperties['wrapperClass']) && $scriptProperties['wrapper'] == 1) {
    $output .= "class='" . $scriptProperties['wrapperClass'] . "'";
};
 
if ($scriptProperties['wrapper'] == 1) {
    $output .= ">";
};
Для плюса нужно всё-таки что-то посерьёзнее. Уверен, автор может лучше. Тем более он знаком с pdoTools.

П.С. Кстати, данную возможность можно было бы легко добавить в pdoTools. Достаточно добавить всего 2 параметра — groupLimit и tplGroup.

В общем:
1. Избранное — это как закладка в книге. Плюс/минус — это реакция на содержание. У них разная семантика.
2. С этими рейтингами разработчики начинают путать этот ресурс с соц. сетями. Осталось только ввести тут «друзей» и лайкать друг друга за фото собачки.
Тут проще. Дополнения можно сделать самим или заказать разработку. Это недорого и не сложно. И проверяющим будет что показывать.
А вот разработать свою CMS, настоящую, с лицензиями и сертификатами, годную для импортозамещения, под силу только Роснано. :) Нужно только подождать несколько лет и выделить из бюджета несколько сот лярдов.