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

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

2. Создаем два дополнительных поля (TV) marka и model.
marka:
Параметры ввода:
— тип ввода: множественный список;
— возможные значения:
Параметры вывода:
— тип вывода: разделитель;
— разделитель: , (запятая)
model:
Параметры ввода:
— тип ввода: множественный список;
— возможные значения:
Я дописал в конец скрипта скрытие поля с моделями по кнопке сброса фильтров
5. Для автотоваров я сделал отдельные категории minishop2.

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

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

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

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

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. Если выбрана марка и модель в фильтре, то при смене марки на другую не происходит сброса модели на первый элемент списка «Выберите из списка».

Буду рад любым комментариям и критике.
Комментарии: 2
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Думаю поможет.