Обновление Ajaxify Node Basket: версия с «ценником»

Данное обновление модуля основой своей посвящено теме многочисленных просьб от веб-трудящихся - установление и отображение стоимости товара/продукта в корзине. Теперь у модуля Node Basket такая опция появилась. В качестве цены продукта берется значение CCK-поля, определенного в настройках модуля.

О настройке поля с ценой

Возможность назначить ценником нужное поле появиться на странице настроек модуля сразу же после назначения определенного типа(типов) материала продуктом.

Страница настроек модуля.

В выпадающем списке вы можете выбрать одно из уже созданных полей «цифровых» типов float или integer. В списке будут отображены только те поля, что принадлежат типу(или типам) материала, уже назначенному, как продукт.

Помимо выбора поля с ценой можно, при желании, так же задать и суффикс, добавляемый к значению поля при отображении содержимого корзины. Настройки суффиксов, определенные при создании нового поля для типа для Node Basket не действительны: посчитал, что «рентабельней» внутри модуля будет иметь свои собственные суффиксы для цены.

«Кнопка для Views».

Ужаснувшись запросам, что генерирует Views с подачи модуля Views Custom Field, добавил в Node Basket «вьюсовы» обработчики отображения кнопки добавления в корзину для нод при формирования «вида». При манипуляциях с настройкой и добавлением полей в Views кнопка «добавить в корзину» может отныне быть обнаружена в группе «Node»(или «Материал», ежели ваши Вьюсы подверглись обрусению):

Кнопка «добавить в корзину» для нод определенного типа теперь доступна в Views в группе «Материалы».

Что еще нового

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

Корзинка с отобранным товаром модуля Node Basket.

Страница корзины с подробной информацией о ее содержимом.

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

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

Скачать модуль

Dalay
Комментирование закрыто

Комментарии

Спасибо! Буду дорабатывать :)

Добавил возможность «внедрения» поля кнопки для нод в Views. Описание выше дополнено и архив с файлами, соответственно, обновлен.

за модуль большое спасибо! давно искал...

Заметил несколько глюков
1) история покупок вылазит за приделы блока
2) картинки корзины не правильно выводятся (где-то криво, где-то налазят на текст).
3) третий глюк более серьезный - так сказать конфликт с модулем viewscarousel. при добавлении в корзину карусель слетает (перестает отображаться)

Первых два так пустяки - решаются быстро. с третьим уже проблема.

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

А так модуль супер!

Спасибо за внимание к модулю.
По глюкам:

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

3) Собственно, модуль писался «под Друпал», а не под модуль Viewscarousel.:) Который конфликтует много с чем. Попробуйте рецепт из этой темы: в файле viewscarousel.js модуля найдите строчку:

$this = $('#' + id);

и замените ее на:

$this = $('#' + id, context);

"1) и 2) вполне ожидаемы - не может быть, естественно, универсальных css-правил, следуя которым отображение будет одинаковым с любыми темами и в любых браузерах. Стили отображения для модуля добавлены лишь исходя из презентационных целей, и предполагается, что для каждой отдельно взятой темы они будут адаптироваться к оной мозолистыми руками сайтоваятеля."

Править нужно nodebasket.css, правильно ли я догадался?

Лучше делать это в css-файлах темы.

Спасибо за скорый ответ.

да модуль Viewscarousel глючный... ссылки не помогли... мне удалось выйти из положения грубым методом- закоментировал строку $('#basket-block').html(data.getbasket).animate({ opacity: 1 }, 500)
Честно говоря я в скриптах ноль.. сам программист с++, с пхп еще разобраться могу, но дальше не гугу.

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

Буду следить за обновлениями модуля а сайт в закладки.

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

Можно ли при оформлении заказа ввести произвольное количество, например, 150 кг или 20 штук?

Ну если только в комментах к заказу.

А принципиально добавить возможно?
Простой ввод числа в поле Количество. Или через модальный диалог, маленькую формочку.
Я новичок, и бегло не могу это оценить.

P.S. Будет ли версия модуля для Drupal 7?
Почитал впечатления о Drupal 7, понравилось.

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

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

Еще про формат номера телефона.

Пробовал ввести в формате (код) 123-4567 - "неправилььный формат номера телефона"
Но ведь такой формат привычен для обычных пользователей.

Валидация этого поля регэкспом чекается, странно, что ваш формат не проходит:

// Строка 564, файл nodebasket.module
$regex = "^[0-9\-\(\)\ \+]+$";

Попробовал подставить свой "-" - не помогло.
Почитал статью Регулярные выражения — Википедия
Подраздел "Традиционные регулярные выражения в UNIX":

шаблон DNS-имени, куда могут входить буквы, цифры, минус и точка-разделитель: [-0-9a-zA-Z.];

По аналогии поставил:
$regex = "^[-0-9\(\)\ \+]+$";

Заработало! :)

P.S.
А что означает слово "dalay" в начале модуля в комментариях?
Погуглил, нашел лишь Dalai - Далай [Лама]

Пропустил правило относительно минуса:
Чтобы добавить символ - в набор, его следует поместить туда первым или последним. Например:
шаблон DNS-имени ...

Может, у меня старый php
Или такой php, где используется лишь
"Расширенные регулярные выражения в стандарте POSIX" (подраздел из той же статьи в Вкикпедии)

Насчет старый это очень врядли, функция ereg() поддерживается в PHP еще с 3 версии. Возможно, POSIX в PHP не включен, но это как то уж очень маловероятно.

Качните программку Regex Coach(линк на версию под линух) и балуйтесь с регэкспами вволю.

пс
Шутку про «что означает слово "dalay" в начале модуля в комментариях» не оценил.

Dalay, спасибо!
Прошу извинить, был невнимателен. В e-mail оповещении заметил и понял, что это Ваш ник.
Извините!

:)

> Качните программку Regex Coach(линк на версию под линух) и балуйтесь с регэкспами вволю.

Под Ubuntu не пошла, зато смотрю ее документацию.
А для Ubuntu нашел через Центр приложений Kiki, правда, на Pythone (кажется), а не на Lisp'е.

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

Спасибо за плагин!

Подписался на комментарии

Заметил, что на странице Корзина "ломается" 1-я строчка footer'а.

Вот черт его ведает о чем идет речь. Как девочка ломается? Тогда дайте ей созреть, даст сама.

FF 3.6.13 Нетбук, разрешение 1024х600, тема Marvin, Drupal 6.19 Можно добавить скриншот?

Вышел из положения, добавив в Footer message пустую строку в начале.

Часть 1-й строки Footer message (.admin/settings/site-information) на странице /basket размещается в строке перед логотипом корзины и ссылкой "Оформление заказа", оставшаяся часть Footer message на следующей строке.

Проверьте в Гарланде. Если тот же баг, то да, дайте скрин глянуть(что бы ссылка в комментах добавилась поставьте перед http какой-нить символ, например так: __http://йа_адрес_ссылки).

В Garland с Footer Message без проблем.
Но ссылка на корзину с небольшим багом (Фрагмент скриншота в Garland _zalil.ru/30331173 )

В Marvin (1280 х 1024 и 1024 х 600) еще один баг.
В блоке "Корзина" ссылка "История уже оформленных Вами заказов" заползает на следующий блок.

(Фрагмент скриншота _zalil.ru/30331454)

_ убрать

Ну какой же это баг. Вот тут человеку уже отвечал на подобное, справедливо и для вашего случая.

Спасибо. Извините, пропустил.

Спасибо Вам большое за модуль. Но возникла следующая проблема:

Сайт у меня на двух языковых версиях (русская и английская версия), под администратором блок ваша корзина отображается правильно в обеих версиях, а вот под анонимным пользователем при обновлении страницы в английской версии, блок корзина возвращает русские строки.

С чем может быть связано?

при отключенном кеше все нормально... Есть варианты?

На сайт дайте глянуть.

В опере при обновлении сразу появляется надпись Your Basket is Empty, но потом меняется на русскую и если сделаете заказ в английской версии то сразу все нормально, но при обновлении все строки и ссылки опять меняются на русские.

Да, согласно текущей реализации модуля так и должно происходить. Медитирую... Исправлю.

Удачной Вам нирваны ;)

И нафиг мне тогда будут нужен этот друпал?

xD тогда экстаза после удачно проделанной работы с Drupal'ом)

Ладно, поеб...мся

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

Спасибо за проделанную работу. Обновил полностью все файлы, но эффект абсолютно тот же :(

http:_//zgw.zet-media.com/en/content/production

Допишите в самом начале функции nodebasket_preprocess_page()(файл nodebasket.module, стр. 174):

global $language;

зеванул обьявление

http_://zgw.zet-media.com/en/content/production

кеш включил. Смотрите

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

Если мы говорим о Друпале, то разве не очевиден ответ? - в сторону мануалов по Drupal API, куда ж еще.

Спасибо за модуль, Dalay! Очень полезная вещь :)
У меня возник вопрос (В PHP я слабак), можно ли каким-то образом при заказе отображать CCK поле с размерами одежды, например XL 42-46, сложно ли это будет интегрировать в модуль?
Т.е. например имеется тип контента - товар, а в нем есть ССК поле text (select list), а в нем указаны размеры XL 42, XL 46. Когда админ создает ноду типа товар, он может указать несколько размеров, т.е. XL 42 и XXXL 48 например. Можно ли сделать чтобы на странице оформления заказов отображался этот селект лист(с размерами, выбранными админом сайта) т.е. с доступными размерами?
Спасибо)

За модуль пожалуйста. По существу заданных вопросов: боюсь, что без мало-мальских знаний PHP и Drupal API(или без изучения оных) нельзя.

Не могли бы вы наставить меня на путь верный? Можно ли сск поле вывести в форме заказа таким образом  print $fields['field_razmer']->content;

Скопируйте из модуля в template.php своей темы код(целиком) функции theme_nodebasket_basketview($is_block = NULL). Переименуйте ее в НАЗВАНИЕ_ТЕМЫ_nodebasket_basketview($is_block = NULL). Затем разберитесь с «куском» в коде скопированной функции theme_nodebasket_basketview($is_block = NULL), где формируются табличные данные для отображения в блоке или на странице корзины, и добавьте в нужное место(в код скопированной и переименованной функции theme_nodebasket_basketview($is_block = NULL)) свой код.

ps. Код для вывода значения cck-поля(для справки):

        print $field_НАЗВАНИЕ_ПОЛЯ[0]['view'];
       
        //Или
       
        print $field_НАЗВАНИЕ_ПОЛЯ[0]['value']; //Выведет «тупо» значение без «форматирования» и суффиксов/префиксов(если таковые есть).

function emma_nodebasket_basketview($is_block = NULL) {
print $field_НАЗВАНИЕ_ПОЛЯ[0]['value'];
}

Вот так можно выводить?