Pokud už má někdo eshop vytvořený a položky přidané a rozhodne se změnit členění kategorií, bylo by časově velmi náročné všechny položky upravit a dodatečně dozařadit. To není potřeba, díky jednoduché úpravě zdrojového kodu, to můžete obejít a nechat vypisovat položky i z podřazených kategorií do hlavní kategorie stromu.
Ve Virtuemartu 1.1 stačí editovat soubor administrator/components/com_virtuemart/html/shop_browse_queries.php
V něm si najdětě řádek 20, kde po zápisu mm_showMyFileName( __FILE__ );
Vložte tento kod
class children_class{
var $cat_children; // where clause
var $db_browse; // db controler
function get_children($parent){
$q = "SELECT `category_child_id` FROM `#__{vm}_category_xref` WHERE `category_parent_id`=$parent";
$this->db_browse->query($q);
$cat_children_id = array();
while ($this->db_browse->next_record()){
array_push($cat_children_id,$this->db_browse->f("category_child_id"));
}
foreach($cat_children_id as $cat_child_id){
$this->cat_children .= " OR `#__{vm}_product_category_xref`.`category_id`=$cat_child_id";
$this->get_children($cat_child_id);
}
return $this->cat_children;
}
Poté ještě v souboru okolo řádku 70 (po změně řádek 89) editujte kod za zápisem // Filter Products by Category (about row 70)
Původní kod
Nahraďte tímto zápisem
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;
}
}
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 )) {
$cat_child = "(`#__{vm}_product_category_xref`.`category_id`=".$category_id."";
// Find Child Category Products
$children = new children_class;
$children->db_browse = $db_browse;
$cat_child .= $children->get_children($category_id);
$cat_child .= substr($this->cat_children, 0, -3);
$cat_child .= ")";
$where_clause[] = $cat_child;
}
}
Soubor uložte a nahrajte na Vaše ftp a otestujte v ostrém provozu. Nově byste měli mít již položky i v nadřazených kategoriích
Virtuemart product to parent categories
Pro Virtuemart 2.0 máme ladnější řešení, které Vám zařazení do kategorií bude upravovat pravidelně. Propracovaný plugin, který naše konkurence prodává za 49 Euro, máte u nás jen za cenu instalace a konfigurace - tedy 350 Kč.
Plugin umožňuje nastavení tak, že kategorie budou automaticky kontrolovány a přidávány při vstupu do administrace Virtuemartu, nebo při vstupu do sekce produkty v adminu. Poslední možnost je spuštění manuálně. Rozšíření Vám také dává na výběr, v jakém režimu by měly být kategorie editovány, tedy jestli by se měl produkt automaticky vložit i do nadřazených kategorií, nebo jen do té poslední.