Очень часто структура магазина выглядит примерно так:
категория_товаров_A
--производитель_A
--производитель_B
категория_товаров_B
--производитель_A
--производитель_С
и тд.. Для создания подобной структуры приходится создавать подкатегории-производителей и аккуратно вбивать каждый товар в обе категории. Это очень неудобно, нелогично, усложняет создание магазина.
Именно для решения этих проблем мною был написан модуль, верней только layout (шаблон вывода) к уже готовому модулю. Он позволяет каждую категорию последнего уровня вложенности разбить на эти самые подкатегории-производители, на основе указанного в товаре значения
Производитель (manufacturer). К примеру у нас есть категории:
# Медиаплееры
# Проекторы
Все наши медиаплееры и проекторы мы желаем разбить на производителей. С помощью этого layout'а генерируется следующее меню:
# Медиаплеры
* InFocus
* JVC
# Проекторы
* InFocus
* SONY
Лэйаут создает довольно большую нагрузку на сервер, так как делает в каждой категории по запросу, причем довольно тяжелому. Поэтому я использовал схему кэширования. Чтобы она работала, в общих настройках сайта нужно включить кэширование.
Теперь плохие новости... нам придется (снова?) ковырять VirtueMart, так как при запросе нужной категории да еще и производителя у него башню сносит. Правки маленькие:
1) Помогаем построить верный запрос. Открываем administrator/components/com_virtuemart/html/shop_browse_queries.php, находим в нем код
// Filter Products by Category
if( $category_id ) {
if( !empty( $search_this_category ) && (!empty( $keyword ) || !empty( $manufacturer_id ) )) {
$where_clause[] = "`#__{vm}_product_category_xref`.`category_id`=".$category_id;
} elseif( empty( $keyword ) && empty( $manufacturer_id )) {
$where_clause[] = "`#__{vm}_product_category_xref`.`category_id`=".$category_id;
}
}
и комментируем подстроку && empty( $manufacturer_id ):
// Filter Products by Category
if( $category_id ) {
if( !empty( $search_this_category ) && (!empty( $keyword ) || !empty( $manufacturer_id ) )) {
$where_clause[] = "`#__{vm}_product_category_xref`.`category_id`=".$category_id;
} elseif( empty( $keyword ) /*&& empty( $manufacturer_id )*/) {
$where_clause[] = "`#__{vm}_product_category_xref`.`category_id`=".$category_id;
}
}
2) Делаем опознавательный знак что мы фильтруем по производителю. Открываем рядом файл shop.browse.php. Находим
if( $category_id ) {
/**
* CATEGORY DESCRIPTION
*/
$browsepage_lbl = $category_name;
и добавляем чуть ниже это:
if ($manufacturer_id) {
$db->query( "SELECT manufacturer_id, mf_name, mf_desc FROM #__{vm}_manufacturer WHERE manufacturer_id='$manufacturer_id'");
$db->next_record();
$browsepage_lbl.= ' [ '.shopMakeHtmlSafe( $db->f("mf_name") ).' ] ';
}
Терь зайдя в медиаплееры и выбрав производителя InFocus в заголовке страницы увидем
Медиаплееры [ InFocus ] Сам модуль в соседней теме
http://joomlaforum.ru/index.php/topic,109669.msg713262.html#msg713262Как добавить layout там описано.
UPD: Обновил лэйаут. Добавил еще аккордион.
[вложение удалено Администратором]