Как правильно задать свой блок "Ничего не найдено" в mFilter2

Здравствуйте!
Пробую сделать свой собственный блок в mFilter2 который бы выводил не просто надпись
«Подходящих результатов не найдено.» А полноценный блок с оформлением и картинкой внутри, пробую внутри tplOuter сделать проверку на количество в totalVar однако как и предполагалось это срабатывает только при загрузке страницы, а при применении фильтров — нет.

Верно ли я понимаю, что единственным верным решением это будет идти и добавлять этот блок на событие mse2_load в js?

В блоке используются словари для мультиязычности и не хотелось бы их опрокидывать в js.
Вячеслав Варов
28 августа 2024, 14:14
modx.pro
203
0

Комментарии: 7

Вячеслав Варов
28 августа 2024, 14:27
0
Судя по сниппету mFilter2 он действительно не поддерживает стилизацию сообщения об отсутствии результатов под капотом

if (!empty($toSeparatePlaceholders)) {
	$modx->setPlaceholders($output['filters'], $toSeparatePlaceholders);
	$output['log'] = $log;
	if (is_array($output['filters'])) {
		$output['filters'] = implode($outputSeparator, $output['filters']);
	}

	$pcre = '#^' . preg_quote($toSeparatePlaceholders) . '(\d+)$#';
	$tmp = array();
	foreach ($modx->placeholders as $k => $v) {
		if (preg_match($pcre, $k)) {
			$tmp[] = $v;
		}
	}

	$output['results'] = !empty($tmp)
		? implode($outputSeparator, $tmp)
		: $modx->lexicon('mse2_err_no_results');

	$modx->setPlaceholders($output, $toSeparatePlaceholders);
}
    Наумов Алексей
    28 августа 2024, 15:04
    +1
    Запихнуть в mse2_err_no_results html код (а может и вызов чанка)...?..
      Вячеслав Варов
      28 августа 2024, 16:25
      0
      Это не всегда удобно, поскольку уведомление может быть разным, например

      Шуб по вашим критериям не найдено

      Штанов по вашим критериям не найдено и тд, я вот пока склоняюсь к добавлению поля tplEmpty и настроить обработку чтобы отдавал чанк если пусто а не запись словаря
        Вячеслав Варов
        28 августа 2024, 16:37
        0
        в итоге вот к чему пришел

        Заменил все вхождения
        $modx->lexicon('mse2_err_no_results')
        на

        $mSearch2->pdoTools->getChunk($scriptProperties['tplEmpty'], $output, $fastMode);
        Добился того что при загрузке страницы mfilter2 отдает чанк из параметра tplEmpty

        Теперь осталось докрутить чтобы при Ajax работало а то сейчас отдает запись словаря
          Вячеслав Варов
          28 августа 2024, 17:00
          0
          и далее создал копию файла
          assets/components/msearch2/action.php

          Назвал ее
          assets/filters/action.php

          Заменил
          'results' => !empty($results) ? $results : $modx->lexicon('mse2_err_no_results'),
          На
          'results' => !empty($results) ? $results : $pdoFetch->getChunk($scriptProperties['tplEmpty'], []),
          Далее в файле js который указывается в системных настройках, у меня он assets/js/filters.min.js

          Поменял assets/components/msearch2/action.php на assets/filters/action.php

          PS может как-то могу поспособствовать добавив это изменение в будущие версии mFilter2?

          тут правда не реализована проверка запыленности этого банка, но вроде как это не сложный функционал, на msearch2 он есть
            Sergey (Sentinel)
            14 ноября 2024, 13:55
            0
            Сложна.
            Я сделал с помощью js. Задал class для div c results
            и вот так прописал
            document.querySelector('.easycomm div').textContent = 'Отзывов пока нет, Ваш может стать первым.';
        Вячеслав Варов
        28 августа 2024, 16:44
        0
        Еще не совсем понимаю как ловится событие post в mfilter2 я думал плагином, а в итоге нет, как оно работает?

        Понял, в файле assets/components/msearch2/action.php вся логика
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          7