Музыкальный интернет-магазин на Drupal

Главные вкладки

Аватар пользователя boneg boneg 23 декабря 2011 в 10:41

На ваш суд новый сайт компании "Джаз-клуб-сервис". Сделан на Drupal 6.22 + Ubercart. Честно говоря, первый опыт работы с Ubercart, до этого интернет-магазины собирали, используя другой engine, но тут владелец захотел много мелочей, которые на Drupal сделать быстрее. Ссылка - http://jcs.com.ua

Комментарии

Аватар пользователя Antoniy Antoniy 23 декабря 2011 в 10:57

Отлично по моему и ассортимент хороший. Жаль, раздел "Маршевые духовые инструменты" пуст)

А чем такое меню делали с иконками? Меню - это таксономия?

UPD: онлайн-консультанта еле заметил, надо его поярче)

Аватар пользователя Vladimir_Z Vladimir_Z 23 декабря 2011 в 12:18

Хороший магазин получился. Немного медленно работает только.
Способ увеличения изображения товара, когда при наведении мышки увеличивается фрагмент изображения, мне кажется неудобным. Но это, наверное, кому как.

А чем сделаны табы под товаром (характеристики, отзывы, фото и тд.)? Это вроде не quicktabs.

Аватар пользователя Лексей Лексей 23 декабря 2011 в 15:39

А скидки каким модулем реализованы?
А чем такое меню делали с иконками? Меню - это таксономия?
А чем сделаны табы под товаром (характеристики, отзывы, фото и тд.)? Это вроде не quicktabs.
А как сортировку сделали?

без ОТВЕТОВ??? зачтем за спам...

Аватар пользователя boneg boneg 23 декабря 2011 в 17:17

1.Скидки - расчитываются исходя из разницы стоимости закупки и продажи.
2.Меню - таксономия, выводится из своего модуля.
3. Табы, системные сообщения, фильтр цены, все попапы (включая корзину) - jQuery UI
4.Сортировка - хуками views.

Аватар пользователя boneg boneg 23 декабря 2011 в 18:06

Штука бесплатная. Более-менее приличный чат (правда, я не понимаю, нахрена он тут нада). Интегрируется просто вставкой ссылки, которая при клике открывает сей фрейм.

Аватар пользователя boneg boneg 23 декабря 2011 в 22:42

"Ламер" wrote:

а заказ обратного звонка чем сделан?

hook_form + hook_mail))
"iNFerNo" wrote:
а какую нибудь инструкцию бы

hook_form_alter

Вообще тут все стандартными друпальными средствами, ничего военного. Поколдовать пришлось только тут - http://jcs.com.ua/kalkuljator-prokatnogo-oborudovanija , ну и немного повозиться с PHPexel, чтобы рисовать по всем брендам прайсы в *.xlsx на лету. Остальное самыми обычными средствами API. Счас подкручиваю sphinx, чтоб сделать нормальный поиск, завтра запущу. Хреново ищет друпальный поиск. В остальном сайт уже работают, контентщики заполняют, начались первые звонки от клиентов, заказчика очень волновал "сдвиг с мертвой точки" ))

Аватар пользователя tosha. tosha. 20 января 2012 в 15:35

Как по мне, так хорошо сделанный сайт. Так держать.
з.ы. Есть у меня и вопрс. Т.к. с друпалом только разбираюсь, пытаюсь понять, насколько он подойдет мне в моих проектах. Хотел поинтересоваться, каким образом у вас реализованы иерархические url страниц в соответствии с каталогом (например: http://jcs.com.ua/zvukovoe-oborudovanie/mikshernye-pulty/analogovye-miks...)? Я пока набрел в этом плане только на модуль Node Hierarchy, но его для семерки нет даже альфы... Или это фишка уберката?
Буду всеьма признателен за ответ.

Аватар пользователя boneg boneg 20 января 2012 в 16:10

Модуль Ubercart Catalog на сайте не используется. Все товары выводятся таксономией. Соответственно в pathauto для товаров указано формирование урлов в соответствии термина, к которому привязаны ноды.

Аватар пользователя Angelina702 Angelina702 24 января 2012 в 19:54

Подскажите, пожалуйста, а с помощью чего реализованы вкладки "характеристики, отзывы, фото, доставка" в товарной карточке? Как осуществляется переключение между ними? Это такой модуль?

Аватар пользователя boneg boneg 17 марта 2012 в 18:42

Добавил сравнение товаров. Не самый красивый вариант получился, но придумать че-нить получше в голову не пришло.

Аватар пользователя Camor Camor 18 марта 2012 в 14:54

Хороший сайт. Из минусов могу сказать, что на странице товара блок "Рекомендуем" лучше убрать. Пользователи будут больше ходить и меньше покупать. Тем более, что там бывают товары по более низкой цене. И ещё само меню по высоте очень большое и не влезает на по высоте в популярнейшие разрешения.

Аватар пользователя boneg boneg 18 марта 2012 в 15:34

Ну дизайн делался по пожеланиям заказчика. И блок "рекомендуем" - для каждого товара заказчик заполняет рекомендуемые сопутствующие товары (если не заполнил - выводятся случайные из этой же категории). Ну и собственно как идут продажи меня мало волнует, заказчик обращается за новым функционалом, я реализую и получаю деньги)) А кто что покупает - тут 90% зависит от работы менеджера, ибо посетители по сайту ходют активно

Аватар пользователя alex_shut alex_shut 18 марта 2012 в 15:50

"boneg" wrote:
тут 90% зависит от работы менеджера

да? любопытно. Дет вычитывал что много зависит от того как сделан магаз. Но спорить не буду, в изготовлении магазов далеко не спец.

А то что хотелки заказчика превыше всего - это да. Тут против не попрешь))

Аватар пользователя boneg boneg 18 марта 2012 в 15:54

90% покупок в таком инет-магазине (где большинство товаров >1000$) идут через телефонный звонок, кто будет оплачивать такой товар просто через биллинг у нас? Поэтому если тут у менеджера не подвешен язык - то ни демпинг, ни дазайн погоду не сделают.

Аватар пользователя boneg boneg 18 марта 2012 в 16:23

"Camor" wrote:
Тем более, что там бывают товары по более низкой цене.

Спасибо за замечание, натокнули на идею! Теперь если заказчик не заполнил сопутствующие товары - выводятся из этой категории только товары с более высокой ценой.

Аватар пользователя aa2007 aa2007 18 марта 2012 в 22:10

Подскажите, как вы вынесли сортировку? На сколько я знаю раскрытая сортировка во views привязана к блоку с раскрытыми фильтрами. Или это не вьюшная сортировка?

Аватар пользователя boneg boneg 19 марта 2012 в 0:11

Это вьюшная сортировка.

Просили инструкцию. У меня работает так:
1.Для типа материала создаем все необходимые поля для всех категорий.
2.Машинные имена полей задаются по схеме field_for_ID_термина, field_for_ID_термина2, field_for_ID_термина3, field_for_ID_термина4 - где в качестве ID термина пишем номер термина, для которого показываем поле в форме сортировки и в форме создания/редактирования ноды. Общие поля называем как хотим.
3.Альтерим форму создания/редактирования ноды, чтобы при выборе нужного термина (у меня это категории) средствами AJAX подгружать нужные поля (field_for_334 и т.д.), подставляя в качестве ID выбранный термин.
4.Все поля которые юзаются только для фильтрации исключаем из вывода.
5.Создаем views с раскрытой формой, в качестве типа вывода указываем поля и выводим только нужные поля (вывод "материал" делает node_load, а нам в принципе не нужно подгружать всю колбасу).
6.Альтерим форму фильтра, что бы показывать только нужные поля формы аналогично пункту 3.
7.Если есть словарь категории и бренды как у меня на приведенном сайте - заальтерить поиск по бренду в категории и поиск по категории в бренде.
8.Альтерим views для расширенной сортировки если нужно.
9.Наслаждаемся.

Легко поддерживать, добавить любое доп.поле - 2 секунды. Если оно общее - называем как хотим. Если динамическое - как в пункте 2. Надеюсь изъяснил понятно. Результат вы видели. В итоге удалось обойтись одним типом материала с множеством полей (уже более 10000 товаров в 500 категориях для 200 брендов), а не плодить варианты.

С чем пришлось повоевать чтобы иметь нормальную производительность:
1. Всеми силами избегать массовый node_load, тизеры выводить только одним запросом с нужными полями на сайте.
2. Написать дополнительный файловый кеш для своих блоков (в данном случае это главное меню сайта с фото категорий, блок новостей, блок с брендами и т.д.), который обнуляется при hook_nodeapi (добавление/изменение, удаление товаров) и работает для авторизованных/неавторизованных, анонимусам кеш выдается через Boost. Самописный файловый кеш дал возможность удобно контролировать все что нужно закешить отдельно. Ибо выдавая авторизованым юзерам обилие динамических ссылок с алиасами на странице жрет много запросов.
3. Свой кеш для прайсов, генерируемых библиотекой PHPexel, который тоже обнуляется по hook_nodeapi. работает для авторизованных и анонимов.
4. Поиск - sphinx (вы можете заюзать любой другой аналог), чтобы избавиться от прожорливого и неуклюжего друпального индексатора. Как минимум. Как максимум - юзер должен легко найти товар в магазине по запросу в любом падеже.
5. Ну еще много мелочей для повышения производительности (как приложения так и настройка сервера).

Знаю, что можно было пойти через кешроутеры и доп.модули, но хотелось иметь быстрое и легко настраиваемое решение, заточенное имено под этот проект, которое легко поддерживать самому (в данном случае сайт - мой долгосрочный клиент).

Аватар пользователя dlj dlj 21 марта 2012 в 22:29

интересно как вы организовали навигацию из категории в под-категорию. судя по всему используется пара вьюх, но как удалось организовать показ ссылок на другие вьюхи с изображениями? во вьюхе "категория" отображается список вьюх-подкатегорий или как? для каждой подкатегории используется отдельная вьюха или одна и та же, но с динамически изменяемыми параметрами? подскажите пожалуйста как это можно реализовать или может уроки есть какие-то? сейчас просто создаю как-раз интернет-магазин автозапчастей и столкнулся с проблемой отображения ссылок на подкатегории в виде изображений

Аватар пользователя boneg boneg 22 марта 2012 в 10:27

Для изображений терминов используется Taxonomy Image (в Drupal 7 это уже не нужно, т.к. нет проблем с добавлением полей к терминам). Для терминов, у которых есть "дети" просто используется вторая вьюха. Подмена вьюхи для родительских терминов с помощью модуля TVI.

Аватар пользователя dlj dlj 23 марта 2012 в 1:41

"boneg" wrote:
Для изображений терминов используется Taxonomy Image (в Drupal 7 это уже не нужно, т.к. нет проблем с добавлением полей к терминам). Для терминов, у которых есть "дети" просто используется вторая вьюха. Подмена вьюхи для родительских терминов с помощью модуля TVI.

нельзя ли поподробнее о настройках вьюх? как заставить отображаться во вьюхе только термины, которые являются дочерними по отношению к какому-то термину. т.е. я понимаю что можно критерий фильтрации со списком нужных терминов, но это придётся вручную для каждого термина делать страницу и прописывать какие именно подкатегории там будут отображаться. Модуль TVI к сожалению под D7 есть только в дев версии, которая нормально не работает. Судя по моему знакомству с этим модулем основная его функция - это заменять страницу вывода содержимого по термину на вьюху. Если предположить, что этот модуль работает как должен, то все равно не понятно как он будет регулировать вывод дочерних терминов для разных терминов-родителей используя только одну вьюху. Я так понимаю, что этот модуль только назначает вьюху для вывода, а всё волшебство настроено в самой вьюхе. Сегодня целый день пытался настроить, но так ничего похожего не получилось. Ещё хотел спросить, у Вас добавление новой подкатегории сводится только в добавлении нового термина, а всё остальное делает вьюха или ещё нужно какие-то манипуляции выполнять?

Аватар пользователя boneg boneg 23 марта 2012 в 1:50

"dlj" wrote:
как заставить отображаться во вьюхе только термины, которые являются дочерними по отношению к какому-то термину

Почитайте доки views об взаимосвязях и аргументах
"dlj" wrote:
Модуль TVI к сожалению под D7 есть только в дев версии

Это можно обойти хуками и без TVI, но без элементарных знаний PHP вам не обойтись.
"dlj" wrote:
у Вас добавление новой подкатегории сводится только в добавлении нового термина

Да.

Аватар пользователя dlj dlj 23 марта 2012 в 2:07

"boneg" wrote:
Почитайте доки views об взаимосвязях и аргументах

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