Virtuemart 3 - vlastní výpis produktů, například další výrobky výrobce
Nejdřív ze všeho jsem potřeboval dostat pole id produktů pro výpis. Jedná se o všechny ostatní produkty, které mají shodného výrobce. To jsem udělal pomocí tohoto kódu:
$db = JFactory::getDbo(); $query = "SELECT virtuemart_product_id FROM `#__virtuemart_product_manufacturers` WHERE virtuemart_product_id != '".$this->product->virtuemart_product_id."' AND virtuemart_manufacturer_id = '".$this->product->virtuemart_manufacturer_id[0]."' "; $db->setQuery($query); $ids = $db->loadColumn();
Samozřejmě si můžete udělat i vlastní filtraci.
Kouknutím do šablon jsem zjistil, že výpis produktů de facto dělá tento řádek:
echo shopFunctionsF::renderVmSubLayout($this->productsLayout,array('products'=>$products,'currency'=>$this->currency,'products_per_row'=>$this->perRow,'showRating'=>$this->showRating));
Tak jsem tento řádek vzal a strčil ho do šablony detailu produktu na příslušné místo dole na stránce. Je třeba ale tuto funkci zavolat se správnými parametry. První $this->productsLayout stačí vyměnit za řetězec "products".
Naplnění objektu $products se děje v souboru /components/com_virtuemart/views/category/view.html.php , takže doporučuji se podívat do něj. V novějších verzích VM to možná bude trošku jinak. Já si odsud vzal příslušné řádky a napsal celý script takto:
//potřebuji vytvořit objekt pro renderVmSubLayout "products" $productModel = VmModel::getModel('Product'); $dalsi_produkty_vyrobce = $productModel->getProducts($ids); //ještě musím do produktů k výpisu strčit obrázky $imgAmount = VmConfig::get('prodimg_browse',1); $productModel->addImages($dalsi_produkty_vyrobce, $imgAmount ); $products = array(); $products[0] = $dalsi_produkty_vyrobce; echo shopFunctionsF::renderVmSubLayout("products",array('products'=>$products,'currency'=>$this->currency,'products_per_row'=>3));
No a je to hotovo! Takto jsem dokázal na stránce detailu produktu udělat vlastně filtrovaný výpis produktů :)