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

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

[Решено] Чебокс "Показывать только товары, которые есть в наличии"

 (Прочитано 4882 раз)
0 Пользователей и 1 Гость смотрят эту тему.
artMelnikov
Осваиваюсь на форуме
***

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

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



« : 29.05.2011, 23:21:52 »

Всем привет.
Задача была такая:
на странице категории товара рядом с полем выбора сортировки должен присутствовать чекбокс, позволяющий скрыть товары, которых нет в наличии.

Пример здесь: http://4play.by/catalog/category/65.html

Огромное Спасибо за решение товарищам a-littlebox и mr.brightside с форума вирты!

Решение:

Красным цветом выделен код, который необходимо добавить в файлы.

В файле: administrator/components/com_virtuemart/html/shop_browse_queries.php
Цитировать
$where_clause[] = "((`product_parent_id`='0') OR (`product_parent_id`='')) ";
$filter_in_stock = $_SESSION['filter_in_stock'];
if( !$perm->check("admin,storeadmin") ) {
    $where_clause[] = "`product_publish`='Y' ";
    $where_clause[] = "`category_publish`='Y' ";
    if((CHECK_STOCK && PSHOP_SHOW_OUT_OF_STOCK_PRODUCTS != "1") or $filter_in_stock == "1") {
        $where_clause[] = 'product_in_stock > 0';
    }
}
if( $perm->check("admin,storeadmin") &&  $filter_in_stock == "1") $where_clause[] = 'product_in_stock > 0';

В файле: components/com_virtuemart/virtuemart_parser.php
Цитировать
define( '_VM_PARSER_LOADED', 1 );  
   if ($_REQUEST['filter_in_stock'] == "1") $_SESSION['filter_in_stock'] = "1";
    if ($_REQUEST['filter_in_stock'] == "0")  $_SESSION['filter_in_stock'] = "0";

}
?>

В файле: components/com_virtuemart/themes/default/templates/browse/includes/browse_orderbyform.tpl.php
Цитировать
<?php
    
}
?>
<?
if ($_SESSION['filter_in_stock'] == "1")
  $filter_in_stock_status = "checked";
?>
<input type="hidden" name="filter_in_stock" value="0"> <!-- send value equal 0 if not checked -->
<input type="checkbox" id="filter_in_stock_label" name="filter_in_stock"  value="1" onclick="order.submit()" <?echo $filter_in_stock_status?>>
<label for="filter_in_stock_label">Показывать только товары в наличии</label>

</form>
Так как в коде последнего файла присутствует кириллица, сохраняйте его в кодировке UTF-8.

Всё, хак реализован!

Внимательно проверяйте, все символы ли вы ввели. Хак проверен и работает на разных версиях. Окружающий код может немного отличаться, это не должно повлиять на результат.

Если хотите, чтобы галочка "Показывать только товары в наличии" стояла по-умолчанию, то
В файле: components/com_virtuemart/virtuemart_parser.php
нужно после добавленного нами
Цитировать
define( '_VM_PARSER_LOADED', 1 );  
   if ($_REQUEST['filter_in_stock'] == "1") $_SESSION['filter_in_stock'] = "1";
   if ($_REQUEST['filter_in_stock'] == "0") $_SESSION['filter_in_stock'] = "0";

дописать еще
Цитировать
   if ($_SESSION['filter_in_stock'] == "1");
   if ($_SESSION['filter_in_stock'] == "0");
   else $_SESSION['filter_in_stock'] = "1";

Прикрепил файлы реализованного хака для версии VirtueMart 1.1.8 stable. Для других версий лучше самим вносить изменения в файлы.
http://ifolder.ru/26712322
« Последнее редактирование: 02.11.2011, 15:52:47 от artMelnikov » Записан
dxpsite
Захожу иногда
**

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

Сообщений: 16


« Ответ #1 : 22.07.2011, 20:29:29 »

отличный способ.. не ожидал)))) спасибо!
Записан
artMelnikov
Осваиваюсь на форуме
***

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

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



« Ответ #2 : 22.07.2011, 20:30:40 »

Всегда пожалуйста!))
Записан
vtx
Давно я тут
****

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

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



« Ответ #3 : 24.08.2011, 01:02:05 »

есть один баг. если товаров нет, то форма сортировки изчезает и невозможно отменить выбор.
временно сделал в shop.browse.php правку
Код:
if ( $num_rows > -1 && @$_REQUEST['output'] != "pdf") { // заменить на 0, если не выводить сортировку при отсутствии товары
но было бы неплохо если сделать что-то типа:
$new_url = ltrim($curent_url,'filter_in_stock=1&');
vmRedirect ($new_url)

и прибить где-то ссылкой
Записан
artMelnikov
Осваиваюсь на форуме
***

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

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



« Ответ #4 : 24.08.2011, 08:28:58 »

Да, есть такой баг. Если кто-нибудь найдет решение, буду очень благодарен!
Записан
Stivik
Новичок
*

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

Сообщений: 3


« Ответ #5 : 05.10.2011, 12:04:16 »

artMelnikov, вообще отлично я обязательно реализую твой хак, подскажи ещё, а как ты выводишь то, что у тебя товар в наличии или под заказ и его условное количество.
Очень нужно.  ! хочу рекламу дать, а там это требуется.
Записан
artMelnikov
Осваиваюсь на форуме
***

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

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



« Ответ #6 : 05.10.2011, 15:08:59 »

Если я правильно понял, то смотри тут:
http://joomlaforum.ru/index.php/topic,6468.msg924858.html#msg924858
Хак добавляет возле кнопки "Купить" Надпись "В наличии" либо "Под заказ". При этом в админке должна быть выключена функция "Проверять наличие на складе?", иначе на товарах с остатком меньше 1 кнопка "Купить" будет меняться на "уведомить чего-то там"
Записан
Stivik
Новичок
*

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

Сообщений: 3


« Ответ #7 : 06.10.2011, 00:42:33 »

artMelnikov, да но у тебя на сайте лучше сделано чем в том хаке, есть ли возможность выложить файлы?!
мне нравиться то что он графически обозначает и ещё текстом.
Записан
artMelnikov
Осваиваюсь на форуме
***

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

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



« Ответ #8 : 06.10.2011, 08:55:02 »

Если ты про 4play то это не мой сайт а mr.brightside с forum.virtuemart.
Вот одно решение:
http://kegla.net/showpost.php?p=253&postcount=12
Видел еще где-то, но не могу найти щас. Увижу, напишу.
Записан
artMelnikov
Осваиваюсь на форуме
***

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

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



« Ответ #9 : 06.10.2011, 14:10:01 »

Хотел было сделать наоборот, чтоб по-умолчанию показывались только товары, имеющиеся в наличии и был пустой чекбокс с надписью "Показать товары под заказ", и если поставить туда галку, то показывались товары которых нет в наличии. Крутил-вертел, ничего не получилось. Поэтому оставил как есть.
« Последнее редактирование: 24.10.2011, 09:27:47 от artMelnikov » Записан
artMelnikov
Осваиваюсь на форуме
***

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

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



« Ответ #10 : 02.11.2011, 15:47:21 »

Небольшое дополнение. Чтоб надпись "Показывать только товары в наличии" была тоже кликабельной, нужно:
В файле: components/com_virtuemart/themes/default/templates/browse/includes/browse_orderbyform.tpl.php
строчку
Цитировать
<input type="checkbox" name="filter_in_stock"  value="1" onclick="order.submit()" <?echo $filter_in_stock_status?>>Показывать только товары в наличии
заменить на
Цитировать
<input type="checkbox" id="filter_in_stock_label" name="filter_in_stock"  value="1" onclick="order.submit()" <?echo $filter_in_stock_status?>>
<label for="filter_in_stock_label">Показывать только товары в наличии</label>

В первом посте я уже изменил.
Записан
zzaj
Осваиваюсь на форуме
***

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

Сообщений: 47


« Ответ #11 : 17.12.2011, 11:42:23 »

Да, есть такой баг. Если кто-нибудь найдет решение, буду очень благодарен!
Поблема всё еще актуальна! Эсли уже есть решение, то можно его в студию? ) Очень полезная вещь.
Записан
chinacrash
Новичок
*

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

Сообщений: 1


« Ответ #12 : 20.02.2012, 21:34:08 »

А как вместо чекбокса сделать ссылки, все товары, товары в наличии?
Записан
SolopoV
Завсегдатай
*****

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

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


зеленею...


« Ответ #13 : 02.08.2012, 20:41:48 »

Notice: Undefined index: filter_in_stock in ****/components/com_virtuemart/virtuemart_parser.php on line 293
Это ругательство на
Код:
if ($_REQUEST['filter_in_stock'] == "1") $_SESSION['filter_in_stock'] = "1";
    if ($_REQUEST['filter_in_stock'] == "0")  $_SESSION['filter_in_stock'] = "0";

Как быть?
Записан
swerf
Новичок
*

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

Сообщений: 1


« Ответ #14 : 20.01.2013, 19:22:32 »

А есть ли реализация данного чекбокса для VirtueMart 2.06? очень нужно!
Записан
alexxsav
Осваиваюсь на форуме
***

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

Сообщений: 27

http://c-site.ru


« Ответ #15 : 07.03.2014, 14:09:28 »

Ктонибудь нашел реализацию для VM 2?
Записан
nukez
Новичок
*

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

Сообщений: 1


« Ответ #16 : 14.06.2016, 17:02:50 »

Ктонибудь нашел реализацию для VM 2?

Решение для VM2
в файле /administrator/components/com_virtuemart/models/product.php

после строки if ($onlyPublished) {
            $where[] = ' p.`published`="1" ';
         }

вставляем
   // добавляем сортировку по наличию
   if ($_REQUEST['filter_in_stock'] == "1") $_SESSION['filter_in_stock'] = "1";
   if ($_REQUEST['filter_in_stock'] == "0")  $_SESSION['filter_in_stock'] = "0";
   $filter_in_stock = $_SESSION['filter_in_stock'];
   // заканчиваем сортировку

приводим строку
} else if (VmConfig::get('stockhandle','none')=='disableit') {
к виду
} else if (VmConfig::get('stockhandle','none')=='disableit' or $filter_in_stock == "1") {

в Файле /templates/ваш шаблон/html/com_virtuemart/category/default.php

в удобном месте в начале файла (у меня перед /* Show child categories */) вставляем
$urlcat = $_SERVER['QUERY_STRING'];
if ($_SESSION['filter_in_stock'] == "1") {
$filter_in_stock_status = "checked";
$filter_in_stock = $_SESSION['filter_in_stock']-1;}
else {$filter_in_stock = $_SESSION['filter_in_stock']+1;
$filter_in = '&filter_in_stock=';
}
$lit = '&filter_in_stock='.$filter_in_stock;
$urlcat = str_replace($lit, "", $urlcat);


После <?php echo $this->orderByList['orderby']; ?> или в нужное место шаблона вставим

<input type="hidden" name="filter_in_stock" value="0"> <!-- send value equal 0 if not checked -->
<input type="checkbox" id="filter_in_stock_label" name="filter_in_stock"  value="1" onclick="return location.href = '/index.php?<?php echo $urlcat.'&filter_in_stock='.$filter_in_stock;?>'" <? echo $filter_in_stock_status; ?>>
<label for="filter_in_stock_label">Только в наличии</label>


все работает на VM 2.0.23, на других не проверял, но думаю по аналогии все пашет
Записан
JediG
Новичок
*

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

Сообщений: 5


« Ответ #17 : 08.11.2016, 12:03:03 »

Как бы это хак реализовать для VirtueMart 3
Очень полезная вещь, а до сих пор никто не сделал.

Попробовал сделать как для VM2, но к сожалению не работает. Чекбокс появился, а функции нет.
Записан
Страниц: [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