Пятница, 23 Декабрь 2011 14:52

Расширяем функциональность Virtuemart. Часть 2. Модуль фильтрации товара.

Оцените материал
(9 голосов)

 Вот пример модуля фильтра для товаров Virtuemart. Нажмите на картинку для ее увеличения.

Модуль фильтрации товаров Virtuemart

Для чего нужны лишние телодвижения и почему бы не использовать встроенный расширенный поиск по типам товара? Во-первых, геморрой при заполнении товаров. Во-вторых, это штука нестабильная с отвратительным и недружественным внешнем видом фронтэнда, в котором обычный посетитель сайта не всегда захочет разбираться. Пример (нажмите чтобы увеличить):

Расширенный поиск товаров по характеристикам Virtuemart

Да к тому же, его форму не выведешь в модуль. Согласитесь, мой вариант поинтереснее выглядит. Под катом — реализация.

Первым делом что нам необходимо для реализации такого модуля поиска — реализовать дополнительные поля для забиваия в них параметров (а вот пост о том, как сделать дополнительные поля для товаров Virtuemart).

Предположим, вы все сделали как там написано. Разберем что мы там сделали, внимательно читайте комментарии, чтобы понять что к чему.

Показать/скрыть html4strict код

Посмотреть код
<tr class="row1"> 
 <td width="29%" valign="top"> 
 <div style="text-align:right;font-weight:bold;">Виды техники:</div> 
 </td> 
 <td width="71%" > 
 Сейчас — &quot;<?php echo $db->sf("product_vid_teh"); ?>&quot;, изменить на&nbsp; <!-- Чтобы было видно какое значение в базе сейчас --> 
 <select class="inputbox" type="text" name="product_vid_teh" size="1"> <!-- Вписываем новое поле в выпадающий список с заранее определенными значениями, чтобы небыло путаницы. Для мультивыбора лучше поставить перед значением пробел. Чтобы значения не сливались в одно слово (поиск не будет работать в этом случае) --> 
<option value=' грузовики'>Грузовики</option> 
<option value=' самосвалы'>Самосвалы</option> 
<option value=' манипуляторы'>Манипуляторы</option> 
<option value=' тягачи'>Тягачи</option> 
<option value=' погрузчики'>Погрузчики</option> 
<option value=' спецтехника'>Спецтехника</option> 
</select> 
 </td> 
</tr> 
<tr class="row1"> 
 <td width="29%" valign="top"> 
 <div style="text-align:right;font-weight:bold;">Грузоподъемность:</div> 
 </td> 
 <td width="71%" > 
 Сейчас — &quot;<?php echo $db->sf("product_gruzop"); ?>&quot;, изменить на&nbsp; 
<select class="inputbox" type="text" name="product_gruzop" size="1"> 
<option value=' 1500'>1500 кг</option> 
<option value=' 2000'>2000 кг</option> 
<option value=' 3500'>3500 кг</option> 
<option value=' 5000'>5000 кг</option> 
<option value=' 7000'>7000 кг</option> 
<option value=' 10000'>10 000 кг</option> 
<option value=' 15000'>50 000 кг</option> 
<option value='20000'>20 000 кг</option> 
</select> 
 </td> 
</tr> 
 <tr class="row1"> 
 <td width="29%" valign="top"> 
 <div style="text-align:right;font-weight:bold;">Тип кузова:</div> 
 </td> 
 <td width="71%" > 
 Сейчас — &quot;<?php echo $db->sf("product_tip_kuz"); ?>&quot;, изменить на&nbsp; 
<select class="inputbox" type="text" name="product_tip_kuz" size="1"> 
<option value=' борт'>Борт</option> 
<option value=' изометрический'>Изометрический</option> 
<option value=' рефрижератор'>Рефрижератор</option> 
<option value=' промтоварный'>Промтоварный</option> 
</select> 
 </td> 
</tr> 

Скриншот админки:

Админка Virtuemart 

После того, как задали эти параметры, нужно создать новый модуль. Назовем его Virtuemart Filter, для этого создаем новый файл xml, назовем его mod_virtuemart_filter.xml. В него вписываем:

Показать/скрыть xml код

Посмотреть код
<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE install SYSTEM "http://www.joomla.org/xml/dtd/1.5/module-install.dtd"> 
<install type="module" version="1.5.0"> 
    <name>VirtueMart Filter</name> 
    <creationDate>December 2011</creationDate> 
    <author>Millor</author> 
    <authorEmail>artem|at|dezigner.ru</authorEmail> 
    <authorUrl>http://joomla-show.ru</authorUrl> 
    <copyright> 
        Copyright (C) 2011 Artyom Suchkov. All rights    reserved. 
    </copyright> 
    <license>http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL</license> 
    <version>1.1.0</version> 
    <description>Фильтр товара при помощи чекбоксов</description> 
    <files> 
        <filename module="mod_virtuemart_filter">mod_virtuemart_filter.php</filename> 
    </files> 
    <params> 
        <param name="moduleclass_sfx" type="text" default="" 
            label="Module Class Suffix" 
            description="A suffix to be applied to the css class of the module (table.moduletable), this allows individual module styling" /> 
        <param name="class_sfx" type="text" default="" 
            label="Menu Class Suffix" 
            description="A suffix to be applied to the css class of the menu items" /> 
    </params> 
</install>
 

Теперь нам, соответственно, нужно создать указанный файл mod_virtuemart_filter.php. Разделим файл на две составляющие — PHP и HTML.

Показать/скрыть php код

Посмотреть код
  1. <?php 
  2. if( !defined( '_VALID_MOS' ) && !defined( '_JEXEC' ) ) die( 'Direct Access to '.basename(__FILE__).' is not allowed.' ); 
  3. if( file_exists(dirname(__FILE__).'/../../components/com_virtuemart/virtuemart_parser.php' )) {
  4.     require_once( dirname(__FILE__).'/../../components/com_virtuemart/virtuemart_parser.php' );
  5. } else {
  6.     require_once( dirname(__FILE__).'/../components/com_virtuemart/virtuemart_parser.php' );
  7. } 
  8. global $VM_LANG, $mm_action_url, $sess; 
  9. ?>
 

и 

Показать/скрыть html4strict код

Посмотреть код
  1. <form action="<?php $sess->purl( $mm_action_url."index.php?page=shop.browse" ) ?>" method="post"> 
  2. <table class="pl-1" border="0" cellspacing="0" cellpadding="0" align="center">
  3. <tbody>
  4. <tr>
  5. <td>
  6. <table style="width: 890px;" border="0" cellspacing="0" cellpadding="0" align="center">
  7. <tbody>
  8. <tr>
  9. <td style="font-size:1.5em;color:black" colspan="2" height="35" align="center" valign="middle">виды техники</td>
  10. <td style="font-size:1.5em;color:black" colspan="2" align="center" valign="middle">грузоподъемность</td>
  11. <td style="font-size:1.5em;color:black" width="189" align="center" valign="middle">тип кузова</td>
  12. </tr>
  13. <tr>
  14. <td width="163"><input name="keyword" type="checkbox" value=" грузовики" id="keyword" /> грузовики</td>
  15. <td width="177"><input name="keyword" type="checkbox" value=" тягачи" id="keyword" /> тягачи</td>
  16. <td width="175"><input name="keyword" type="checkbox" value=" 1500" id="keyword" /> 1500 кг</td>
  17. <td width="184"><input name="keyword" type="checkbox" value=" 7000" id="keyword" /> 7000 кг</td>
  18. <td><input name="keyword" type="checkbox" value=" борт" /> Борт</td>
  19. </tr>
  20. <tr>
  21. <td><input name="keyword" type="checkbox" value=" самосвалы" id="keyword" /> самосвалы</td>
  22. <td><input name="keyword" type="checkbox" value=" погрузчики" id="keyword" /> погрузчики</td>
  23. <td><input name="keyword" type="checkbox" value=" 2000" id="keyword" /> 2000 кг</td>
  24. <td><input name="keyword" type="checkbox" value=" 10000" id="keyword" /> 10 000 кг</td>
  25. <td><input name="keyword" type="checkbox" value=" изотермический" id="keyword" /> Изометрический</td>
  26. </tr>
  27. <tr>
  28. <td><input name="keyword" type="checkbox" value=" манипуляторы" id="keyword" /> манипуляторы</td>
  29. <td><input name="keyword" type="checkbox" value=" спецтехника" id="keyword" /> спeцтехника</td>
  30. <td><input name="keyword" type="checkbox" value=" 3500" id="keyword" /> 3500 кг</td>
  31. <td><input name="keyword" type="checkbox" value=" 15000" /> 15 000 кг</td>
  32. <td><input name="keyword" type="checkbox" value=" рефрижератор" id="keyword" /> Рефрижератор</td>
  33. </tr>
  34. <tr>
  35. <td></td>
  36. <td></td>
  37. <td><input name="keyword" type="checkbox" value=" 5000" id="keyword" /> 5000 кг</td>
  38. <td><input name="keyword" type="checkbox" value=" 20000" id="keyword" /> 20 000 кг</td>
  39. <td><input name="keyword" type="checkbox" value=" промтоварный" id="keyword" /> Промтоварный</td>
  40. </tr>
  41. <tr>
  42. <td colspan="4"></td> 
  43. <td align="center"><input class="button" name="Search" type="submit" value="Найти" /></td>
  44. </tr>
  45. </tbody>
  46. </table>
  47. </td>
  48. </tr>
  49. </tbody>
  50. </table>
  51. </form>

Думаю, здесь все понятно и без объяснений что к чему. Сохраняемся, зипуем, устанавливаем модуль, наслаждаемся.

А для закрепления материала, выкладываю установочный файл модуля. В нем есть ошибка. Предлагаю вам ее найти самостоятельно. Скачать модуль

Прочитано 30514 раз
Твитнуть

Комментарии   

 
Ancous1981
-1 #21 Ancous1981 13.05.2013 21:23
Автору и MaxZubex респект.
Поставил для магаза бижутерии и аксессуаров.
сортировка по цветам, размерам материалам
Не удобство в том что если человек захочет посмотреть красно и черное и поставит на этих цветах галочки он ни чего не найдет, Т.К. будет искаться товар где в есть и красное и черное. а не все красные и черные. и хорошо бы не checkbox а выподающий список организовать. Будем думать!! +1
Цитировать
 
 
Алекей
0 #20 Алекей 10.03.2013 13:46
Добрый день!

Нужен человек, готовый качественно и с предсказуемым результатом установить молули на virtual mart. Сайт по продаже товаров.

Спасибо!
Цитировать
 
 
MaxZubex
+2 #19 MaxZubex 25.12.2012 17:15
Что-то не пишет...
В форме вместо name="keyword" поставил name="keyword[]"
PS. Автору большой респект.
Цитировать
 
 
MaxZubex
0 #18 MaxZubex 25.12.2012 17:13
2. В форме вместо
Цитировать
 
 
MaxZubex
+1 #17 MaxZubex 25.12.2012 17:10
Тоже искал по одной из многих поставленных галочек...
Решил проблему следующим образом:
1. В файле virtuemart_pars er.php перед строкой $keyword = substr( urldecode( vmGet( $_REQUEST, 'keyword' )), 0, 50 ); поставил
if (is_array(@$_RE QUEST['keyword' ])) {
@$_REQUEST['keyword'] = implode(" ", @$_REQUEST['keyword']);
}

$keyword = substr( urldecode( vmGet( $_REQUEST, 'keyword' )), 0, 50 );
2. В форме вместо
Цитировать
 
 
Alexander
0 #16 Alexander 16.09.2012 21:07
Артем
на рисунке еще есть блок
ТАК ЖЕ
горячие предложения / техника в наличии / ...
скажи пожалуйста что это за функционал? в описании этого нет. Что это то же фильтры или ссылки на категории?
Цитировать
 
 
Мощность
0 #15 Мощность 16.09.2012 20:59
Бъюсь уже неделю ищет только по одному из запросов. Пробелы ставил до и после что это может быть
Цитировать
 
 
Александр
0 #14 Александр 28.05.2012 17:56
скачал здесь Virtuemart 1.1.9 RUS для Joomla 1.5 на странице товара не работают стрелки выбора количества товара. как починить?
Цитировать
 
 
Артем
0 #13 Артем 21.05.2012 17:34
1. Дистрибутивы Джумлы и Виртуемарта находятся у меня в файловом каталоге.

2. Выбирайте. Для этого и создан тип не "радио", а "чекбокс"
Цитировать
 
 
Анотн
0 #12 Анотн 18.05.2012 18:28
Возможно сделать что бы можно было выбрать несколько параметров для товара Например: Грузоподъемност ь - 1000 кг, 2000кг, 5000 кг. ?
Цитировать
 
 
Саша
0 #11 Саша 17.05.2012 14:11
Цитата:
А что по поводу поиска, проверил сейчас. У меня все находит по одной, по двум и по трем галочкам. Так что копайте глубже, помочь ничем не смогу. А лучше всего ставьте дистрибутивы с моего блога. На них все стабильно будет работать.
День добрый! а где собственно те дистрибутивы?
Цитировать
 
 
Артем
0 #10 Артем 29.02.2012 14:42
Читайте информацию о блоге. Я не отвечаю на вопросы, касающиеся индивидуальных проектов. Повторюсь, если что-то не получается, порекомендую обратиться к спонсорам блога, либо сделать мне предложение с ценой вопроса от 1000$
Цитировать
 
 
Никитос
0 #9 Никитос 15.02.2012 16:50
Ищет по одному из параметров. Дайте к-н решение. Все проверил, перепроверил и еще раз перепроверил. Пробовал с пробелами до и после. Слова не сливаются. Ищет только по последней поставленной галочке в модуле.
Сайт: tolkohlopok.ru
Цитировать
 
 
Артем
0 #8 Артем 26.01.2012 17:53
вполне возможно, что у вас сливается многосложный запрос в одно слово. в этом случае отправляется в базу "грузовикиборт1 500", к примеру, вместо "грузовики борт 1500". база, естественно, не находит такого слова и посылает скрипт поиска куда подальше.
могу посоветовать поигратья с пробелами в запросах и ячейках - поставить его перед словом или после. попробуйте формировать запрос в базу не с пробелом, а, допустим, с переводом строки. повторяю, у меня все ок с поиском. попробуйте скачать виртуемарт заново с моего сайта и с нуля написать этот фильтр. а вообще, все ждем выхода статей о расширении функционала только под виртуемарт 2. зачатки я уже начал делать, скоро будут готовы. через пару-тройку недель (я с блога не зарабатываю, поэтому могу выделять только минут по 20, да и то не каждый день)
Цитировать
 
 
Илья
0 #7 Илья 26.01.2012 02:23
Хоть убей, ищет только по одному из параметров, подскажите хоть где копать?
Цитировать
 

Добавить комментарий

Защитный код
Обновить

joomla 1.7

Не получаются доработки?

Становитесь партнером студии Millor! Быстро и недорого эти ребята помогут решить практически любую проблему.

Хотите подзаработать?

Если да, то вам сюда! Партнерская программа студии MyWebSite. Получи 20% за каждого клиента! Работаем по всей России и СНГ!

Рекламное место свободно.