Александр

Александр

С нами с 09 октября 2016; Место в рейтинге пользователей: #918
Евгений Шеронов
11 мая 2020, 20:43
1
0
Я не специально проигнорировал сообщение. Но ответить лучше поздно, чем никогда)

По сути это делается через sfMenu просто с указанием параметров &parents=`[[*id]]` и &mincount=`1`.
Там ещё можно учитывать относительность через параметр &relative=`1` (тогда ссылки будут каждый раз уходить в глубину от выбранного параметра, если такие правила есть).

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

А как сделать фильтры для mSearch2 особо разницы нет, хоть ТВ поля, хоть опции, хоть через Tagger.
Yurij Finiv
22 февраля 2020, 21:27
1
0
Да babel нужен если хотите делать на контекстах, XRouting просто упрощает работу с настройкой. С выводом силок уже работает pdoTools тег base это
<base href="[[++site_url]]">
или на феном
<base href="{'site_url' | config}">
Если не работать с контекстами, то есть localizator

Найти информацию по настройке не сложно в гугле полно modx.pro/howto/16334
Yurij Finiv
21 февраля 2020, 01:04
1
0
Посмотрите в сторону старенького компонента Gateway Manager или аналогичных например XRouting
Дальше тег base указываем только сайт без языков, или настраиваем nginx/apache правильно, здесь дело вкуса
Евгений Шеронов
11 февраля 2020, 11:03
1
0
Условия в полях немного по другому работают, они вообще больше созданы для условий, когда значения из сторонних таблиц.
По идее эти условия срабатывают при сохранении поля, а при сохранении ресурса нет.
Но вообще, надо бы этот момент поправить когда-нибудь, спасибо!

Вот для ограничения сбора ресурсов есть настройки по шаблонам и типам ресурсов.

Основные же условия для правильности подсчёта результатов пишутся в правилах. Вот они гораздо важнее, так как влияют на видимость страницы.
Сергей Шлоков
25 апреля 2018, 08:54
3
+5
стандартный парсер запускается раньше, чем парсер фенома, из за чего сначала обработаются стандартные теги
Не путай человека.
Парсер MODX запускается перед феномом только для обработки кэшируемых тегов. Вообще парсинг выглядит так:
1. Запускается парсер MODX и обрабатывает кэшируемые теги. Феном теги остаются необработанные.
2. Запускается парсер фенома, если есть теги Fenom.
3. Запускается парсер MODX и обрабатывает некэшируемые теги пока они есть. Нераспарсенные не удаляются.
Пункты 2 и 3 могут выполняться в цикле до 10 раз, если есть нераспарсенные теги.
// В сниппет попадёт распарсенный тег феном
[[!snippet? param=`{$value}`]]
4. Запускается парсер фенома, если есть теги Fenom.
5. Запускается парсер MODX и обрабатывает некэшируемые теги пока они есть. Нераспарсенные теги удаляются.
Пункты 4 и 5 пункт могут выполняться в цикле до 10 раз, если есть нераспарсенные теги.
Многие, наверно, обращали внимание на тормоза, если указан несуществующий плейсхолдер.

Выглядит эта конструкция, мягко говоря, как вид жопы сбоку. У этих парсеров разный принцип работы. По хорошему, разработчикам MODX нужно или вообще отказываться от парсера и просто дать возможность пользователям самим выбирать (я сделал маленький шажок в эту сторону) или дорабатывать его до более-менее функционального уровня (я это тоже пробовал).

Я бы посоветовал использовать оба парсера так:
— юзать только кэшируемые теги MODX ([[*tag]], [[$chunk]], [[++system]], [[snippet]]). Хорошо для оптимизации.
— для остального использовать феном.
В этих режимах парсеры не пересекаются.
DocentBF
25 июня 2016, 20:36
4
+4
Можно переписать метод mSearch2.handleSort или подключить к mFilter2 cвой скрипт фронтенда или переопределить метод в другом js файле, например как-то так:
if (typeof(mSearch2) !== "undefined") {
mSearch2.initialized = false;
mSearch2.handleSort = function() {
    var params = this.Hash.get();
    if (params.sort) {
            var sorts = params.sort.split(mse2Config.values_delimeter);
            for (var i = 0; i < sorts.length; i++) {
                var tmp = sorts[i].split(mse2Config.method_delimeter);
                if (tmp[0] && tmp[1]) {
                    $('#mse2_sort option[data-sort="' + tmp[0] + '"][value="' + tmp[1] + '"]').attr('selected', 'selected').trigger('change');
                }
            }
        }
        $(document).off('click', this.options.sort_link);
        $(document).on('change', '#mse2_sort', function() {
            var selected = $(this).find('option:selected');
            var sort = selected.data('sort');
            sort += mse2Config.method_delimeter + selected.val();
            mse2Config.sort = (sort != mse2Config.start_sort) ? sort : '';
            var params = mSearch2.getFilters();
            mSearch2.Hash.set(params);
            mSearch2.load(params);
        });
    }
    mSearch2.initialize('body');
}
а select представить например так:
<select id="mse2_sort">
    <option value="asc" data-sort="resource|pagetitle">по умолчанию</option>
    <option value="asc" data-sort="ms|price">по возрастанию цены</option>
    <option value="desc" data-sort="ms|price">по убыванию цены</option>
</select>