Ajaxify Node Basket 7.2: релиз модуля легкого и простого магазина на AJAX для Drupal 7

Таки свершилось. Конечная версия модуля под "семерку", с новым функционалом и возможностями, успешно допилена.

Краткий экскурс в ключевые обновленные возможности

  • Добавление нод в корзину происходит так же, как и в ранних версиях. По крайней мере внешне. Внутренняя же жизнь сего процесса отличается от былого чрезмерно. Вся JavaScript`овая динамика ныне исполняется исключительно через Drupal Ajax API. В свете чего отпала надобность использования модулем своих собственных js-файлов.
  • У блока корзины появился свой темплейт-файл. Дефолтно, "нарисованное" в нем отображает свернутый список отложенного в корзину, где ссылка на "развернуть" информирует так же и о количестве находящихся в корзине товарных позиций. Если у товаров есть цена, то под списком появляется строка с общей суммой заказа. Ну и в самом низу - ссылка на страницу корзины.
  • Заказы. Они теперь сохраняются, как ноды соответствующего типа. Со всеми вытекающими из этого радостями.
  • Уведомления о создании новых заказов ныне умеренно настраиваемы. Помимо администрации сайта письмо о создании заказа отправляется и пользователю, автору заказа. Если данная опция включена в настройках. Отдельный шаблон письма место быть имеет, но как theme-функция, в отдельный файл выводить его посчитал лишним.

Подробное описание настроек и принципов работы модуля

Первоначальные настройки

На странице модулей найти Node Basket можно будет в группе "Коммерция"(или "Node Commerce" в иноземном варианте).

После установки модуля в меню конфигурации сайта появится новый пункт - "Node Basket" (/admin/config/nodebasket).

Ссылка на страницу настроек модул Node Basket

На вкладке основных настроек отмечаем типы нод из всех созданных на сайте. За исключением типа "заказ", естественно.

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

Модуль Node Basket: настройка полей для типа товар.

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

Модуль Node Basket: настройка почтовых уведомлений.

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

Модуль Node Basket: настройки доступа для ролей пользователей.

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

Модуль Node Basket: включение отображения блока с содержимым корзины.

Настройка заказа

Как уже было сказано ранее, заказ у нас теперь есть ни что иное, как рядовая нодо-единица.

Тип материала "Заказ" будет автоматически создан при установке модуля. С двумя, лишь, "вшитыми" экстра-полями с настраиваемым отображением в теле заказа:

  • "E-mail пользователя" - почтовый адрес организма, сотворившего заказ;
  • "Содержимое заказа" - собственно, означает то, что означает;

Страница настроек отображения полей типа материала 'Заказ' модуля Node Basket.

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

Работа модуля. Добавление товаров/нод в корзину

Модуль настроен, права на его использование обозначены, и блок корзины находиться в нужном месте. Что видит пользователь(которому видеть разрешено)?

У типов нод, что нами выбраны, как товары, теперь есть кнопка "Отложить в корзину". По нажатии на оную в блоке с содержимым корзины происходят соответствующие метаморфозы, а текст на кнопке меняется на "В корзине". Все изменения при манипуляции с данными корзины, и при ее редактировании в том числе, происходят без перезагрузки страниц, путем ajax-запросов.

Ajax-корзина с обновленными данными после добавление в нее нового товара.

Редактирование содержимого корзины и оформление заказа

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

Страница редактирования содержимого корзины.

На странице оформления пользователь заполняет обязательное "вшитое" поле контактного e-mail`а, и все другие поля, что мы посчитали нужным включить в заказ. И отправляет заполненную форму на сохранение и исполнение.

Страница оформления заказа

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

Сообщение об успешном сохранении нового заказа.

Скачать и примечания

Возможно в будущем написанное выше будет разбавлено новыми деталями или изменениями, если что упустил помянуть.

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

ВАЖНО!!!
При обновлении модуля с версии 7.1 прежде всего необходимо отключить и полностью деинсталлировать "старую" версию. Это два совершенно разных модуля.
Dalay

Комментарии

Огромное Вам спасибо за помощь!

Здравствуйте! "В формате "простого текста"(plain text) только как текст." А где изменить формат текста?

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

Я вот добавил такое поле, наверное такое можно используя рулесы сделать. Но хотелось бы что бы вшито было в модуле = ))

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

Спасибо за понимание.

а почему например не сделать так:
$items[] = $item['qty'] . ' x ' . l($item['title'], 'node/' . $nid) . ': ' . $item['price'] . ' руб.';

в template_preprocess_lightshop_block_display()

Так переопределяйте в шаблоне, как вздумается. К чему этот вопрос?

В шаблоне доступна только переменная с отрендеренным списком итемов, сами итемы менять нельзя... или я чтото не понял

Имелось в виду через ВАША_ТЕМА_preprocess_lightshop_block_display() в template.php.

спасибо! сглупил

а что если в модуль добавить такую штуку: чтобы в форме "lightshop_add2basket_button" опционально отображалось поле с количеством добавляемого товара, тогда в колбэке формы "lightshop_add2basket_button_submit" надо будет всеголиш изменить $item['qty'] = 1; на $item['qty'] = $form_state['input']['count']; ... 'count' соответсвенно имя поля в которое вбивается количество

А нахрена?

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

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

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

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

Конфликт с другими модулями, кривая тема или одна из сотни других причин... Что там точно и как это чинить без копания в самом сайте никто не скажет.

Спасибо, нашел в чем причина буду устранять. Можете еще подсказать я могу исправить основное поле заказа email на телефон это не вызовет сбой в логике? и где можно приписать доп. функцию при отправке заказа?

Поле email трогать не надо, создавайте новые поля.

"и где можно приписать доп. функцию при отправке заказа?"

В hook_node_insert или hook_node_submit.

А можно заменить поле email на телефон а то мне только это осталось а по тз нужен телефон а не мейл поэтому создание нового поля не подходит. Или просто подскажите как отключить проверку на валидность почтового адреса, а поле я сам перепишу. Спасибо.

Слишком много завязок по всему коду на email пользователя, переписывать тогда придется весь модуль. Лучше будет Вам поискать более подходящее под задачи решение.

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

https://www.google.com/search?q=не отправляется почта site:www.drupal.ru

Ошибок нет где? В логах сервера смотрели?

Больше тут ничем и не помочь.

Да, дело похоже не в модуле, буду разбираться. Ошибок нет ни при отправке заказа, ни в логах. При этом функция mail отсылает, если не разберусь, заменю ее вместо drupal_mail

Добрый день!
Присоединяюсь к вопросу Елены.
Все работает, заказ добавляется в корзину, но после оформления заказа и заполнения контактной формы детали заказа не приходят ни на почту администратора ни на почту покупателя.
Почта на сайте работает, существующая форма онлайн-заказа на базе модуля webform исправно шлет подтверждения как админу так и клиенту.

кстати и с демо-страницы почта не приходит после оформления заказа.

Естественно не приходят. Не хватало еще, что бы спам рассылали через демо-форму. На админский мейл все отбивается, как и должно. Вы с Еленой вообще первые, кто сообщает о существовании проблем с отправкой данных заказа по мылам.

Присоединяю ответ Елене. Ищите ошибки в логах. Описания типа "детали заказа не приходят ни на почту администратора ни на почту покупателя" говорят мне чуть больше, чем нифига.

Кропотливое изучение логов, к сожалению, ничего не принесло. Нет там упоминаний о нашей ошибке.
Спасибо за поддержку.

Как отключить поле Email в типе материала Lightshop?
ну или хотябы сделать необязательным полем!?

Обязательность ввода email хотябы убрать!
Или ввести по умолчанию email а его скрыть!?
Такое возможно???

Модуль я еще не смотрел. Но насколько понимаю, можно добавить поле chekbox с текстом типа "У меня нет мыла", и написать скриптик jQuery строчек на 5, если чекбокс выбран, то скрыть поле Email и задать ему value со своим дефолтным ящиком.

2 вопроса.

1. Не удается вставка токенов из полей регистрации в поля заказа. например - [current-user:field-city].
Токен фильтр включен для Plain text.

2. Количество товара в ноде в некоторых случаях надо. Подскажите идею.
.

1. В текущей реализации модуля для заголовков поддерживаются только токены ноды.
2. Ничего не понял.

1. наверняка есть варианты передать значение по умолчанию другим способом.
2. это о ветке от 11.09.13 - 16:50.

Еще раз перечитал. Мы друг друга не поняли.

В регистрации пользователь указывал поле напр., "Город" (field-city). В шаблоне типа Light Shop Order создаем поле Город со значением по умолчанию [current-user:field-city] - значение поля field-city для текущего пользователя. Не работает. Или я что не так делаю.

А с другими типами нод работает?

https://drupal.org/project/field_default_token

спасибо

При использовании модуля Light Shop 7.x-1.8 с Adaptive Theme 7.x-3.1 товары в корзину добавляются, но на странице корзины не работают кнопки Clear basket и Checkout.
После их нажатия на месте корзины появляется пустая страница с текстом
"Do you really want to delete all items from the basket?" или "Checkout" соответственно.

Если вместо нажатия кнопок к текушему url /basket руками добавить /basket/clear или /basket/checkout то все работает правильно.

При переключении на тему Bartik все работает правильно.
Drupal 7.24, Light Shop 7.x-1.8 (пробовал dev - результат тот же)

В чем может быть причина и как вылечить?

PS Хотел добавить сюда ссылку на сайт где все это можно увидеть в живую но получил сообщение "Спам детектед"

Обратитесь к автору Adaptive Theme. Я им не являюсь.
Ссылок не нужно.

Понятно, спасибо за ответ.

Я решил эту проблему удаляя методом тыка лишние строчки из шаблона page.tpl.php. В итоге нашел строки которые вызывают проблему.
Это: "print render($title_prefix);" и "print render($title_suffix);"
Можно просто удалить их.

Спасибо за пред подсказки.
Gmail требует аутентификации почты. Пришлось ставить модуль SMPT и настроить его на почту хостера.
При заказе теперь возникает ошибка, связанная и с Light Shop и с SMPT. Код длинный, чтобы увидеть - можете заказать что нибудь на newdental.zp.ua.

Накой Вам Gmail при отправке почты с сайта?
В любом случае, если есть проблемы с почтой, то ищите их источник в настройках сервера. Модуль же использует только лишь стандартные друпаловские мыльные обертки, не более того.

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

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

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

Dalay. Прошу прощения за беспокойство. К модулю магазина это не имеет никакого отношения.
Лучше этот топик удалить.

Пусть будет. Как прецедент.
У кого то еще обязательно будут траблы с мылом. Напишите для оных, что было в Вашем случае.

Длинная история. Борьба со спамом почтовых служб + настройки хостеров + я сверху перемудрил.

Лучше рассказать что-нибудь дельное про этот модуль.
Например, как собраны страницы с разновидностями цвета, упаковки, дополнительных запчастей.
newdental.zp.ua/content/ndflex
newdental.zp.ua/content/artikulyator-a7plus
а тут почти 400 наименований с подсказкой
content/zuby-plastmassovye-yamahachi
И делается все не сложнее, чем на Commerce или Ubercart

Добрый день!
Кнопка "Очистить корзину" в блоке корзины отсутствует или я чего то недоглядел?