Ajaxify Node Basket -2012: Apocalypse Edition

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

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

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

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

Страница настроек

После включения модуля, в меню настроек сайта появится новый пункт: Настройки Node Basket(не дословно так, но мимо не проскочите)). При заходе на страничку по данному пункту(admin/settings/nodebasket) откроется вам примерно такой вот вид:

Node Basket: страница настроек.

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

Выбрали. Сохранили. Видим такое:

Node Basket: страница настроек с уже выбранноми типами нод для модуля.

Предлагается следующее, в порядке отображения на странице (после выбора типов):

1. Снять галочку или оставить отмеченным чекбокс с опцией варианта отображения кнопки добавления ноды в корзину. Если отмечено, то кнопка появиться под основным текстом у каждой ноды(настроенного типа, разумеется). Если же в планах выводить эту кнопку своим хитрым методом (через вызов в файле шаблона ноды конструкции drupal_get_form('nodebasket_nodeviewform', $node)), то опцию следует отключить.

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

3. Выбор поля(модуля Content Construction Kit (CCK)) с ценой продукта. Из уже существующих. Отобразиться, если в выбранных типах нод такие поля присутствуют и подходят в качестве "ценника". Что делать понятно, да? Идем дальше.

4. Последним пунктом настроек: поля для ввода суффикса цен. Поясню: этот суффикс будет добавлен к цифрам "ценника". Если при настройке поля на страницах редактирования типов нод вы уже подобное указывали, то для нашего модуля надо сделать это еще раз. При взаимодействии с CCK-полями Node Basket оперирует лишь их значениями('value'), не отформатированным видом, от того и нужда в дублировании суффикса.

Вот с настройками и все.

Кнопка добавления в корзину при построении "вида" (модулем Views)

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

Демонстрация работы модуля

На все оставшиеся возможные вопросы по работе с модулем, думаю, лучше слов ответит наглядная демонстрация доступного функционала на "живом" сайте (ссылка ниже).

Dalay

Комментарии

Добавлен русский перевод.

от лица взывающих с портянки спасибо!

1. Количество товаров в поле ввода редактируется, но само кол-во не меняется. Вот ввел цифры, нажал Enter - и ничего. Меня, правда, и кнопочки '+' и '-' устраивали, там всё работает, но все же хотелось попробовать новую версию.
2. А как добавить стоимость заказа в email-сообщение (может быть, я что-то пропустил ?).

Прежде всего спасибо за первый "бажный" коммент). Далее, по пунктам:

1. На демке такой момент тоже присутствует? Если нет, то вывод очевиден - конфликт модуля с чем-то на вашей стороне. И тут я бессилен.

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

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

Ага! В IE9 не работает, а в Опере - всё ОК! Интересно...

Google Chrome и Mozilla Firefox - тоже работает. Что-то с IE9 не то.

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

Работает. Сейчас даже Enter нажимать не надо. На keypressed реагирует.

На самом деле - на click(), для ие, долгих лет его создателям.

Но 2 цифры уже не введёшь :(

Введешь, если быстро ))(я 4 успеваю) ...лан, придумаю что-нить.

Надо бы как-то к Enter'у привязаться всё-таки.

Сделал, попробуйте.

Похоже, всё в порядке.

Спасибо. Потестю завтра ещё.

Пожалуйста. Архив обновил.

А нет желания добавить в этот модуль такой функционал.

После оформления заказа и отправки данных пользователю и админу, создавать ноду-заказ с номером заказа, где менеджеры могут вести

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

и ни какие уберкарты не нужны будут...

Спасибо.

Непременно добавлю, если сам буду нуждаться в подобном. Пока же, увы, не обрадую.

а за денюшку?

ок.

а где хистори заказов чистить?

а админ не может хистори заказов юзеров увидеть?

В массиве basket_history данных сессии пользователя, сделавшего заказ ($_SESSION['basket_history']).

что то фиг так найдешь

А почему заказавшему не дублируется инфа о том что он заказ сделал... было бы неплохо... А хисторе конечно лучше в виде заказов (номер и дата и количество товаров) в которых будут уже пункты на продукты...

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

ксти еще при удалении позиции из корзины - корзина обновляется а в ноде кнопка добавить в корзину - не активная. приходится обновлять страницу. так задумано?

Ваши пользователи с корзиной играться будут или по назначению использовать?

да это я экспериментирую. но всякое может быть добавил передумал удалил.

Здравствуйте! Заметил что модуль не шлёт письма если в поле почты ввожу мэил в котором содержится нижнее подчёркивание. В чём беда может быть?

В чем выражается "не шлет"? Ваше, с подчеркиванием в имени, на демо-адрес с демо сайта дошло.

"Не шлёт" - не высылает уведомление на админскую почту если в почте покупателя есть нижнее подчёркивание, с остальными всё ок. Похоже, это проблема стороннего модуля, а конкретнее - грешу на Mime Mail. Буду копать. Сами не сталкивались с таким?

Пардоньте за разведение паники, действительно косяк в модуле Mime Mail. По причине отсутствия в регулярных выражениях нижнего подчёркивания.
Кстати, $regex = "^[0-9\-\(\)\ \+]+$"; насколько я понимаю должен пропускать телефоны с дефисами? (например: +7-012-345-6789 или +7(012)234-5678)

Спасибо огромное за модуль!

Добрый день! Возникла проблема: если выбираешь два типа материала для корзины, то выбор поля (ССK) с ценником, представляется только либо для одного, либо для другого типа материала. CCK не позволит добавить два поля с одинаковыми Field name.

Что делать? куда двигаться?

Все решилось, чет затупил, есть же Existing field!

) Опередили

Здравствуйте, большое спасибо за модуль очень понравился

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

есть некоторые проблемы с keypress можно его как нибудь сменить на онклик и кнопочку обновить приклеить ? с javascript я вообще не дружу и разобраться не в моих силах

keypress() присутствует лишь в хаке для ИЕ. По багрепорту комрада Looser. Обсуждается несколькими комментами выше. Там же и о кривой работе click() вместо keypress(). Просьба, в следующий раз более конкретно обрисовывать суть бага, в догадки играть ваще неприкольно, особенно с утра.

Кусок кода с хаком из nodebasket.js:

if($.browser.msie) {
    $('input.count-value').blur(function() { $(this).change(); });
    $('input.count-value').keypress(function(e) {
    if(e.which == 13) $(this).change();
                                  });
}

Кнопка "обновить" отображается, когда у пользователя отключен JS. Если нужно отображать ее постоянно, то закомментируйте строку 10 в nodebasket.js, эту:

$("input.update-count", context).remove();

Здравствуйте. Отличный модуль. Не раз им пользовался. А сейчас столкнулся с проблемой, модуль не работает с темой earthen. Потыкался с файрбагом и определил что начинает работать при активации "Отключить javascrip полностью". В чем проблема, куда копать подскажете?

Вычленил скрипт который мешает работе корзины /misc/drupal.js. Но отключение этого скрипта имхо не есть гуд. Может подскажете что необходимо поменять в нем для корректной работы вашего модуля?

И что же я могу подсказать, не зная, что именно в drupal.js мешает работе модуля в Вашем случае?

В Файрфоксе есть замечательная JS-консоль. Других подсказок увы...

Привет! Отличный модуль.

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

Так и в чем проблема? Рассказать, как в текст картинки вставлять?

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

У модуля есть theme_nodebasket_basketview() для таких вещей. Вы представляете, каким уберкомерсмонстром стал бы уже Node Basket, если бы в него добавлялся функционал по каждому единичному мнению в комментах.

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

Ок, буду разбираться.

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

И еще так, допустим я зашел на сайт хочу купить 2 шт Item One, как это сделать не понятно, только в корзину переходить, два раза добавить нельзя и поля с количеством в блоке корзины нет.

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

если сами тратить время не хотите - на сайте есть раздел услуги