Каталог автотоваров

Приветствую!
Появилась задача сделать каталог автотоваров с сортировкой по марке и модели авто с условием, что один и тот же товар может подходить к разным маркам и моделям. Решить задачу, хоть и далеко не идеально, все же получилось, но появились вопросы. Сначала решение, а потом вопрос.


1. Создаем «каталог» марок и моделей в виде дерева ресурсов

2. Создаем два дополнительных поля (TV) marka и model.
marka:
Параметры ввода:
— тип ввода: множественный список;
— возможные значения:
@SELECT `pagetitle` FROM `modx_site_content` WHERE `parent` = 105
«105» — id родителя каталога.
Параметры вывода:
— тип вывода: разделитель;
— разделитель: , (запятая)
model:
Параметры ввода:
— тип ввода: множественный список;
— возможные значения:
@EVAL
$tv_mark = 8; //id дополнительного поля mark
$delimeter = ' '; //разделитель между маркой и моделью в выпадающем списке
$childs = array();
$resource = $modx->getObject('modResource', $_GET['id']);

if ($resource->getTVValue($tv_mark)) {
    $marks = explode(",",$resource->getTVValue($tv_mark));
    foreach ($marks as $mark) {
        $parent_id = $modx->getObject('modResource',array('pagetitle' => $mark))->get('id');
        $child_ids = $modx->getChildIds($parent_id,1,array('context' => 'web'));        
        foreach ($child_ids as $child_id) {
            $childs[] = $mark.$delimeter.$modx->getObject('modResource',$child_id)->get('pagetitle');
        }
    }
} else {
    $childs[] = 'Выбери модель';
}
return ($childs);
3. На странице каталога настраиваем mFilter2 и подключаем скрипт для создания «зависимого» фильтра. Способ описан здесь, большое спасибо автору.
Я дописал в конец скрипта скрытие поля с моделями по кнопке сброса фильтров
$('#mse2_filters button[type=reset]').click(function(){
    $('#mse2_tv\\|model').hide();
});
4. Добавляем в словарь записи для ключей mse2_filter_tv_marka и mse2_filter_tv_model.
5. Для автотоваров я сделал отдельные категории minishop2.

6. Редактируем TV-поля товара (после выбора марки необходимо сохранить ресурс и обновить страницу, иначе не появятся модели)

В фильтре на странице это выглядит так

Вопросы
1. Как сделать, чтобы при выборе «марки», в список «моделей» подгружались нужные возможные значения без перезагрузки страницы? Есть мысль написать плагин с проверкой на изменение значения поля с марками при сохранении ресурса. Если изменилось — перезагружаем страницу, но может можно обновить поле ajax'ом?
2. Если выбрана марка и модель в фильтре, то при смене марки на другую не происходит сброса модели на первый элемент списка «Выберите из списка».

Буду рад любым комментариям и критике.
Василий Stepanov
12 мая 2019, 11:47
modx.pro
195
0
Поблагодарить автора Отправить деньги

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

Иван Бочкарев
12 мая 2019, 15:23
+1
    Василий Stepanov
    12 мая 2019, 15:30
    0
    смотрел и на DynamicDropdownTV, но у них не работает множественный выбор. Сам множественный выбор исправить удалось, но не полностью. Работает, если только родитель («марки») не имеет множественного выбора (простой select).Знаний, увы, не хватило.
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    2