|
beliyadm
|
 |
« : 13.07.2009, 01:52:57 » |
|
Представляю Вашему внимания достаточно универсальный модуль для VirtueMart, версия mod_VirtueMart_universal для Joomla 1.5. Версия модуля слайдера товаров 2.0 (VM1.1.9 J1.5)Демонстрация и информацияВерсия модуля 2.1ДемонстрацияПодробная информацияНовые возможности модуля версии 2.1 - кнопка "добавить в корзину" на ajax
- визуальный выбор категорий и возможность включать вложенные подкатегории
- различные варианты вывода цены (с учетом налога и скидки)
- многоязычность (в текущем виде только рус\англ), константы вынесены в языковые файлы language\ru-RU\ru-RU.mod_virtuemart_universal.ini
- различные варианты вывода изображения в модуле с эффектами lightbox и\или zoom
Почему этот модуль, а не родной от разработчика VirtueMart Soeren - родной модуль на 6 товаров генерит от 40 запросов в БД, мой же только один SQL запрос Возможности - показать последние добавленные товары - показать наиболее продаваемые товары - показать товары, отмеченные как featured - показывать случайные товары - задать количество показываемых товаров - задать категории для выборки (ID через запятую) - возможно включения JS подсказок для ссылок в модуле, с использованием либо встроенной библиотеки Mootools либо Jquery. Внимание - Jquery не включена в модуль, подключение библиотеки в код контролируйте самостоятельно. Если на сайте одновременно подключены обе библиотеки - JS эффект подсказок отрабатывать не будет, покажется стандартный title для ссылки. JS эффекты отрабатываются для элемента title для .mod_vm_universal a, для полноценного управления изучите CSS. Оформление заложено в файле modules\mod_VirtueMart_universal\files\mod_virtuemart_universal.css (см. комментарии) Дополнительно: - код максимально документирован, смотрите файл modules\mod_VirtueMart_universal\tmpl\default.php для создания собственного шаблона ( внимание - класс mod_vm_universal используется для работы JS tooltip) Справка по использованию шаблона: $item->pname - заголовок (название) товара $item->link - ссылка на полную карточку товара $item->pimage - картинка товара, не забываем про полный путь до нее $item->price - цена товара $item->currency - валюта (денежная единица) $item->intro - краткое описание товара, очищенное от HTML тегов, по умолчанию выводится как TITLE для картинки и ссылки "подробнее" - для достижения валидности и уменьшения нагрузки на сервер перед публикацией сайта на production рекомендуется все JS и CSS файлы компоновать в один файл и применять сжатие (работа соответствующих инструментов и азы создания сайтов находятся вне данной темы) - для достижения валидности необходимо подключить скрипт Jquery и Mootools до вызова скриптов тултипов (всплывающих подсказок), смотри комментарии в helper.php) в блоке HEAD, по умолчанию они выводятся в BODY для работы на 99% хостов без конфликтов - по умолчанию HTML структура модуля для каждого элемента такова: html вывод элементов модуля <div class="mod_vm_universal"> <span class="mod_vm_title">Название товара</strong><br /> <a href="link" title="Название товара - краткое описание" class="mod_vm_link"> <img src="linkImg" alt="Название товара - краткое описание" /> </a> <br /> <a href="link" title="Название товара - краткое описание" class="mod_vm_readmore">Подробнее</a> <br /> <span class="mod_vm_price">Цена: 1000 рублей</span> </div> - если у вас VirtueMart используется в качестве каталога (и соответственно нет цен) - решение нижеВозможные баги: - возможно все, поскольку я не очень хорошо знаю структуру товаров магазина. Пожелания и предложения по развитию оставляем в комментариях Тестировал на Joomla 1.5.10-12 и VirtueMart 1.1.3, огромная благоданость Sulpher за тестирование и общие рекомендации - Если для товара не назначено изображение выводится картинка по умолчанию components/com_virtuemart/themes/default/images/noimage.gif (спасибо Sulpher)
- Добавлена возможность показа иконки для товаров с скидкой
- Добавлена возможность либо автоматически определять ItemID ссылки в меню, ведущей на магазин, либо руками задавать в настройках модуля. Для чего - чтобы при переходе по ссылкам модуля корректно работала активность пункта меню, хлебные крошки и прочие привязки
UPD- Добавлена возможность обрезания цены до точки (пример: 48.12000 -> 48)
- Добавлена случайная сортировка товаров (если при кол-ве записей в БД более 10 000 будут проблемы с производительностью - пишите, будут менять алгоритм)
|
|
|
|
« Последнее редактирование: 19.02.2012, 00:08:24 от beliyadm »
|
Записан
|
|
|
|
| |
Luchik
Осваиваюсь на форуме
 
Репутация: +5/-0
Offline
Сообщений: 69
|
 |
« Ответ #91 : 17.09.2009, 13:04:53 » |
|
Вот у вас при выборе пункта "последние добавленные товары" выводятся товары, которые недавно добавлены в магазин и похоже выводяться по дате mdate. Но в базе есть еще колонка cdate - время когда поставили галочку "опубликовать". Можно ли сделать пункт "последние опубликованные товары", где товары выводяться по cdate?
P.S. я может перепутал mdate и cdate. Сильно не бейте.
|
|
|
|
|
Записан
|
|
|
|
|
beliyadm
|
 |
« Ответ #92 : 17.09.2009, 13:12:08 » |
|
P.S. я может перепутал mdate и cdate. Сильно не бейте.
cdate The Product's Creation Date (UNIX Timestamp) mdate The Product's last Modification Date (UNIX Timestamp)
Так написано в документации Но у меня опция вывода последних сортирует по ID (в принципе тоже самое что и дата добавления товара) Даты публикации вроде бы нет вообще, но если вдруг надо изменить сортировку по нужному полю - открываем хелпер модуля, находим и модифицируем кусок case '1'; $ordering .= ' p.product_id DESC '; break;
|
|
|
|
|
Записан
|
|
|
|
gora4o
Захожу иногда

Репутация: +0/-0
Offline
Сообщений: 21
|
 |
« Ответ #93 : 19.09.2009, 19:02:24 » |
|
Подскажите пожалуйста, как добавить кнопку купить к товару?
И сделать так, что бы цена бралась из флайпейджа категории? Это необходимо, так как у меня в базе все товары забиты в долларах, но стоит хак, обеспечивающий мультивалютность, с перерасчетом курсов и цена выводится уже в гривне, с заданным курсом перерасчета. А Ваш модуль выводит валюту по умолчанию.
|
|
|
|
|
Записан
|
|
|
|
|
beliyadm
|
 |
« Ответ #94 : 19.09.2009, 20:01:06 » |
|
кнопку купить - скопировать код из flypage или другого файла, что генерит кнопку. Чтобы работыли JS эффекты AJAX добавления товара - необходимо глубже изучить структуру работы кода и модернизировать. Для модуля такой задачи не ставилось и не планируется Аналогично и с хаком, цена берется из таблицы товаров. При желании можно в выборку добавить параметр курса и на лету пересчитывать. Но опять же - данную модификацию я не закладываю в разработку
|
|
|
|
|
Записан
|
|
|
|
gora4o
Захожу иногда

Репутация: +0/-0
Offline
Сообщений: 21
|
 |
« Ответ #95 : 20.09.2009, 09:51:33 » |
|
Пробую вставлять <?php echo $form_addtocart ?> но не работает, вставлял в файл default.php. Если не тяжело, опишите процедуру, что сделать, что бы заработало. У меня отключена корзина на Аяксе, так как она выдает ошибки в ИЕ6 версии.
И как вывести цену что бы с курса магазина, та которая во флайпейдже, аналогично: <?php echo $product_price ?> отказывается показывать.
|
|
|
|
|
Записан
|
|
|
|
beagler
Moderator
   
Репутация: +316/-4
Offline
Пол: 
Сообщений: 2994
http://beagler.ru/
|
 |
« Ответ #96 : 20.09.2009, 10:44:57 » |
|
ну так $form_addtocart и $product_price нужно сначала подготовить - посмотрите как это делается в shop.product_details.php
|
|
|
|
|
Записан
|
|
|
|
gora4o
Захожу иногда

Репутация: +0/-0
Offline
Сообщений: 21
|
 |
« Ответ #97 : 21.09.2009, 01:36:19 » |
|
Вот все что касается кнопки добавления в корзину в этом файле:
/* ADD-TO-CART */ $tpl->set( 'manufacturer_id', $manufacturer_id ); $tpl->set( 'flypage', $flypage ); $tpl->set( 'ps_product_attribute', $ps_product_attribute ); $addtocart = $tpl->fetch('product_details/includes/addtocart_form.tpl.php' );
$tpl->set( "addtocart", $addtocart );
Но вот что дальше с этим делать, и как это подключить в helper.php модуля я пока не знаю, подскажите на одном примере, и все станет более менее ясно, так и цену потом можно будет сформировать.
|
|
|
|
|
Записан
|
|
|
|
gora4o
Захожу иногда

Репутация: +0/-0
Offline
Сообщений: 21
|
 |
« Ответ #98 : 23.09.2009, 01:33:12 » |
|
не суждено мне помощи допроситься)
|
|
|
|
|
Записан
|
|
|
|
beagler
Moderator
   
Репутация: +316/-4
Offline
Пол: 
Сообщений: 2994
http://beagler.ru/
|
 |
« Ответ #99 : 23.09.2009, 13:27:43 » |
|
попробуй $tpl = vmTemplate::getInstance(); /* ADD-TO-CART */ $tpl->set( 'manufacturer_id', $manufacturer_id ); $tpl->set( 'flypage', $flypage ); $tpl->set( 'ps_product_attribute', $ps_product_attribute ); echo $tpl->fetch('product_details/includes/addtocart_form.tpl.php' );
не проверял
|
|
|
|
|
Записан
|
|
|
|
gora4o
Захожу иногда

Репутация: +0/-0
Offline
Сообщений: 21
|
 |
« Ответ #100 : 23.09.2009, 19:16:12 » |
|
Пишет от такое, может что не так делаю, поправьте.
Fatal error: Call to a member function list_attribute() on a non-object in Z:\home\localhost\www\mag\components\com_virtuemart\themes\default\templates\product_details\includes\addtocart_form.tpl.php on line 10
|
|
|
|
|
Записан
|
|
|
|
beagler
Moderator
   
Репутация: +316/-4
Offline
Пол: 
Сообщений: 2994
http://beagler.ru/
|
 |
« Ответ #101 : 23.09.2009, 21:01:47 » |
|
добавь перед предыдущем кодом require_once(CLASSPATH . 'ps_product_attribute.php' ); $ps_product_category = new ps_product_category;
и попрбовать убрать $tpl->set( 'manufacturer_id', $manufacturer_id ); $tpl->set( 'flypage', $flypage );
|
|
|
|
|
Записан
|
|
|
|
gora4o
Захожу иногда

Репутация: +0/-0
Offline
Сообщений: 21
|
 |
« Ответ #102 : 23.09.2009, 21:49:08 » |
|
Я добавляю следующий код:
require_once(CLASSPATH . 'ps_product_attribute.php' ); $ps_product_category = new ps_product_category; $tpl = vmTemplate::getInstance(); /* ADD-TO-CART */ $tpl->set( 'ps_product_attribute', $ps_product_attribute ); echo $tpl->fetch('product_details/includes/addtocart_form.tpl.php' );
после
$ItemidCustom = $params->get( 'checkItemidCustom' );
в файле helper.php
а в файл default.php вставляю такую строчку:
<?php echo $form_addtocart ?>
Все ли верно я делаю, если да, то ошибка неизменно выскакивает:
Fatal error: Call to a member function list_attribute() on a non-object in Z:\home\localhost\www\mag\components\com_virtuemart\themes\default\templates\product_details\includes\addtocart_form.tpl.php on line 10
В чем ошибка может быть?
|
|
|
|
|
Записан
|
|
|
|
beagler
Moderator
   
Репутация: +316/-4
Offline
Пол: 
Сообщений: 2994
http://beagler.ru/
|
 |
« Ответ #103 : 23.09.2009, 22:39:36 » |
|
нужно добавлять перед $i++; (142 строка) вот так require_once(CLASSPATH . 'ps_product_attribute.php' ); $ps_product_category = new ps_product_category; $tpl = vmTemplate::getInstance(); /* ADD-TO-CART */ $tpl->set( 'product_id', $row->pid; ); $tpl->set( 'ps_product_attribute', $ps_product_attribute ); $lists[$i]->form_addtocart = $tpl->fetch('product_details/includes/addtocart_form.tpl.php' );
|
|
|
|
|
Записан
|
|
|
|
gora4o
Захожу иногда

Репутация: +0/-0
Offline
Сообщений: 21
|
 |
« Ответ #104 : 24.09.2009, 14:04:00 » |
|
Пробую подключать этот участок кода но вываливается ошибками, высылаю Вам оригинальный код файла helper.php если можете то запишите этот код в нужное место, что бы ошибки не выбивало. Заранее благодарен.
|
|
|
|
|
Записан
|
|
|
|
beagler
Moderator
   
Репутация: +316/-4
Offline
Пол: 
Сообщений: 2994
http://beagler.ru/
|
 |
« Ответ #105 : 24.09.2009, 15:25:02 » |
|
Извини, нет времени. У меня этот модуль не установлен. Направление мысли я тебе задал.
|
|
|
|
|
Записан
|
|
|
|
cherry
Осваиваюсь на форуме
 
Репутация: +2/-0
Offline
Пол: 
Сообщений: 54
|
 |
« Ответ #106 : 01.10.2009, 12:01:13 » |
|
Спасибо за модуль!  А можно ли отображать товары текущей категории? И цены он показываеть в эквиваленте в долларах, хотя в VirtuеMart я указала рубли. Где это можно поправить?
|
|
|
|
« Последнее редактирование: 01.10.2009, 12:27:58 от cherry »
|
Записан
|
|
|
|
|
beliyadm
|
 |
« Ответ #107 : 01.10.2009, 15:32:20 » |
|
А можно ли отображать товары текущей категории?
Сам по себе нет, нужно немного модифицировать, заменив в SQL запросе хелпера идентификацию не по ID категорий из настроек, а получать текущее значение И цены он показываеть в эквиваленте в долларах, хотя в VirtuеMart я указала рубли. Где это можно поправить?
Валюту модуль берет из поля product_currency таблицы товаров, можете зайти в файл шаблона default.php и заменить <?php echo $item->currency; ?> на нужный параметр
|
|
|
|
|
Записан
|
|
|
|
cherry
Осваиваюсь на форуме
 
Репутация: +2/-0
Offline
Пол: 
Сообщений: 54
|
 |
« Ответ #108 : 01.10.2009, 15:48:50 » |
|
Спасибо, попробую.. А не подскажите, где можна посмотреть схему структуру таблиц (со связями ключами полями и тд) по VM?
|
|
|
|
|
Записан
|
|
|
|
|
beliyadm
|
 |
« Ответ #109 : 01.10.2009, 15:52:41 » |
|
А не подскажите, где можна посмотреть схему структуру таблиц (со связями ключами полями и тд) по VM?
а вот это хороший вопрос  нормальной блок схемы я не видел и сам ее не строил Единственно что у меня есть - документация для разработчика VirtueMart Developer Manual
|
|
|
|
|
Записан
|
|
|
|
cherry
Осваиваюсь на форуме
 
Репутация: +2/-0
Offline
Пол: 
Сообщений: 54
|
 |
« Ответ #110 : 02.10.2009, 17:19:23 » |
|
Спасибо за мануал!  Только некоторые статьи там пустые  у разработчиков, наверное, не было времени полностью документировать свой продукт  я так поняла это идентификатор категории, который в админке указывается $ids = explode( ',', $category_id ); Подскажите пожалуйста как определить id текущей категории, чтоб в выборку по товарам подставить? Для навигации по категориям использую модуль mod_product_categories
|
|
|
|
« Последнее редактирование: 02.10.2009, 18:08:18 от cherry »
|
Записан
|
|
|
|
beagler
Moderator
   
Репутация: +316/-4
Offline
Пол: 
Сообщений: 2994
http://beagler.ru/
|
 |
« Ответ #111 : 02.10.2009, 17:54:38 » |
|
$category_id = vmGet($_REQUEST, "category_id", null); но этот код может не заработать. Тогда - $category_id =JRequest::getString('category_id')
|
|
|
|
« Последнее редактирование: 02.10.2009, 17:58:37 от beagler »
|
Записан
|
|
|
|
cherry
Осваиваюсь на форуме
 
Репутация: +2/-0
Offline
Пол: 
Сообщений: 54
|
 |
« Ответ #112 : 02.10.2009, 18:19:11 » |
|
получилось!  только еще придется с запросом чего-то придумать, чтоб если становишься на категорию первого уровня, чтоб он показывал все товары подкатегорий.. А еще вопросик, как мне в шаблон default.php из helper.php передать $selecttype, чтоб в зависимости от его значения я могла выводить товар либо в табличном либо в дивном виде?
|
|
|
|
|
Записан
|
|
|
|
|
beliyadm
|
 |
« Ответ #113 : 02.10.2009, 20:56:25 » |
|
А еще вопросик, как мне в шаблон default.php из helper.php передать $selecttype, чтоб в зависимости от его значения я могла выводить товар либо в табличном либо в дивном виде?
в хелпер добавляете новый элемент массива $lists $lists[$i]->price = $selecttype; И дальше в шаблоне модуля оперируете внутри цикла foreach <?php echo $item->pname; ?>
|
|
|
|
|
Записан
|
|
|
|
cherry
Осваиваюсь на форуме
 
Репутация: +2/-0
Offline
Пол: 
Сообщений: 54
|
 |
« Ответ #114 : 02.10.2009, 22:24:06 » |
|
да я вначале так и думала.. а потом решила чего плодить одно и тоже значение в масиве, может можно передать как переменную.. ну это не принципиально можно и массивом 
|
|
|
|
|
Записан
|
|
|
|
|
beliyadm
|
 |
« Ответ #115 : 02.10.2009, 22:28:42 » |
|
ну это не принципиально можно и массивом  так массив то один, $lists, мы просто в него добавляем новый элемент и все (которого там раньше не было, потому дублирования нет)
|
|
|
|
|
Записан
|
|
|
|
cherry
Осваиваюсь на форуме
 
Репутация: +2/-0
Offline
Пол: 
Сообщений: 54
|
 |
« Ответ #116 : 02.10.2009, 22:56:26 » |
|
Спасибо! все получилось!  теперь хочу на странице реализовать возможность выбора кол-ва отображаемого товара на одной странице (кпримеру: 20 / 40 / 60), и постраничную навигацию соответственно.. т.е. это в default.php я добавлю <form>.. </form>, в которой опишу необходимые опции, затем методом пост передам кол-во товаров на странице.. а каким образом сформировать в action правильную строку ? т.е. чтоб вернуться на текущую страницу, чтобы потом в хелпере, я приняла пост-параметры..
|
|
|
|
|
Записан
|
|
|
|
|
beliyadm
|
 |
« Ответ #117 : 02.10.2009, 23:00:35 » |
|
Стандартную постраничную навигацию можно использовать только в компонентах В модуле только AJAX либо просто на JS листать заранее подгруженную таблицу
|
|
|
|
|
Записан
|
|
|
|
cherry
Осваиваюсь на форуме
 
Репутация: +2/-0
Offline
Пол: 
Сообщений: 54
|
 |
« Ответ #118 : 02.10.2009, 23:16:06 » |
|
Стандартную постраничную навигацию можно использовать только в компонентах т.е. в данном случае у меня такого не выйдет  а это еще и сортировку могут захотеть то по цене то по наименованию... В модуле только AJAX либо просто на JS листать заранее подгруженную таблицу
а есть примерчик скрипта? или лучше использовать компоненту, для отображения каталога? хотя вашим модулем мне действительно легко пользоваться и более менее все понятно.
|
|
|
|
|
Записан
|
|
|
|
|
beliyadm
|
 |
« Ответ #119 : 02.10.2009, 23:25:00 » |
|
а есть примерчик скрипта?
На jquery множество скриптов, подборка к примеру тут http://anton.shevchuk.name/javascript/jquery-datagrid-plugins/В работе на одном из сайтов пример тутВстроить подобный скрипт максимально просто даже для модуля. Если у вас подгружается не 1000 записей, то в пределах 20-500 отработка скрипта не должна быть заметна для пользователя. Там можно встроить и постраничную навигацию, и текстовый поиск по любому (либо по всем) полям. Либо же если записей много - смотреть в сторону datagrid, но с использованием AJAX подгрузки данных при запросе, это намного сложней в реализации
|
|
|
|
|
Записан
|
|
|
|
cherry
Осваиваюсь на форуме
 
Репутация: +2/-0
Offline
Пол: 
Сообщений: 54
|
 |
« Ответ #120 : 02.10.2009, 23:41:21 » |
|
УХТЫ! Cпасибо большое!  Jquery более чем подойдет!  Буду разбираться 
|
|
|
|
|
Записан
|
|
|
|
|