Отображение количества товаров во всех подкатегориях в родительской категории Virtuemart

По умолчанию в Virtuemart 1.1.x есть такая фишка — отображение количества товаров в категории. Все бы было ничего, если бы была штатная возможность отобразить количество всех товаров во  всех подкатегориях. И такая возможность есть, правда придется немного подкрутить.

открываем файл administrator/components/com_virtuemart/classes/ps_product_category.php и в районе строки 1001 видим функцию  products_in_category:

 

	function products_in_category( $category_id ) {
		if( PSHOP_SHOW_PRODUCTS_IN_CATEGORY == '1' || vmIsAdminMode() ) {
			$num = ps_product_category::product_count($category_id);
			if( empty($num) && ps_product_category::has_childs( $category_id )) {
				$db = new ps_DB;
				$q = "SELECT category_child_id FROM #__{vm}_category_xref ";
				$q .= "WHERE category_parent_id='$category_id' ";
				$db->query($q);
				while( $db->next_record() ) {
					$num += ps_product_category::product_count($db->f("category_child_id"));
				}
			}

			return " ($num) ";
		}
		else
		return ( "" );

	}

В комментарии над ней так и написано «Показывает количество товаров в категории $category_id» (на аглицких диалектах, конечно).

Чтобы наша задумка заработала, надо переписать эту функцию и добавить еще одну (для рекурсии):

	function prod_in_cat_recursive( $category_id ) {
        $num=0;
        if (ps_product_category::has_childs( $category_id )) {
			$db = new ps_DB;
			$q = "SELECT category_child_id FROM #__{vm}_category_xref ";
			$q .= "WHERE category_parent_id='$category_id' ";
			$db->query($q);
			while( $db->next_record() ) {
				$num += ps_product_category::prod_in_cat_recursive($db->f("category_child_id"));
				}
		}
		$num += ps_product_category::product_count($category_id);
		return $num;
	}
    function products_in_category( $category_id ) {
		if( PSHOP_SHOW_PRODUCTS_IN_CATEGORY == '1' ) {
			$num = ps_product_category::prod_in_cat_recursive( $category_id );
			return " ($num) ";
		}
		else
			return "";
	}

На пальцах опишу, что это все значит. Была функция products_in_category, которая смотрела количество товаров в категории. Ну была вроде и была. Теперь мы ее переписали и добавили еще одну функцию (prod_in_cat_recursive), которая рекурсивно смотрит количество товаров в подкатегориях и складывает их.

Вот вроде бы и все…

0

Добавить комментарий