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

xlite

  • Захожу иногда
  • 65
  • 5 / 0
Сталкнулся с таким требованием заказчика .. а именно вывести все товары в главную категорию crazy! ..  Для VirtueMart 1.1.* решение известно
для второго же нет ..
Есть одна тема которая поднята на буржуйском сайте, но у меня она не работает ..
http://forum.virtuemart.net/index.php?topic=97874.0

Может кто то разберется.. Потому что тема полезная и важная для всех.
*

vitoxa_ya

  • Осваиваюсь на форуме
  • 12
  • 4 / 0
Смотри вот эту тему http://joomlaforum.ru/index.php/topic,221276.0.html
всё по аналогии только править файл нужно   default.php   по адресу ваш_сайт\components\com_virtuemart\views\categories\tmpl
отключаешь фильтр ($filter_category = false;) должно вывести все товары.
*

stincv

  • Новичок
  • 8
  • 2 / 0
Сталкнулся с таким требованием заказчика .. а именно вывести все товары в главную категорию crazy! ..  Для VirtueMart 1.1.* решение известно
для второго же нет ..
Есть одна тема которая поднята на буржуйском сайте, но у меня она не работает ..
http://forum.virtuemart.net/index.php?topic=97874.0

Может кто то разберется.. Потому что тема полезная и важная для всех.

На форуме, указанном Вами решение действительно рабочее для версии VirtueMart 2.
Напишу здесь то же самое, только на русском :)

1. Находим в файле \administrator\components\com_virtuemart\models\product.php функцию:
Код
function setKeyWord ($keyword) {                                                                                      
                                                                                                                             
                $this->keyword = $keyword;                                                                                   
        }
и после нее вставляем свою функцию:
Код
function untreeCat($vm_catid, &$ccont){                                                                                       
   $dbx = JFactory::getDBO();                                                                                                 
   $q = 'SELECT `category_child_id` FROM `#__virtuemart_category_categories` WHERE `category_parent_id`="'.$vm_catid.'"';     
   $dbx->setQuery($q);                                                                                                       
   $dby = $dbx->query();                                                                                                     
   if (!$dby->num_rows) {                                                                                                     
      return;                                                                                                                 
   } else {                                                                                                                   
        while($tt = $dby->fetch_row()) {                                                                                     
           array_push($ccont, $tt[0]);                                                                                       
           $kat = $tt[0];                                                                                                     
           $this->untreeCat($kat, $ccont);                                                                                   
       }                                                                                                                     
    }                                                                                                                         
}                                                                                                                             

2. Находим здесь же блок с проверкой:
Код
if ($virtuemart_category_id > 0) {                                                                              
                      $joinCategory = TRUE;                                                                                   
                      $where[] = ' `#__virtuemart_product_categories`.`virtuemart_category_id` = ' . $virtuemart_category_id;
              }
и заменяем его на :
Код
if ($virtuemart_category_id>0){                                                                                               
   $joinCategory = true ;                                                                                                     
$catscont = array();                                                                                                         
       $this->untreeCat($virtuemart_category_id, $catscont);                                                                 
       $qkat = ' `#__virtuemart_product_categories`.`virtuemart_category_id` IN('.$virtuemart_category_id;                   
       foreach ($catscont as &$kat){                                                                                         
           $qkat .= ', '.$kat;                                                                                               
       }                                                                                                                     
       $qkat .= ')';                                                                                                         
       $where[] = $qkat;                                                                                                     
}                                                                                                                             
3. Наслаждаемся результатом.

ЗЫ: модераторам можно вынести тему в частые вопросы по VirtueMart 2 , т.к. данное решение 100% рабочее, да и людям будет быстрее искать - тема то актуальная.
*

Stake1988

  • Захожу иногда
  • 66
  • 0 / 0
Я так понимаю всё это при первом же обновлении ВМ2 потрётся? Можно каким-либо образом оградиться от подобного?
*

cyberj

  • Осваиваюсь на форуме
  • 19
  • 0 / 0
Я так понимаю всё это при первом же обновлении ВМ2 потрётся? Можно каким-либо образом оградиться от подобного?

Нужно перекрыть файл пользовательским, про перекрытие я уже писал, повторюсь ещё раз: www.ваш_сайт\components\com_virtuemart\views\virtuemart\tmpl копируем файл default_categories.php в папку templates\ваш_шаблон\html\com_virtuemart\virtuemart - этот файл будет перекрывать собой одноимённый...
*

jiammer

  • Новичок
  • 1
  • 0 / 0
stincv, спасибо. Все действительно работает.
(joomla 2.5.8 + VirtueMart 2.0.14)
*

biohan

  • Захожу иногда
  • 56
  • 0 / 0
Joomla 2.5.8 и vm 2.0.16 не работает
*

Romaha

  • Захожу иногда
  • 56
  • 1 / 0
Joomla 2.5.7 и vm 2.0.16. У меня тоже не работает
*

Darkman

  • Осваиваюсь на форуме
  • 25
  • 0 / 0
Joomla 2.5.7, vm 2.0.18a решения к сожалению так и нет, на буржуйском форуме выложили плагин, он тоже не работает.
*

itckarpatia

  • Захожу иногда
  • 152
  • 4 / 0
Обновил к 2.018 на свою голову, не работает как вывод из категорий так и навигация по товарам, хотя если заменить файл \administrator\components\com_virtuemart\models\product.php от 2.0.14 - работает,  но при переходе в корзину белый экран !
*

art-apple

  • Захожу иногда
  • 386
  • 61 / 2
Все работает и на 2.0.18, просто нужно немного головой думать
операции теже проделываем только вместо #__virtuemart_product_categories пишем - pc
*

art-apple

  • Захожу иногда
  • 386
  • 61 / 2
Т.е. вот такая строка должна быть
Код
$qkat = ' `pc`.`virtuemart_category_id` IN('.$virtuemart_category_id;
а не
Код
$qkat = ' `#__virtuemart_product_categories`.`virtuemart_category_id` IN('.$virtuemart_category_id;
*

Tuzemec

  • Захожу иногда
  • 246
  • 28 / 0
  • Ня!
Т.е. вот такая строка должна быть
Код
$qkat = ' `pc`.`virtuemart_category_id` IN('.$virtuemart_category_id;
а не
Код
$qkat = ' `#__virtuemart_product_categories`.`virtuemart_category_id` IN('.$virtuemart_category_id;
Подтверждаю. НЕ РАБОТАЕТ. Версия Joomla! 2.5.9 + VM 2.0.20b. Результат нулевой. Как не выводил товар так и не выводит.
 А вот у меня другой способ в голове зреет. Без изменения самой модели VM. Как вывести весь товар в нулевую категорию здесь.
А вот как вывести товары из подкатегорий в родительскую набросок здесь. Подключайтесь к поиску решений. Для ленивых тыкать ссылки продублирую сообщение из соседней темы...

Колдовал весь вечер и пришел к выводу что нет ничего невозможного.
В общем, вывести товар из подкатегорий в родительскую можно без добавления принадлежности товара к родительской путем изменения кода  в шаблоне 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 //}
?>
С таким файлом вывода товаров в категориях, отпадает дублирование товара и ссылка валидная и не надо назначать принадлежность к родительской категории. Еще раз повторюсь, что это сырец, а не готовое решение. Кто заинтересован, присоединяйтесь к разработке. Решение найду не скоро, т.к. катастрофически нет времени. Занят, но решение задачи найти необходимо.
« Последнее редактирование: 23.03.2013, 15:57:45 от Tuzemec »
Каждый ваш клик помогает заработать сыну на конфеты
Не дайте ребенку остаться без сладкого! Сделай ТЫЦ!
*

art-apple

  • Захожу иногда
  • 386
  • 61 / 2
Tuzemec, вы уж извините, но у вас кривые руки наверно либо невнимательность. Все работает, завтра дам ссылку на сайт, где это реализовано и опишу действия.
*

Tuzemec

  • Захожу иногда
  • 246
  • 28 / 0
  • Ня!
Tuzemec, вы уж извините, но у вас кривые руки наверно либо невнимательность. Все работает, завтра дам ссылку на сайт, где это реализовано и опишу действия.
Ну где ссылка то?
Каждый ваш клик помогает заработать сыну на конфеты
Не дайте ребенку остаться без сладкого! Сделай ТЫЦ!
*

art-apple

  • Захожу иногда
  • 386
  • 61 / 2
Времени совсем не было, вот - http://айстрой.рф
Как это реализовано:
идем сюда - /administrator/components/com_virtuemart/models/product.php

Добавляем
Код
function untreeCat($vm_catid, &$ccont){
        $db = JFactory::getDBO();
        $query = 'SELECT `category_child_id` FROM `#__virtuemart_category_categories` WHERE `category_parent_id`="'.$vm_catid.'"';
        $db->setQuery($query);
        $db->query();       
        $rows = $db->loadRowList();
        if (empty($rows))    {
            return;
        } else {           
            foreach($rows as $row) {
                array_push($ccont, $row[0]);
                $kat = $row[0];
                $this->untreeCat($kat, $ccont);               
            }
        }
    }
сразу после строки
Код
class VirtueMartModelProduct extends VmModel {

в этом же файле ищем (у меня 309 строка)
Код
			if ($virtuemart_category_id > 0) {
$joinCategory = TRUE;
$where[] = ' `pc`.`virtuemart_category_id` = ' . $virtuemart_category_id;
}
меняем на
Код
if ($virtuemart_category_id > 0) {
   $joinCategory = true ;
   $catscont = array();
   $this->untreeCat($virtuemart_category_id, $catscont);
   $qkat = ' `pc`.`virtuemart_category_id` IN('.$virtuemart_category_id;
    foreach ($catscont as &$kat){
       $qkat .= ', '.$kat;
    }       
    $qkat .= ')';
    $where[] = $qkat;
}
далее ищем (у меня 1928 строка)
Код
if ($virtuemart_category_id) {
    $query .= ' AND c.`virtuemart_category_id` =' . (int)$virtuemart_category_id;
}
меняем на
Код
if ($virtuemart_category_id) {
    $catscont = array();
    $this->untreeCat($virtuemart_category_id, $catscont);
    $qkat = ' AND c.`virtuemart_category_id` IN('.$virtuemart_category_id;
    foreach ($catscont as &$kat){
       $qkat .= ', '.$kat;
    }       
    $qkat .= ')';
    $query .= $qkat;
}
   


Проделал это только что на VirtueMart 2.0.20b
Товары из подкатегорий теперь выводятся в родительской категории
Можно еще сортировку товаров в этом случае сделать по категориям, это опишу позже.
*

mamzt1

  • Новичок
  • 4
  • 0 / 0
art-apple, подскажите, пожалуйста, а как сделать  такое  меню, как на Вашем сайте - http://айстрой.рф.
Я имею ввиду каталог товаров в виде  проводника.
Вы использовали  модуль  для VirtueMart 2.0.20b или это  меню Joomla + нужные стили?
Уже измоталась в поисках такого модуля для VirtueMart 2 - не могу найти...
Заранее спасибо  за ответ

*

art-apple

  • Захожу иногда
  • 386
  • 61 / 2
Это стандартный модуль VirtueMart, естественно немного переписан шаблон вывода модуля и написаны стили.
*

mamzt1

  • Новичок
  • 4
  • 0 / 0
Я прошу прощенье  за назойливость,  но  как называется  этот модуль  для VirtueMart 2?
Для VirtueMart 1х  - при скачивании  компонента  шла специальная папка modules - там был  модуль  mod_product_categories_1.1.9.j15.zip (например).
А где можно  взять  такой модуль  для  VirtueMart 2.  При скачивании VirtueMart 2  модули не идут в комплекте.
 Или у меня не полная версия и его надо скачивать  отдельно?
Подскажите, пожалуйста, где найти  этот модуль  для VirtueMart 2.
Заранее спасибо.

*

art-apple

  • Захожу иногда
  • 386
  • 61 / 2
Смотрите на официальном сайте, http://dev.virtuemart.net/attachments/download/596/com_virtuemart.2.0.20b_extract_first.targz.zip - последняя версия на сегодня
Скачиваете распаковываете, там 2 пакета установки, устанавливаете оба и будут у вас все модули и плагины. В том числе и - mod_virtuemart_category
*

Tuzemec

  • Захожу иногда
  • 246
  • 28 / 0
  • Ня!
Времени совсем не было, вот - http://айстрой.рф
Как это реализовано:
Спасибо! Сработало! Видимо вся запара была с местом вставки функции untreeCat. Единственное что напрягает так это то, что после обновления все изменения делать заново придется... =(
Каждый ваш клик помогает заработать сыну на конфеты
Не дайте ребенку остаться без сладкого! Сделай ТЫЦ!
*

SteelBear

  • Осваиваюсь на форуме
  • 12
  • 0 / 0
VirtueMart 2.0.18b
функцию вставил как есть, а if немного пришлось подправить. если кому нужно

Код
			if ($virtuemart_category_id) {
$joinCategory = TRUE; //нужно иначе в админке будет ошибку при использовании фильтра писать
$catscont = array();
$this->untreeCat($virtuemart_category_id, $catscont);
$qkat = ' pc.`virtuemart_category_id` IN('.$virtuemart_category_id;
foreach ($catscont as &$kat){
$qkat .= ', '.$kat;
}        
$qkat .= ')';
$where[] = $qkat;
}
« Последнее редактирование: 11.04.2013, 17:39:47 от SteelBear »
*

Yodalife

  • Новичок
  • 8
  • 0 / 0
Времени совсем не было, вот - http://айстрой.рф
Как это реализовано:
...
Класс, заработало! Выводит подкатегории, но если много товаров в подкатегориях, то выдает ошибку по таймауту ;-(
Можно ли как ни будь ограничить вывод, например, не выводить товары самой верхней категории(где много подкатегорий)? Или, выводить товары, если в категории, не более 5(любое число) подкатегорий?
Проверял на VirtueMart 2.0.20b
*

web11

  • Захожу иногда
  • 58
  • 1 / 0
спасибо за рабочее решение!
*

Tuzemec

  • Захожу иногда
  • 246
  • 28 / 0
  • Ня!
После обновления до версии 2.0.22a и внесения вышеуказанных изменений перестал работать лимит вывода товара на странице. Возможно из-за того, что в таблице категории появились изменения?

ЗЫ: С лимитом разобрался... в таблице суффикс_virtuemart_categories поправил значение поля limit_list_step  таким запросом в базе
Код
UPDATE  `database`.`suffix_virtuemart_categories` SET  `limit_list_step` =  '10,20,30,40,50,60,70,80,90,100'; 

Но при показе некоторых товаров в категориях выдает фатальную ошибку memory_limit. Матерится то на custom_fields, то на вычисление стоимости товара... В чем может быть проблема?

ЗЗЫ: После снятия с публикации всех "Настраиваемых полей" и повторной их публикации, матершина на custom_fields пропала. Сайт работает в прежнем режиме, без сбоев на VM 2.0.22a
« Последнее редактирование: 05.08.2013, 16:05:54 от Tuzemec »
Каждый ваш клик помогает заработать сыну на конфеты
Не дайте ребенку остаться без сладкого! Сделай ТЫЦ!
*

ChaosHead

  • Гуру
  • 5242
  • 451 / 13
Отлично заработал вариант art-apple
*

olf

  • Захожу иногда
  • 360
  • 5 / 1
Это всё хорошо, но товар-то выводится без сортировки по подкатегориям. А как сделать вывод в виде дерева?

Категория
    подкатегория 1
         -товар1
         -товар2
         ...
    подкатегория 2
         -товар1
         -товар2
         ...
    подкатегория 3
         -товар1
         -товар2
         ...
*

rtsasuk

  • Новичок
  • 1
  • 0 / 0
Супер решения! Пользовался им до того времени пока не столкнулся с проблемой дублей для SEO
эта штука делает дубли товары выходит можна попасть и по категории и по подкатегории!
Скажите это верное мнения? Может кто то сталкивался с этим?
*

Максим Пишняк

  • Давно я тут
  • 837
  • 35 / 0
Вы не искали уже сделанное решение для дерева по форумам?

На счет дублей - как обстоят в "дублях" дело с атрибутом canonical?
*

plitochnik77

  • Новичок
  • 2
  • 1 / 0
Это всё хорошо, но товар-то выводится без сортировки по подкатегориям. А как сделать вывод в виде дерева?

Категория
    подкатегория 1
         -товар1
         -товар2
         ...
    подкатегория 2
         -товар1
         -товар2
         ...
    подкатегория 3
         -товар1
         -товар2
         ...

Есть решение на сайте:http://kitoraga.com/blog/vyvodim-tovary-v-virtuemart-2-iz-kategori-i-podkategorij-odnim-spiskom.html
Спасибо автору! Virt 2.0.18a работает. Но есть необходимость вывести под названием категории ее картинку и описание. Если кто знает-Напишите.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Как сделать товары в 2 колонки в моб версии?

Автор art22

Ответов: 4
Просмотров: 1069
Последний ответ 06.12.2022, 11:42:56
от art22
Как пересохранить все товары?

Автор stydent

Ответов: 1
Просмотров: 1705
Последний ответ 30.03.2022, 10:38:06
от itpremium
mod_virtuemart_product - как скрыть товары, которых нет в наличии?

Автор alexfom_16

Ответов: 40
Просмотров: 4366
Последний ответ 11.10.2021, 17:50:38
от hmr
Приоритетный Itemid для формирования ссылок на товары/категории

Автор rsn

Ответов: 2
Просмотров: 539
Последний ответ 10.03.2020, 08:21:45
от rsn
Вывести изображения товара в центре

Автор ROMERO

Ответов: 2
Просмотров: 594
Последний ответ 08.06.2019, 16:12:49
от draff