Virtuemart 3 - vlastní výpis produktů, například další výrobky výrobce

Uf, tak jsem to rozchodil! Zákazník chtěl pod detail produktu dát výpis ostatních produktů od stejného výrobce. Protože jsem nenašel nějaký jednoduchý modul, udělal jsem si to sám. Důležité je, že využívá naprosto shodné šablony jako je použitá ve výpisu v kategorii, jen podstrkávám vlastní id produktů...

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ů :)

 

Jmenuji se Radek Pelikán, bydlím v Ledči nad Sázavou. Mám 3 krásné děti.

Mezi mé velké koníčky patří desková hra Go a nově jsem začal cvičit Kendó v Ledči nad Sázavou.