Вывод товаров из подкатегорий в родительскую?

  • 13 Ответов
  • 8242 Просмотров

0 Пользователей и 1 Гость просматривают эту тему.

*

Оффлайн cyberj

Была уже тема с решением http://joomlaforum.ru/index.php/topic,44112.0.html для VirtueMart 1.1.X, хотелось бы по аналогии сделать так-же в VirtueMart 2.0

*

Оффлайн d0ublezer0

  • ****
  • 326
  • [+]29 / [-]0
  • Javaхарлал Неру
    • Просмотр профиля
Самый простой способ - без хаков.
Товарам из подкатегорий добавить принадлежность к родительским категориям (спасибо gruz за совет).
Я помог вам? Ткните в карму.

*

Оффлайн usbmaster

  • *
  • 4
  • [+]0 / [-]0
  • http://usbmaster.ru
    • Просмотр профиля
    • Компьютерная помощь
Самый простой способ - без хаков.
Товарам из подкатегорий добавить принадлежность к родительским категориям (спасибо gruz за совет).
эт конечно просто а что делать если товаров более 1000?

*

Оффлайн Tuzemec

эт конечно просто а что делать если товаров более 1000?
Тогда хак страницы отображения категории вида:
if ($this->category->childr) {echo ...результат выборки из подкатегории}
esle {echo ....результат выборки из категории}
В общем в ту сторону... И то, скорее всего будет отображать товар из первой группы подкатегорий... а вот с Кат+Подкат+Подподкат - Вопрос! Тоже надо. Буду после выходных ковырять... Если кто раньше начнет и результата добьется - будьте добры, известите здесь. А то уж больно ленив после праздника Победы... К стати всех с Победой над Фашизмом 20 века!

А в общем лучше способом что в 4-ом ответе... хоть и товара 1000, зато как потом всё чудесно
« Последнее редактирование: 10.05.2012, 12:10:25 от Tuzemec »
Каждый ваш клик помогает заработать сыну на конфеты
Не дайте ребенку остаться без сладкого! Сделай ТЫЦ!

*

Оффлайн d0ublezer0

  • ****
  • 326
  • [+]29 / [-]0
  • Javaхарлал Неру
    • Просмотр профиля
эт конечно просто а что делать если товаров более 1000?
Тогда CSVI
Бесплатно, но требуется регистрация.
Я помог вам? Ткните в карму.

*

Оффлайн stepka

Прилагаю написанный мной скриптег, который обходит товары, добавляет вывод из подкатегорий в родительские.
Кстати суффиксы не забудте исправить у таблиц.
<?php

$link = mysql_connect("хост", "пользоавтель", "пароль");
$db = mysql_select_db ("имя базы данных", $link);
$result = mysql_query ("SELECT `virtuemart_product_id`,`virtuemart_category_id`,`ordering` FROM `jos_virtuemart_product_categories`", $link);

$products = array();
$childs = array();

while ($vmprod = mysql_fetch_assoc($result))
{
   $products[] = $vmprod['virtuemart_product_id'];
   $childs[] = $vmprod['virtuemart_category_id'];
}

foreach($products as $prod_key=>$prod_value)
{
   $result = mysql_query ("SELECT `category_parent_id` FROM `jos_virtuemart_category_categories` WHERE `category_child_id` = '".$childs[$prod_key]."'", $link);
   $parent = mysql_fetch_row($result);
   $instert1 = mysql_query ("INSERT INTO `jos_virtuemart_product_categories` (`virtuemart_product_id`,`virtuemart_category_id`,`ordering`) VALUES ('".$prod_value."','".$parent[0]."','2')", $link);

   if($parent[0] > 0)
   {
         $result = mysql_query ("SELECT `category_parent_id` FROM `jos_virtuemart_category_categories` WHERE `category_child_id` = '".$parent[0]."'", $link);
             $parent = mysql_fetch_row($result);

         $result = mysql_query ("INSERT INTO `jos_virtuemart_product_categories` (`virtuemart_product_id`,`virtuemart_category_id`,`ordering`) VALUES ('".$prod_value."','".$parent[0]."','3')", $link);
    }
}

?>

Вообще как выяснилось, при добавлении товара указывайте сразу и дочерние и родительские категории и они будут выводиться и там и там.
« Последнее редактирование: 20.05.2012, 19:40:14 от stepka »

*

Оффлайн indigo

Тогда хак страницы отображения категории вида:
if ($this->category->childr) {echo ...результат выборки из подкатегории}
esle {echo ....результат выборки из категории}
В общем в ту сторону... И то, скорее всего будет отображать товар из первой группы подкатегорий... а вот с Кат+Подкат+Подподкат - Вопрос! Тоже надо. Буду после выходных ковырять... Если кто раньше начнет и результата добьется - будьте добры, известите здесь. А то уж больно ленив после праздника Победы... К стати всех с Победой над Фашизмом 20 века!

А в общем лучше способом что в 4-ом ответе... хоть и товара 1000, зато как потом всё чудесно
Это же сделает дубль каждого товара, выходит: 2 абсолютно одиннаковых товара будут в магазине под двумя разными url Кто-то знает как это обойти? Я надеелся, что это предусмотренно разработчиками, но по видимому решение только в том, чтобы вписывать вручную url в поле.

Сейчас проверил, даже если вписывать свой урл в карточке товара, всё равно оно выдаёт два разных урла для одного и того же товара(( есть решение?
« Последнее редактирование: 10.01.2013, 14:36:35 от indigo »

*

Оффлайн Tuzemec

Это же сделает дубль каждого товара, выходит: 2 абсолютно одиннаковых товара будут в магазине под двумя разными url
В общем есть примерно похожая тема, но там задачу решали с выводом в файл. Там есть файл вывода всех категорий и товара на страницу. В общем думаю от него поплясать с бубном можно.
Каждый ваш клик помогает заработать сыну на конфеты
Не дайте ребенку остаться без сладкого! Сделай ТЫЦ!

*

Оффлайн Tuzemec

В общем есть примерно похожая тема, но там задачу решали с выводом в файл. Там есть файл вывода всех категорий и товара на страницу. В общем думаю от него поплясать с бубном можно.
Колдовал весь вечер и пришел к выводу что нет ничего невозможного.
В общем, вывести товар из подкатегорий в родительскую можно без добавления принадлежности товара к родительской путем изменения кода  в шаблоне default.php категории.
Я создал в папке шаблона категории файл catwithproduct.php и в настройках VM выставил его как макет категории. Собственно для проверки и доработки выкладываю код этого файла. Его необходимо доработать, нет разбиения на страницы и фильтрации по производителю. Думается для полной работоспособной версии придется скрестить view.html.php и default.php категории в один файл
catwithproduct.php
<?php
/**
 *
 * Show the products in a category
 *
 * @package    VirtueMart
 * @subpackage
 * @author RolandD
 * @author Max Milbers
 * @todo add pagination
 * @link http://www.virtuemart.net
 * @copyright Copyright (c) 2004 - 2010 VirtueMart Team. All rights reserved.
 * @license http://www.gnu.org/copyleft/gpl.html GNU/GPL, see LICENSE.php
 * VirtueMart is free software. This version may have been modified pursuant
 * to the GNU General Public License, and as distributed it includes or
 * is derivative of works licensed under the GNU General Public License or
 * other free or open source software licenses.
 * @version $Id: default.php 6556 2012-10-17 18:15:30Z kkmediaproduction $
 */

//vmdebug('$this->category',$this->category);
vmdebug ('$this->category ' $this->category->category_name);
// Check to ensure this file is included in Joomla!
defined ('_JEXEC') or die('Restricted access');
JHTML::('behavior.modal');
/* javascript for list Slide
  Only here for the order list
  can be changed by the template maker
*/
$js "
jQuery(document).ready(function () {
jQuery('.orderlistcontainer').hover(
function() { jQuery(this).find('.orderlist').stop().show()},
function() { jQuery(this).find('.orderlist').stop().hide()}
)
});
"
;

$document JFactory::getDocument ();
$document->addScriptDeclaration ($js);

// &#1055;&#1086;&#1076;&#1082;&#1083;&#1102;&#1095;&#1072;&#1077;&#1084; &#1086;&#1073;&#1088;&#1072;&#1073;&#1086;&#1090;&#1095;&#1080;&#1082; &#1084;&#1086;&#1076;&#1077;&#1083;&#1080; &#1090;&#1086;&#1074;&#1072;&#1088;&#1072;
$productModel VmModel::getModel('product');

/*$edit_link = '';
if(!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'permissions.php');
if (Permissions::getInstance()->check("admin,storeadmin")) {
$edit_link = '<a href="'.JURI::root().'index.php?option=com_virtuemart&tmpl=component&view=category&task=edit&virtuemart_category_id='.$this->category->virtuemart_category_id.'">
'.JHTML::_('image', 'images/M_images/edit.png', JText::_('COM_VIRTUEMART_PRODUCT_FORM_EDIT_PRODUCT'), array('width' => 16, 'height' => 16, 'border' => 0)).'</a>';
}

echo $edit_link; */
if (empty($this->keyword)) {
?>

<div class="category_description">
<?php echo $this->category->category_description?>
</div>
<?php
}

/* Show child categories */

//if (VmConfig::get ('showCategory', 1) and empty($this->keyword)) {
if (VmConfig::get ('showCategory'1)) {
if ($this->category->haschildren) {

// Category and Columns Counter
$iCol 1;
$iCategory 1;

// Calculating Categories Per Row
$categories_per_row VmConfig::get ('categories_per_row'3);
$category_cellwidth ' width' floor (100 $categories_per_row);

// Separator
$verticalseparator " vertical-separator";
?>


<div class="category-view">

<?php // Start the Output
if (!empty($this->category->children)) {
foreach ($this->category->children as $category) {

// Show the horizontal seperator
if ($iCol == && $iCategory $categories_per_row) {
?>

<div class="horizontal-separator"></div>
<?php
}

// this is an indicator wether a row needs to be opened or not
if ($iCol == 1) {
?>

<div class="row">
<?php
}

// Show the vertical seperator
if ($iCategory == $categories_per_row or $iCategory $categories_per_row == 0) {
$show_vertical_separator ' ';
} else {
$show_vertical_separator $verticalseparator;
}

// Category Link
$caturl JRoute::('index.php?option=com_virtuemart&view=category&virtuemart_category_id=' $category->virtuemart_category_id);

// Show Category
?>

<div class="category floatleft<?php echo $category_cellwidth $show_vertical_separator ?>">
<div class="spacer">
<h2>
<a href="<?php echo $caturl ?>" title="<?php echo $category->category_name ?>">
<?php echo $category->category_name ?>
<br/>
<?php // if ($category->ids) {
echo $category->images[0]->displayMediaThumb (""FALSE);
//} ?>

</a>
</h2>
</div>
</div>
<?php
$iCategory++;

// Do we need to close the current row now?
if ($iCol == $categories_per_row) {
?>

<div class="clear"></div>
</div>
<?php
$iCol 1;
} else {
$iCol++;
}
}
}
// Do we need a final closing row tag?
if ($iCol != 1) {
?>

<div class="clear"></div>
</div>
<?php ?>
</div>

<?php
}
}
?>

<div class="browse-view">
<?php
if (!empty($this->keyword)) {
?>

<h3><?php echo $this->keyword?></h3>
<?php
?>

<?php if ($this->search !== NULL) { ?>
<form action="<?php echo JRoute::('index.php?option=com_virtuemart&view=category&limitstart=0&virtuemart_category_id=' $this->category->virtuemart_category_id); ?>" method="get">

<!--BEGIN Search Box -->
<div class="virtuemart_search">
<?php echo $this->searchcustom ?>
<br/>
<?php echo $this->searchcustomvalues ?>
<input name="keyword" class="inputbox" type="text" size="20" value="<?php echo $this->keyword ?>"/>
<input type="submit" value="<?php echo JText::('COM_VIRTUEMART_SEARCH')?>" class="button" onclick="this.form.keyword.focus();"/>
</div>
<input type="hidden" name="search" value="true"/>
<input type="hidden" name="view" value="category"/>

</form>
<!-- End Search Box -->
<?php ?>

<?php // Show child categories
                // &#1042;&#1099;&#1088;&#1091;&#1073;&#1072;&#1077;&#1084; &#1091;&#1089;&#1083;&#1086;&#1074;&#1080;&#1077; &#1087;&#1088;&#1086;&#1074;&#1077;&#1088;&#1082;&#1080; &#1085;&#1072;&#1083;&#1080;&#1095;&#1080;&#1103; &#1090;&#1086;&#1074;&#1072;&#1088;&#1072; &#1074; &#1088;&#1086;&#1076;&#1080;&#1090;&#1077;&#1083;&#1100;&#1089;&#1082;&#1086;&#1081; &#1082;&#1072;&#1090;&#1077;&#1075;&#1086;&#1088;&#1080;&#1080;
//if (!empty($this->products)) {

?>

<div class="orderby-displaynumber">
<div class="width70 floatleft">
<?php echo $this->orderByList['orderby']; ?>
<?php echo $this->orderByList['manufacturer']; ?>
</div>
<div class="width30 floatleft display-number">
<?php echo $this->vmPagination->getResultsCounter ();?><br/><?php echo $this->vmPagination->getLimitBox (); ?>
</div>
<div class="vm-pagination">
<?php echo $this->vmPagination->getPagesLinks (); ?>
<span style="float:right"><?php echo $this->vmPagination->getPagesCounter (); ?></span>
</div>

<div class="clear"></div>
</div> <!-- end of orderby-displaynumber -->
<div class="product-view">
<h1><?php echo $this->category->category_name?></h1>

<?php
// Category and Columns Counter
$iBrowseCol 1;
$iBrowseProduct 1;

// Calculating Products Per Row
$BrowseProducts_per_row $this->perRow;
$Browsecellwidth ' width' floor (100 $BrowseProducts_per_row);

// Separator
$verticalseparator " vertical-separator";

// Count products ?? why not just count ($this->products)  ?? note by Max Milbers
$BrowseTotalProducts 0;
foreach ($this->products as $product) {
$BrowseTotalProducts++;
}

//&#1055;&#1088;&#1086;&#1074;&#1077;&#1088;&#1103;&#1077;&#1084; &#1103;&#1074;&#1083;&#1103;&#1077;&#1090;&#1089;&#1103; &#1083;&#1080; &#1082;&#1072;&#1090;&#1077;&#1075;&#1086;&#1088;&#1080;&#1103; &#1088;&#1086;&#1076;&#1080;&#1090;&#1077;&#1083;&#1100;&#1089;&#1082;&#1086;&#1081;
if (!empty($this->category->children)) {
foreach ($this->category->children as $category) {
// Start the Output
// &#1055;&#1077;&#1088;&#1077;&#1085;&#1072;&#1079;&#1085;&#1072;&#1095;&#1072;&#1077;&#1084; &#1087;&#1077;&#1088;&#1077;&#1084;&#1077;&#1085;&#1085;&#1099;&#1077; &#1089;&#1086;&#1075;&#1083;&#1072;&#1089;&#1085;&#1086; &#1090;&#1088;&#1077;&#1073;&#1086;&#1074;&#1072;&#1085;&#1080;&#1103;&#1084; &#1090;&#1077;&#1082;&#1091;&#1097;&#1077;&#1081; &#1087;&#1086;&#1076;&#1082;&#1072;&#1090;&#1077;&#1075;&#1086;&#1088;&#1080;&#1080;
$categoryId $category->virtuemart_category_id;
$products $productModel->getProductsInCategory($categoryId);
$productModel->addImages($products,1);
if ($products) {
$currency CurrencyDisplay::getInstance( );
$this->assignRef('currency'$currency);
}
                        
//&#1053;&#1072;&#1095;&#1080;&#1085;&#1072;&#1077;&#1084; &#1074;&#1099;&#1074;&#1086;&#1076; &#1090;&#1086;&#1074;&#1072;&#1088;&#1072;
foreach ($products as $product) {

// Show the horizontal seperator
if ($iBrowseCol == && $iBrowseProduct $BrowseProducts_per_row) {
?>

<div class="horizontal-separator"></div>
<?php
}

// this is an indicator wether a row needs to be opened or not
if ($iBrowseCol == 1) {
?>

<div class="row">
<?php
}

// Show the vertical seperator
if ($iBrowseProduct == $BrowseProducts_per_row or $iBrowseProduct $BrowseProducts_per_row == 0) {
$show_vertical_separator ' ';
} else {
$show_vertical_separator $verticalseparator;
}

// Show Products
?>

<div class="product floatleft<?php echo $Browsecellwidth $show_vertical_separator ?>">
<div class="spacer">
<div class="width100 floatleft center">

<h2><?php echo JHTML::link ($product->link$product->product_name); ?></h2>

<?php /** @todo make image popup */
if (!empty($product->product_s_desc)) {
echo $product->images[0]->displayMediaThumb ('class="browseProductImage" border="0" title="' shopFunctionsF::limitStringByWord ($product->product_s_desc100'...'). '" 'TRUE'class="modal"');
}else{
echo $product->images[0]->displayMediaThumb ('class="browseProductImage" border="0" title="' $product->product_name '" 'TRUE'class="modal"');
}
?>

<?php if ($this->showRating) { 
?>

<?php ?>

<?php
if (!VmConfig::get ('use_as_catalog') and !(VmConfig::get ('stockhandle''none') == 'none') && (VmConfig::get ('display_stock'1))) {
?>

<!-- if (!VmConfig::get('use_as_catalog') and !(VmConfig::get('stockhandle','none')=='none')){?> -->
<div class="paddingtop8">
<span class="vmicon vm2-<?php echo $product->stock->stock_level ?>" title="<?php echo $product->stock->stock_tip ?>"></span>
<span class="stock-level"><?php echo JText::('COM_VIRTUEMART_STOCK_LEVEL_DISPLAY_TITLE_TIP')?></span>
</div>
<?php }?>
</div>

<div class="width100 floatright center">

<?php // Product Short Description
if (!empty($product->product_s_desc)) {
?>

<!--<p class="product_s_desc">
<?php// echo shopFunctionsF::limitStringByWord ($product->product_s_desc, 40, '...')?>
</p>-->
<?php ?>

<div class="product-price marginbottom12" id="productPrice<?php echo $product->virtuemart_product_id ?>">
<?php
if ($this->show_prices == '1') {
if (empty($product->prices['salesPrice']) and VmConfig::get ('askprice'1) and  !$product->images[0]->file_is_downloadable) {
echo JText::('COM_VIRTUEMART_PRODUCT_ASKPRICE');
}
//todo add config settings
if ($this->showBasePrice) {
echo $this->currency->createPriceDiv ('basePrice''COM_VIRTUEMART_PRODUCT_BASEPRICE'$product->prices);
echo $this->currency->createPriceDiv ('basePriceVariant''COM_VIRTUEMART_PRODUCT_BASEPRICE_VARIANT'$product->prices);
}
echo $this->currency->createPriceDiv ('variantModification''COM_VIRTUEMART_PRODUCT_VARIANT_MOD'$product->prices);
echo '<span class="price-crossed" >' $this->currency->createPriceDiv ('basePriceWithTax''COM_VIRTUEMART_PRODUCT_BASEPRICE_WITHTAX'$product->prices). "</span>";
echo $this->currency->createPriceDiv ('salesPriceWithDiscount''COM_VIRTUEMART_PRODUCT_SALESPRICE_WITH_DISCOUNT'$product->prices);
echo $this->currency->createPriceDiv ('salesPrice''COM_VIRTUEMART_PRODUCT_SALESPRICE'$product->prices);
echo $this->currency->createPriceDiv ('discountAmount''COM_VIRTUEMART_PRODUCT_DISCOUNT_AMOUNT'$product->prices);
echo $this->currency->createPriceDiv ('taxAmount''COM_VIRTUEMART_PRODUCT_TAX_AMOUNT'$product->prices);

?>


</div>

<div>
<?php // Product Details Button
if (!empty($product->product_s_desc)) {
echo JHTML::link ($product->linkJText::('COM_VIRTUEMART_PRODUCT_DETAILS'), array('title' => shopFunctionsF::limitStringByWord ($product->product_s_desc100'...'), 'class' => 'product-details'));
}else{
echo JHTML::link ($product->linkJText::('COM_VIRTUEMART_PRODUCT_DETAILS'), array('title' => $product->product_name'class' => 'product-details'));
}

?>

</div>

</div>
<div class="clear"></div>
</div>
<!-- end of spacer -->
</div> <!-- end of product -->
<?php

// Do we need to close the current row now?
if ($iBrowseCol == $BrowseProducts_per_row || $iBrowseProduct == $BrowseTotalProducts) {
?>

<div class="clear"></div>
   </div> <!-- end of row -->
<?php
$iBrowseCol 1;
} else {
$iBrowseCol++;
}

$iBrowseProduct++;
// end of foreach ( $this->products as $product )
}
// &#1050;&#1086;&#1085;&#1077;&#1094; &#1074;&#1099;&#1074;&#1086;&#1076;&#1072; &#1090;&#1086;&#1074;&#1072;&#1088;&#1072; &#1080; &#1085;&#1072;&#1095;&#1072;&#1083;&#1086; &#1074;&#1099;&#1074;&#1086;&#1076;&#1072; &#1090;&#1086;&#1074;&#1072;&#1088;&#1072; &#1082;&#1072;&#1090;&#1077;&#1075;&#1086;&#1088;&#1080;&#1080;, &#1077;&#1089;&#1083;&#1080; &#1091; &#1085;&#1077;&#1077; &#1085;&#1077;&#1090; &#1087;&#1086;&#1076;&#1082;&#1072;&#1090;&#1077;&#1075;&#1086;&#1088;&#1080;&#1081;
} else {
foreach ($this->products as $product) {

// Show the horizontal seperator
if ($iBrowseCol == && $iBrowseProduct $BrowseProducts_per_row) {
?>

<div class="horizontal-separator"></div>
<?php
}

// this is an indicator wether a row needs to be opened or not
if ($iBrowseCol == 1) {
?>

<div class="row">
<?php
}

// Show the vertical seperator
if ($iBrowseProduct == $BrowseProducts_per_row or $iBrowseProduct $BrowseProducts_per_row == 0) {
$show_vertical_separator ' ';
} else {
$show_vertical_separator $verticalseparator;
}

// Show Products
?>

<div class="product floatleft<?php echo $Browsecellwidth $show_vertical_separator ?>">
<div class="spacer">
<div class="width100 floatleft center">

<h2><?php echo JHTML::link ($product->link$product->product_name); ?></h2>

<?php /** @todo make image popup */
if (!empty($product->product_s_desc)) {
echo $product->images[0]->displayMediaThumb ('class="browseProductImage" border="0" title="' shopFunctionsF::limitStringByWord ($product->product_s_desc100'...'). '" 'TRUE'class="modal"');
}else{
echo $product->images[0]->displayMediaThumb ('class="browseProductImage" border="0" title="' $product->product_name '" 'TRUE'class="modal"');
}
?>

<?php if ($this->showRating) { 
?>

<?php ?>

<?php
if (!VmConfig::get ('use_as_catalog') and !(VmConfig::get ('stockhandle''none') == 'none') && (VmConfig::get ('display_stock'1))) {
?>

<!-- if (!VmConfig::get('use_as_catalog') and !(VmConfig::get('stockhandle','none')=='none')){?> -->
<div class="paddingtop8">
<span class="vmicon vm2-<?php echo $product->stock->stock_level ?>" title="<?php echo $product->stock->stock_tip ?>"></span>
<span class="stock-level"><?php echo JText::('COM_VIRTUEMART_STOCK_LEVEL_DISPLAY_TITLE_TIP')?></span>
</div>
<?php }?>
</div>

<div class="width100 floatright center">

<?php // Product Short Description
if (!empty($product->product_s_desc)) {
?>

<!--<p class="product_s_desc">
<?php// echo shopFunctionsF::limitStringByWord ($product->product_s_desc, 40, '...')?>
</p>-->
<?php ?>

<div class="product-price marginbottom12" id="productPrice<?php echo $product->virtuemart_product_id ?>">
<?php
if ($this->show_prices == '1') {
if (empty($product->prices['salesPrice']) and VmConfig::get ('askprice'1) and  !$product->images[0]->file_is_downloadable) {
echo JText::('COM_VIRTUEMART_PRODUCT_ASKPRICE');
}
//todo add config settings
if ($this->showBasePrice) {
echo $this->currency->createPriceDiv ('basePrice''COM_VIRTUEMART_PRODUCT_BASEPRICE'$product->prices);
echo $this->currency->createPriceDiv ('basePriceVariant''COM_VIRTUEMART_PRODUCT_BASEPRICE_VARIANT'$product->prices);
}
echo $this->currency->createPriceDiv ('variantModification''COM_VIRTUEMART_PRODUCT_VARIANT_MOD'$product->prices);
echo '<span class="price-crossed" >' $this->currency->createPriceDiv ('basePriceWithTax''COM_VIRTUEMART_PRODUCT_BASEPRICE_WITHTAX'$product->prices). "</span>";
echo $this->currency->createPriceDiv ('salesPriceWithDiscount''COM_VIRTUEMART_PRODUCT_SALESPRICE_WITH_DISCOUNT'$product->prices);
echo $this->currency->createPriceDiv ('salesPrice''COM_VIRTUEMART_PRODUCT_SALESPRICE'$product->prices);
echo $this->currency->createPriceDiv ('discountAmount''COM_VIRTUEMART_PRODUCT_DISCOUNT_AMOUNT'$product->prices);
echo $this->currency->createPriceDiv ('taxAmount''COM_VIRTUEMART_PRODUCT_TAX_AMOUNT'$product->prices);

?>


</div>

<div>
<?php // Product Details Button
if (!empty($product->product_s_desc)) {
echo JHTML::link ($product->linkJText::('COM_VIRTUEMART_PRODUCT_DETAILS'), array('title' => shopFunctionsF::limitStringByWord ($product->product_s_desc100'...'), 'class' => 'product-details'));
}else{
echo JHTML::link ($product->linkJText::('COM_VIRTUEMART_PRODUCT_DETAILS'), array('title' => $product->product_name'class' => 'product-details'));
}

?>

</div>

</div>
<div class="clear"></div>
</div>
<!-- end of spacer -->
</div> <!-- end of product -->
<?php

// Do we need to close the current row now?
if ($iBrowseCol == $BrowseProducts_per_row || $iBrowseProduct == $BrowseTotalProducts) {
?>

<div class="clear"></div>
   </div> <!-- end of row -->
<?php
$iBrowseCol 1;
} else {
$iBrowseCol++;
}

$iBrowseProduct++;
// end of foreach ( $this->products as $product )
}
// Do we need a final closing row tag?
if ($iBrowseCol != 1) {
?>

<div class="clear"></div>

<?php
}
?>

</div>
<div class="vm-pagination"><?php echo $this->vmPagination->getPagesLinks (); ?><span style="float:right"><?php echo $this->vmPagination->getPagesCounter (); ?></span></div>

<?php
//} elseif ($this->search !== NULL) {
// echo JText::_ ('COM_VIRTUEMART_NO_RESULT'). ($this->keyword ? ' : (' . $this->keyword . ')' : '');
//}
?>

</div><!-- end browse-view -->
<?php //}
?>
С таким файлом вывода товаров в категориях, отпадает дублирование товара и ссылка валидная и не надо назначать принадлежность к родительской категории. Еще раз повторюсь, что это сырец, а не готовое решение. Кто заинтересован, присоединяйтесь к разработке. Решение найду не скоро, т.к. катастрофически нет времени. Занят, но решение задачи найти необходимо.
« Последнее редактирование: 23.03.2013, 00:32:03 от Tuzemec »
Каждый ваш клик помогает заработать сыну на конфеты
Не дайте ребенку остаться без сладкого! Сделай ТЫЦ!


*

Оффлайн Tuzemec

http://extensions.joomla.org/extensions/extension-specific/virtuemart-extensions/virtuemart-categories/23074
Вроде как некое решение проблемы.
На форуме рабочее решение без установки плагинов и модулей есть. Смотреть здесь
Каждый ваш клик помогает заработать сыну на конфеты
Не дайте ребенку остаться без сладкого! Сделай ТЫЦ!

перед
<div class="browse-view">добавить код
<?php
if (!empty($this->category->children)) {
$db=&JFactory::getDBO();
$cats=array();
foreach($this->category->children AS $cat$cats[]=$cat->virtuemart_category_id;
$db->setQuery('SELECT virtuemart_product_id FROM #__virtuemart_product_categories WHERE virtuemart_category_id IN ('.implode(',',$cats).')');
$productModel VmModel::getModel('product');
$this->products $productModel->getProducts (array_keys($db->loadObjectlist('virtuemart_product_id')));
$productModel->addImages($this->products,1);
}
?>
будут выведены товары из подкатегорий, если нужно, чтобы выводились и из текущей, то можно перед
$db->setQuery(...добавить
$cats[]=JRequest::getVar('virtuemart_category_id');
этот хак предназначен для внедрения в шаблон, чтобы можно и дальше спокойно обновлять версию VM и при этом ничего не упало)
оптимизировать код можете как угодно по своему усмотрению) он точно рабочий, тестировался на VM 2.0.26d

*

Оффлайн NeuroZ

  • ***
  • 129
  • [+]0 / [-]0
  • Разработка сайтов и J! расширений под ключ
    • Просмотр профиля
sasha8888 показал наиболее приемлемый выход из ситуации. По аналогии можно сделать и в VM3 только там будет отличаться вызов $productModel (там через subLayout завязаны).
Но у этого метода также есть 2 минус: дополнительные запросы к бд и отсутствие выборки подподкатегорий.
Если пренебречь первым, то выборку подподкатегорий и т.п. нужно осуществлять с помощью рекурсивной функции, в которую нужно заключить код выборки.

Но лично по мне - то столько запросов быть не должно, а поэтому в БД сразу должны хранится нужные соответствия (как d0ublezer0 указал в своем сообщении в верху темы).
Но при большом кол-ве товаров приходим к выводу, что нужен всё же модернизированный хак, который предложил stepka. Единственное почему не рекомендую его решение - оно не Joomla-ориентированное. И + не оптимизированный код. Поэтому предлагаю (кому интересно, но не знает куда копать) создать плагин опираясь на код stepka , в котором была бы кнопка "вкл/выкл" связи товаров подкатегорий с категориями-родителями. Смысл кнопки - просто добавить в таблицу связей товар-категория все возможные варианты связей этих товаров с родительскими категориями. Кроме того все добавленные связи записать также в отдельную таблицу (на случай если понадобиться их выключить), тогда по клике на кнопке "выкл" можно выбрать удалить все связи созданные плагином, оставив в не тронутыми связи созданные пользователем в ручную.
<h1 id="h2" class="h3" data-h4="h5"> или как заставить мир тебя ненавидеть

*

Оффлайн neogeek

Есть же уже давно решение для VM2 и для VM3 - http://joomlaforum.ru/index.php/topic,221593.msg1548732.html