Вообщем, вот еще одно решение - забубенил сам - основывался на указанном коде выше.
Вводная: данный хак выводит список Сопутствующих товаров, выбранных из категории, в которой лежит выбранный товар.
Решение основано на написанном выше, НО! есть несколько отличий:
1. В файле \administrator\components\com_virtuemart\html\
shop.product_details.php Ничего не меняем!!2. В файле \components\com_virtuemart\themes\default\templates\common\
relatedProducts.tpl.php пишем это:
<?php if( !defined( '_VALID_MOS' ) && !defined( '_JEXEC' ) ) die( 'Direct Access to '.basename(__FILE__).' is not allowed.' ); ?>
<hr/>
<h3><?php echo $VM_LANG->_('PHPSHOP_RELATED_PRODUCTS_HEADING')?></h3>
<table width="100%" align="center">
<tr>
<?php
while( $products->next_record() ) { ?>
<td valign="top">
<?php echo $ps_product->product_snapshot2( $products->f('product_sku') )?>
</td>
<?php
}
?>
</tr>
</table>
3. В файле \administrator\components\com_virtuemart\classes\
ps_product.php добавляем новую функцию :
function product_snapshot2( $product_sku, $show_price=true, $show_addtocart=true, $show_product_name = true ) {
global $sess, $mm_action_url;
$category_id = vmGet($_REQUEST, "category_id", null); /* Получаем категорию в которой находится товар */
/*Отбираем опубликованные продукты из данной категории*/
$q='SELECT product.`product_id` , `product_name`';
$q=$q.' FROM `#__{vm}_product` AS product, `#__{vm}_product_category_xref` AS category';
$q=$q.' WHERE product.`product_id` = category.`product_id`';
$q=$q.' AND category.category_id ='.$category_id;
$q=$q.' AND `product_publish` = "Y"';
$q=$q.' LIMIT 0 , 30';
$db = new ps_DB;
$db->query( $q );
require_once(CLASSPATH.'ps_product_category.php');
$ps_product_category = new ps_product_category;
/* $q = "SELECT product_id, product_name, product_parent_id, product_thumb_image FROM #__{vm}_product WHERE product_sku='$product_sku'"; */
$myres = $db->record;
foreach ($myres as $rplist){
// if ($myres->next_record()) {
$product_id = $db->f("product_id" );
$tpl = new $GLOBALS['VM_THEMECLASS']();
$cid = $ps_product_category->get_cid( $product_id );
$tpl->set( 'product_id', $product_id);
$tpl->set( 'product_name', $db->f("product_name") );
$tpl->set( 'show_product_name', $show_product_name );
if ($db->f("product_parent_id")) {
$url = "?page=shop.product_details&category_id=$cid&flypage=".$this->get_flypage($db->f("product_parent_id"));
$url .= "&product_id=" . $db->f("product_parent_id");
} else {
$url = "?page=shop.product_details&category_id=$cid&flypage=".$this->get_flypage($db->f("product_id"));
$url .= "&product_id=" . $db->f("product_id");
}
$product_link = $sess->url($mm_action_url. "index.php" . $url);
$tpl->set( 'product_link', $product_link );
$tpl->set( 'product_thumb_image', $db->f("product_thumb_image"), "alt=\"".$db->f("product_name")."\"");
if (_SHOW_PRICES == '1' && $show_price) {
// Show price, but without "including X% tax"
$price = $this->show_price( $db->f("product_id"), true );
$tpl->set( 'price', $price );
}
if (USE_AS_CATALOGUE != 1 && $show_addtocart
&& isset( $GLOBALS['product_info'][$product_id]['price']['product_price_id'] ) // Product must have a price to add it to cart
&& !$this->product_has_attributes($product_id, true) // Parent Products and Products with attributes can't be added to cart this way
) {
$url = "?page=shop.cart&func=cartAdd&product_id=" . $db->f("product_id");
$addtocart_link = $sess->url($mm_action_url. "index.php" . $url);
$tpl->set( 'addtocart_link', $addtocart_link );
}
return $tpl->fetch( 'common/productsnapshot.tpl.php');
}
return '';
}
Почему я выбрал данный способ? - мне очень не понравилось, что в примере выше нет возможности выбрать в админке способ вывода Сопутствующих товаров (столбцом, или строкой + вкл/выкл кнопок, цены, фото и тд.). Поэтому прикрутил к имеющемуся фукционалу в VM.