pondělí, 24 únor 2014 20:58

Virtuemart - jak přiřadit zboží do nadřazených kategorií

Dost často se mě zákazníci ptají, jak by šlo hromadně vyřešit zobrazení položek i v nadřazených kategoriích eshopu, aniž by museli složitě produkty do všech kategorií zařazovat. Pokud máte strom kategorií, kdy ta nejzanořenější je třeba až čtvrtá nebo pátá, znamená to, že u položky musíte přiřadit všechny kategorie, jinak by se položka zobrazila až v té nejzanořenější. To by znamenalo, že by byla přístupná až na pátý proklik, což je špatně. 

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

Code: 

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

Code: [Select]


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;
}
}
Nahraďte tímto zápisem

Code: [Select]

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í. 

auto-parent-categories

auto-parent-categories2

 

Vladimír Vaněk

Bohaté znalosti redakčního systému Joomla uplatňuje každý den při tvorbě či úpravě Joomla webů. Virtuemart, K2, Joomleague to je jen zlomek rozšíření, které má v malíku. Ve volném čase se prohání na kole po východních Čechách...