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

artMelnikov

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

Пример здесь: 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

  • Осваиваюсь на форуме
  • 16
  • 1 / 0
отличный способ.. не ожидал)))) спасибо!
*

artMelnikov

  • Захожу иногда
  • 57
  • 3 / 0
Всегда пожалуйста!))
*

vtx

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

и прибить где-то ссылкой
*

artMelnikov

  • Захожу иногда
  • 57
  • 3 / 0
Да, есть такой баг. Если кто-нибудь найдет решение, буду очень благодарен!
*

Stivik

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

artMelnikov

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

Stivik

  • Новичок
  • 3
  • 0 / 0
artMelnikov, да но у тебя на сайте лучше сделано чем в том хаке, есть ли возможность выложить файлы?!
мне нравиться то что он графически обозначает и ещё текстом.
*

artMelnikov

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

artMelnikov

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

artMelnikov

  • Захожу иногда
  • 57
  • 3 / 0
Небольшое дополнение. Чтоб надпись "Показывать только товары в наличии" была тоже кликабельной, нужно:
В файле: 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

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

chinacrash

  • Новичок
  • 1
  • 0 / 0
А как вместо чекбокса сделать ссылки, все товары, товары в наличии?
*

SolopoV

  • Давно я тут
  • 573
  • 16 / 0
  • зеленею...
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

  • Новичок
  • 1
  • 0 / 0
А есть ли реализация данного чекбокса для VirtueMart 2.06? очень нужно!
*

alexxsav

  • Осваиваюсь на форуме
  • 27
  • 2 / 0
  • http://c-site.ru
Ктонибудь нашел реализацию для VM 2?
*

nukez

  • Новичок
  • 1
  • 0 / 0
Ктонибудь нашел реализацию для 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

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

Попробовал сделать как для VM2, но к сожалению не работает. Чекбокс появился, а функции нет.
*

OutLaw1

  • Осваиваюсь на форуме
  • 15
  • 0 / 0
+++ нужно для VM3 сделать! Помогите нубам ))
*

JediG

  • Новичок
  • 7
  • 0 / 0
Слежу за темой. Пришлось купить платный фильтр, но решение мне не нравится. Даже сейчас отключил бы его и сделал так как было. Не понятно почему разработчики ВМ не реализовали эту опцию по-умолчанию. Мне она кажется очень логичной.
*

OutLaw1

  • Осваиваюсь на форуме
  • 15
  • 0 / 0
Да согласен, эти фильтры типо myext, cherrypicker достаточно костыльные темы подходят только для сортировки доп полей и прочей лабуды.
А вот общий стандартный фильтр должен быть надежен, удобен и поддерживать пагинацию нормально. Стандартная VirtueMart сортировка  имеет очень мало настроек и иногда глючит. Но не хочу гнать на разработчиков они и так многое сделали и ещё бесплатно.

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

[Решено] Товарная накладная и товарный чек

Автор mikeles

Ответов: 6
Просмотров: 5579
Последний ответ 21.09.2019, 19:48:12
от kungurskiy
Как реализовать: товары, которых нет в наличии в конец списка категории?

Автор Girevik

Ответов: 1
Просмотров: 1210
Последний ответ 02.11.2017, 10:52:04
от P_B
Модуль недавно просмотренные товары для VirtueMart 1.1.X

Автор aleks_yug

Ответов: 97
Просмотров: 25002
Последний ответ 25.10.2016, 15:03:07
от Igoritaly
Скидка на категорию [почти решено]

Автор baloon

Ответов: 4
Просмотров: 2291
Последний ответ 06.04.2016, 20:00:27
от Ejov
404 для товаров которые удалены

Автор holovla

Ответов: 1
Просмотров: 1841
Последний ответ 06.05.2015, 19:42:13
от holovla