Неудобства работы с Virtuemart заслуживают множества отдельных статей. Непродуманность модуля просто поражает, но, как часто бывает, иногда надо просто терпеть и писать костыли. В этой заметке покажу, как мне удалось вывести товары дочерних категорий при просмотре родительской.
Итак, следует сделать два шага и поправить два файла:
1. administrator/components/com_virtuemart/models/category.php
В класс добавляем новый метод:
function GetTreeCatArray(&$categories, $parent_id = 0) {
$db = JFactory::getDBO();
$query = 'SELECT `category_child_id` FROM `#__virtuemart_category_categories` WHERE `category_parent_id`="'.$parent_id.'"';
$db->setQuery($query);
$db->query();
if (empty($categories) && ($parent_id != 0))
array_push($categories, $parent_id);
$rows = $db->loadRowList();
if (empty($rows)) {
return;
} else {
foreach($rows as $row) {
array_push($categories, $row[0]);
$this->GetTreeCatArray($categories, $row[0]);
}
}
}
2. administrator/components/com_virtuemart/models/products.php
Вместо следующей строки:
$where[] = ' `pc`.`virtuemart_category_id` = ' . $virtuemart_category_id;
Вставляем вот этот блок:
$categories = array();
VmModel::getModel('category')->GetTreeCatArray($categories, $virtuemart_category_id);
$where[] = ' `pc`.`virtuemart_category_id` in (\'' . implode('\',\'',$categories).'\')';
После сохранения в родительской Категории Вы сможете увидеть список товаров с дочерних Категорий. На авторство не претендую — решение найдено в Интернете.