VM 2.x Сортировка отсутствующих товаров в категории

Я еще в октябре писала, но,наверное, никто не удосужился заглянуть в /administrator/components/com_virtuemart/models/product.php и заменить пару строчек)
Заходите в /administrator/components/com_virtuemart/models/product.php
Ищите функцию sortSearchListQuery. Везде меняете значение переменной $orderBy. Например, вместо $orderBy = 'ORDER BY p.`product_special`'; надо писать $orderBy = 'ORDER BY p.`product_in_stock` DESC, p.`product_special`';Я не проверяла, но должно сработать
 
Я еще в октябре писала, но,наверное, никто не удосужился заглянуть в /administrator/components/com_virtuemart/models/product.php и заменить пару строчек)
Пробовал ваш вариант, ничего не вышло. Буду пробовать предложенный Genk0. Спасибо за наводку.
 
Вариант скинутый Genk0 из форума Для просмотра ссылки Войди или Зарегистрируйся рабочий.

По поводу доп. настройки сортировки:
1. Сделать все необходимые манипуляции в файле administrator/components/com_virtuemart/models/product.php
2. Количество товаров (которые есть в наличии) всегда должно быть одинаковым. Например 100 шт. (это не важно), важно то если количество будет разным в приоритете будет сортировка по количеству на складе, а затем уже ваши параметры сортировок

Вопрос: Подскажите кто знает как в место цены написать "Нет в наличии" (в выводе товаров в категориях, карточке товаров и в других модулях) у отсутствующих товаров?
 
Вариант скинутый Genk0 из форума Для просмотра ссылки Войди или Зарегистрируйся рабочий.

По поводу доп. настройки сортировки:
1. Сделать все необходимые манипуляции в файле administrator/components/com_virtuemart/models/product.php
2. Количество товаров (которые есть в наличии) всегда должно быть одинаковым. Например 100 шт. (это не важно), важно то если количество будет разным в приоритете будет сортировка по количеству на складе, а затем уже ваши параметры сортировок

Вопрос: Подскажите кто знает как в место цены написать "Нет в наличии" (в выводе товаров в категориях, карточке товаров и в других модулях) у отсутствующих товаров?

Отсутствующий товар - это тот, у которого количество на складе равно нулю? Я не стал заморачиваться с ценой, а обернул кнопку условием. Получилось примерно так:
Код:
<?php if($product->product_in_stock>0) { ?>
<form method="post" class="product" action="index.php" id="addtocartproduct<?php echo $product->virtuemart_product_id ?>">
   <div class="addtocart-bar1">

         <?php // Display the quantity box ?>
         <!-- <label for="quantity<?php echo $product->virtuemart_product_id;?>" class="quantity_box"><?php echo JText::_('COM_VIRTUEMART_CART_QUANTITY'); ?>: </label> -->
         <span class="quantity-box" style="display:none">
            <input  type="text" class="quantity-input" name="quantity[]" value="1" />
         </span>
         <span class="quantity-controls" style="display:none">
            <input type="button" class="quantity-controls quantity-plus" />
            <input type="button" class="quantity-controls quantity-minus" />
         </span>
         <?php // Display the quantity box END ?>

         <?php // Add the button
         $button_lbl = JText::_('COM_VIRTUEMART_CART_ADD_TO');
         $button_cls = ''; //$button_cls = 'addtocart_button';
         if (VmConfig::get('check_stock') == '1' && !$product->product_in_stock) {
            $button_lbl = JText::_('COM_VIRTUEMART_CART_NOTIFY');
            $button_cls = 'notify-button';
         } ?>

         <?php // Display the add to cart button ?>
         <span class="addtocart-button">
            <input type="submit" name="addtocart"  class="addtocart-button" value="<?php echo $button_lbl ?>" title="<?php echo $button_lbl ?>" />
         </span>

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

      <?php // Display the add to cart button END ?>
      <input type="hidden" class="pname" value="<?php echo $product->product_name ?>">
      <input type="hidden" name="option" value="com_virtuemart" />
      <input type="hidden" name="view" value="cart" />
      <noscript><input type="hidden" name="task" value="add" /></noscript>
      <input type="hidden" name="virtuemart_product_id[]" value="<?php echo $product->virtuemart_product_id ?>" />
      <?php /** @todo Handle the manufacturer view */ ?>
      <input type="hidden" name="virtuemart_manufacturer_id" value="<?php echo $product->virtuemart_manufacturer_id ?>" />
      <input type="hidden" name="virtuemart_category_id[]" value="<?php echo $product->virtuemart_category_id ?>" />
</form>
<?php }?>
<?php if($product->product_in_stock<=0) { ?>
<div class="knopka1">
Нет в наличии
</div>
<?php }?>
Примерно как то так...
Можно назначить условием отсутствие цены, тогда product_in_stock надо заменить на product_price
 
Отсутствующий товар - это тот, у которого количество на складе равно нулю? Я не стал заморачиваться с ценой, а обернул кнопку условием. Получилось примерно так:
Код:
<?php if($product->product_in_stock>0) { ?>
<form method="post" class="product" action="index.php" id="addtocartproduct<?php echo $product->virtuemart_product_id ?>">
   <div class="addtocart-bar1">

         <?php // Display the quantity box ?>
         <!-- <label for="quantity<?php echo $product->virtuemart_product_id;?>" class="quantity_box"><?php echo JText::_('COM_VIRTUEMART_CART_QUANTITY'); ?>: </label> -->
         <span class="quantity-box" style="display:none">
            <input  type="text" class="quantity-input" name="quantity[]" value="1" />
         </span>
         <span class="quantity-controls" style="display:none">
            <input type="button" class="quantity-controls quantity-plus" />
            <input type="button" class="quantity-controls quantity-minus" />
         </span>
         <?php // Display the quantity box END ?>

         <?php // Add the button
         $button_lbl = JText::_('COM_VIRTUEMART_CART_ADD_TO');
         $button_cls = ''; //$button_cls = 'addtocart_button';
         if (VmConfig::get('check_stock') == '1' && !$product->product_in_stock) {
            $button_lbl = JText::_('COM_VIRTUEMART_CART_NOTIFY');
            $button_cls = 'notify-button';
         } ?>

         <?php // Display the add to cart button ?>
         <span class="addtocart-button">
            <input type="submit" name="addtocart"  class="addtocart-button" value="<?php echo $button_lbl ?>" title="<?php echo $button_lbl ?>" />
         </span>

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

      <?php // Display the add to cart button END ?>
      <input type="hidden" class="pname" value="<?php echo $product->product_name ?>">
      <input type="hidden" name="option" value="com_virtuemart" />
      <input type="hidden" name="view" value="cart" />
      <noscript><input type="hidden" name="task" value="add" /></noscript>
      <input type="hidden" name="virtuemart_product_id[]" value="<?php echo $product->virtuemart_product_id ?>" />
      <?php /** @todo Handle the manufacturer view */ ?>
      <input type="hidden" name="virtuemart_manufacturer_id" value="<?php echo $product->virtuemart_manufacturer_id ?>" />
      <input type="hidden" name="virtuemart_category_id[]" value="<?php echo $product->virtuemart_category_id ?>" />
</form>
<?php }?>
<?php if($product->product_in_stock<=0) { ?>
<div class="knopka1">
Нет в наличии
</div>
<?php }?>
Примерно как то так...
Можно назначить условием отсутствие цены, тогда product_in_stock надо заменить на product_price

Благодарю, классное решение, Плюс бонус с этой статьи взял Для просмотра ссылки Войди или Зарегистрируйся

Чтобы наличие отображалось в карточке товара заменим весь код, который выводит наличие в файле components\com_virtuemart\views\productdetails\tmpl\default.php

Меняем
<?php
// Availability
$stockhandle = VmConfig::get('stockhandle', 'none');
$product_available_date = substr($this->product->product_available_date,0,10);
$current_date = date("Y-m-d");
if (($this->product->product_in_stock - $this->product->product_ordered) < 1) {
if ($product_available_date != '0000-00-00' and $current_date < $product_available_date) {
?> <div class="availability">
<?php echo JText::_('COM_VIRTUEMART_PRODUCT_AVAILABLE_DATE') .': '. JHTML::_('date', $this->product->product_available_date, JText::_('DATE_FORMAT_LC4')); ?>
</div>
<?php
} else if ($stockhandle == 'risetime' and VmConfig::get('rised_availability') and empty($this->product->product_availability)) {
?> <div class="availability">
<?php echo (file_exists(JPATH_BASE . DS . VmConfig::get('assets_general_path') . 'images/availability/' . VmConfig::get('rised_availability'))) ? JHTML::image(JURI::root() . VmConfig::get('assets_general_path') . 'images/availability/' . VmConfig::get('rised_availability', '7d.gif'), VmConfig::get('rised_availability', '7d.gif'), array('class' => 'availability')) : JText::_(VmConfig::get('rised_availability')); ?>
</div>
<?php
} else if (!empty($this->product->product_availability)) {
?>
<div class="availability">
<?php echo (file_exists(JPATH_BASE . DS . VmConfig::get('assets_general_path') . 'images/availability/' . $this->product->product_availability)) ? JHTML::image(JURI::root() . VmConfig::get('assets_general_path') . 'images/availability/' . $this->product->product_availability, $this->product->product_availability, array('class' => 'availability')) : JText::_($this->product->product_availability); ?>
</div>
<?php
}
}
else if ($product_available_date != '0000-00-00' and $current_date < $product_available_date) {
?> <div class="availability">
<?php echo JText::_('COM_VIRTUEMART_PRODUCT_AVAILABLE_DATE') .': '. JHTML::_('date', $this->product->product_available_date, JText::_('DATE_FORMAT_LC4')); ?>
</div>
<?php
}
?>

<?php
// Availability
$stockhandle = VmConfig::get('stockhandle', 'none');
$product_available_date = substr($this->product->product_available_date,0,10);
$current_date = date("Y-m-d");
if (($this->product->product_in_stock - $this->product->product_ordered) < 1) {

echo '<div class="availability">Нет в наличии</div>';

}
else {
?> <div class="availability">
<?php echo 'В наличии'; ?>
</div>
<?php
}
?>
 
Я знаю про это решение и сначала хотел использовать именно его, но недостаток его в том, что кнопка "купить" в этом случае все равно остается активной. И если плотность заказов достаточно высокая, то менеджеру, которому придется отвечать по телефону об отсутствии товара, можно только позавидовать)))))
Посему для меня было проще "нейтрализовать" кнопку "купить"))))
 
Ребят, не могли бы вы выложить файл product.php и написать версию Virtuemart у кого работает решение Genk0 из форума.

У меня не работает, сортирует как попало. Viruemart 2.6.12
case 'product_price':
//$filters[] = 'p.`virtuemart_product_id` = p.`virtuemart_product_id`';
//$orderBy = ' ORDER BY `product_price` ';
//$orderBy = ' ORDER BY `ff_final_price`, `product_price` ';
$orderBy = ' ORDER BY p.product_in_stock DESC ,`product_price` ';
$ff_select_price = ' , IF(pp.override, pp.product_override_price, pp.product_price) as product_price ';
$joinPrice = TRUE;
break;
case 'created_on':
case '`p`.created_on':
$orderBy = ' ORDER BY p.product_in_stock DESC ,p.`created_on` ';
break;
default;
if (!empty($this->filter_order)) {
$orderBy = ' ORDER BY p.product_in_stock DESC ,' . $this->filter_order . ' ';
}
else {
$this->filter_order_Dir = '';
}
break;
 
Ребят, не могли бы вы выложить файл product.php и написать версию Virtuemart у кого работает решение Genk0 из форума.

У меня не работает, сортирует как попало. Viruemart 2.6.12
case 'product_price':
//$filters[] = 'p.`virtuemart_product_id` = p.`virtuemart_product_id`';
//$orderBy = ' ORDER BY `product_price` ';
//$orderBy = ' ORDER BY `ff_final_price`, `product_price` ';
$orderBy = ' ORDER BY p.product_in_stock DESC ,`product_price` ';
$ff_select_price = ' , IF(pp.override, pp.product_override_price, pp.product_price) as product_price ';
$joinPrice = TRUE;
break;
case 'created_on':
case '`p`.created_on':
$orderBy = ' ORDER BY p.product_in_stock DESC ,p.`created_on` ';
break;
default;
if (!empty($this->filter_order)) {
$orderBy = ' ORDER BY p.product_in_stock DESC ,' . $this->filter_order . ' ';
}
else {
$this->filter_order_Dir = '';
}
break;
А сколько у вас режимов сортировки стоит? У меня начинает сортировать как попало когда больше одного режима сортировки, поэтому использую только один режим (по цене). Как настроить чтоб несколько режимов разомработало, сам досих пор не знаю, читал много на буржуйских форумах но так ответа и не нашел. Версия VM 2.0.22c (возможно там еще какие то правки и хаки стоят), смотри внимательней и выбирай только то что нужно тебе
 

Вложения

  • product.rar
    19,9 KB · Просмотры: 10
А сколько у вас режимов сортировки стоит? У меня начинает сортировать как попало когда больше одного режима сортировки, поэтому использую только один режим (по цене). Как настроить чтоб несколько режимов разомработало, сам досих пор не знаю, читал много на буржуйских форумах но так ответа и не нашел. Версия VM 2.0.22c (возможно там еще какие то правки и хаки стоят), смотри внимательней и выбирай только то что нужно тебе
У меня не работает даже если выбрать только 1 вид сортировки. Может давайте, все кто хочет нормальную сортировку, скинимся автору данного решения на доработку.
 
Сделал изменения как описано выше в product.php, проверил - никакой реакции. Проверка с отладочной инфой показала, что внесённые изменения не появились в SQL. Более того, даже того, что написано было до правки там тоже нет ))) Вопрос: этот хак работает при наличии breakdesigns Custom Filters? Сама сортировка товара работает (по наименованию, по цене). И вроде бы фильтр не должен никаким образом на неё влиять...
 
Назад
Сверху