Форум русской поддержки Joomla!® CMS
10.12.2016, 16:44:41 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

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

 (Прочитано 7542 раз)
0 Пользователей и 1 Гость смотрят эту тему.
cyberj
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Сообщений: 19


« : 12.04.2012, 13:17:33 »

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

Репутация: +29/-0
Offline Offline

Сообщений: 317

Javaхарлал Неру


« Ответ #1 : 05.05.2012, 10:16:41 »

Самый простой способ - без хаков.
Товарам из подкатегорий добавить принадлежность к родительским категориям (спасибо gruz за совет).
Записан
usbmaster
Новичок
*

Репутация: +0/-0
Offline Offline

Сообщений: 4

http://usbmaster.ru


« Ответ #2 : 06.05.2012, 10:21:07 »

Самый простой способ - без хаков.
Товарам из подкатегорий добавить принадлежность к родительским категориям (спасибо gruz за совет).
эт конечно просто а что делать если товаров более 1000?
Записан
Tuzemec
Давно я тут
****

Репутация: +25/-0
Offline Offline

Пол: Мужской
Сообщений: 220


Ня!


« Ответ #3 : 10.05.2012, 10:03:37 »

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

А в общем лучше способом что в 4-ом ответе... хоть и товара 1000, зато как потом всё чудесно
« Последнее редактирование: 10.05.2012, 10:10:25 от Tuzemec » Записан
d0ublezer0
Давно я тут
****

Репутация: +29/-0
Offline Offline

Сообщений: 317

Javaхарлал Неру


« Ответ #4 : 18.05.2012, 15:44:08 »

эт конечно просто а что делать если товаров более 1000?
Тогда CSVI
Бесплатно, но требуется регистрация.
Записан
stepka
Новичок
*

Репутация: +0/-0
Offline Offline

Сообщений: 1


« Ответ #5 : 20.05.2012, 16:06:58 »

Прилагаю написанный мной скриптег, который обходит товары, добавляет вывод из подкатегорий в родительские.
Кстати суффиксы не забудте исправить у таблиц.
<?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, 17:40:14 от stepka » Записан
indigo
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Сообщений: 73


« Ответ #6 : 10.01.2013, 12:23:11 »

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

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

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

Репутация: +25/-0
Offline Offline

Пол: Мужской
Сообщений: 220


Ня!


« Ответ #7 : 21.03.2013, 21:08:15 »

Это же сделает дубль каждого товара, выходит: 2 абсолютно одиннаковых товара будут в магазине под двумя разными url
В общем есть примерно похожая тема, но там задачу решали с выводом в файл. Там есть файл вывода всех категорий и товара на страницу. В общем думаю от него поплясать с бубном можно.
Записан
Tuzemec
Давно я тут
****

Репутация: +25/-0
Offline Offline

Пол: Мужской
Сообщений: 220


Ня!


« Ответ #8 : 22.03.2013, 21:00:33 »

В общем есть примерно похожая тема, но там задачу решали с выводом в файл. Там есть файл вывода всех категорий и товара на страницу. В общем думаю от него поплясать с бубном можно.
Колдовал весь вечер и пришел к выводу что нет ничего невозможного.
В общем, вывести товар из подкатегорий в родительскую можно без добавления принадлежности товара к родительской путем изменения кода  в шаблоне 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);

// Подключаем обработчик модели товара
$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 == 1 && $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
                // Вырубаем условие проверки наличия товара в родительской категории
//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++;
}

//Проверяем является ли категория родительской
if (!empty($this->category->children)) {
foreach ($this->category->children as $category) {
// Start the Output
// Переназначаем переменные согласно требованиям текущей подкатегории
$categoryId = $category->virtuemart_category_id;
$products = $productModel->getProductsInCategory($categoryId);
$productModel->addImages($products,1);
if ($products) {
$currency = CurrencyDisplay::getInstance( );
$this->assignRef('currency', $currency);
}
                        //Начинаем вывод товара
foreach ($products as $product) {

// Show the horizontal seperator
if ($iBrowseCol == 1 && $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_desc, 100, '...'). '" ', 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->link, JText::_ ('COM_VIRTUEMART_PRODUCT_DETAILS'), array('title' => shopFunctionsF::limitStringByWord ($product->product_s_desc, 100, '...'), 'class' => 'product-details'));
}else{
echo JHTML::link ($product->link, JText::_ ('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 )
}
// Конец вывода товара и начало вывода товара категории, если у нее нет подкатегорий
} else {
foreach ($this->products as $product) {

// Show the horizontal seperator
if ($iBrowseCol == 1 && $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_desc, 100, '...'). '" ', 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->link, JText::_ ('COM_VIRTUEMART_PRODUCT_DETAILS'), array('title' => shopFunctionsF::limitStringByWord ($product->product_s_desc, 100, '...'), 'class' => 'product-details'));
}else{
echo JHTML::link ($product->link, JText::_ ('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 //}
?>
С таким файлом вывода товаров в категориях, отпадает дублирование товара и ссылка валидная и не надо назначать принадлежность к родительской категории. Еще раз повторюсь, что это сырец, а не готовое решение. Кто заинтересован, присоединяйтесь к разработке. Решение найду не скоро, т.к. катастрофически нет времени. Занят, но решение задачи найти необходимо.
« Последнее редактирование: 22.03.2013, 22:32:03 от Tuzemec » Записан
Fector
Новичок
*

Репутация: +0/-0
Offline Offline

Сообщений: 2


« Ответ #9 : 18.04.2013, 12:28:41 »

http://extensions.joomla.org/extensions/extension-specific/virtuemart-extensions/virtuemart-categories/23074
Вроде как некое решение проблемы.
Записан
Tuzemec
Давно я тут
****

Репутация: +25/-0
Offline Offline

Пол: Мужской
Сообщений: 220


Ня!


« Ответ #10 : 22.04.2013, 14:52:58 »

http://extensions.joomla.org/extensions/extension-specific/virtuemart-extensions/virtuemart-categories/23074
Вроде как некое решение проблемы.
На форуме рабочее решение без установки плагинов и модулей есть. Смотреть здесь
Записан
sasha8888
Осваиваюсь на форуме
***

Репутация: +4/-0
Offline Offline

Пол: Мужской
Сообщений: 48



« Ответ #11 : 15.03.2014, 14:12:41 »

перед
Код:
<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
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Пол: Мужской
Сообщений: 129


Разработка сайтов и J! расширений под ключ


« Ответ #12 : 12.05.2015, 17:28:13 »

sasha8888 показал наиболее приемлемый выход из ситуации. По аналогии можно сделать и в VM3 только там будет отличаться вызов $productModel (там через subLayout завязаны).
Но у этого метода также есть 2 минус: дополнительные запросы к бд и отсутствие выборки подподкатегорий.
Если пренебречь первым, то выборку подподкатегорий и т.п. нужно осуществлять с помощью рекурсивной функции, в которую нужно заключить код выборки.

Но лично по мне - то столько запросов быть не должно, а поэтому в БД сразу должны хранится нужные соответствия (как d0ublezer0 указал в своем сообщении в верху темы).
Но при большом кол-ве товаров приходим к выводу, что нужен всё же модернизированный хак, который предложил stepka. Единственное почему не рекомендую его решение - оно не Joomla-ориентированное. И + не оптимизированный код. Поэтому предлагаю (кому интересно, но не знает куда копать) создать плагин опираясь на код stepka , в котором была бы кнопка "вкл/выкл" связи товаров подкатегорий с категориями-родителями. Смысл кнопки - просто добавить в таблицу связей товар-категория все возможные варианты связей этих товаров с родительскими категориями. Кроме того все добавленные связи записать также в отдельную таблицу (на случай если понадобиться их выключить), тогда по клике на кнопке "выкл" можно выбрать удалить все связи созданные плагином, оставив в не тронутыми связи созданные пользователем в ручную.
Записан
neogeek
Давно я тут
****

Репутация: +18/-2
Offline Offline

Сообщений: 212


« Ответ #13 : 12.05.2015, 19:05:12 »

Есть же уже давно решение для VM2 и для VM3 - http://joomlaforum.ru/index.php/topic,221593.msg1548732.html
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet