xandeadx.ru Блог музицирующего веб-девелопера

Drupal → Что нового будет в Drupal Commerce 2

Опубликовано в

CommerceGuys опубликовали роадмап на вторую версию Drupal Commerce, разработка которого начнётся после первой беты Drupal 8.

Что же нового нас ждёт:

  • Замена полей Product Reference, Line Item Reference и Customer Profile Reference на Entity Reference
  • Конвертация блока корзины в дисплей Views
  • Конвертация методов оплаты в плагины
  • Graceful degradation для ajax форм
  • Зависимость от модуля Inline Entity Form
  • Конвертация сущностей в новую Drupal 8 Entity API
  • Новая схема организации товаров: иерархия товаров, наследование, возможность отказаться от product display, инлайновое редактирование дочерних товаров.
  • Добавление модуля Commerce Fancy Attributes в ядро
  • Добавление модуля Commerce Customizable Products в ядро
  • Добавление функционала модуля Commerce Checkout Progress в ядро
  • Добавление модуля Address Book в ядро
  • Новый UI страницы заказа
  • Зависимые шаги чекаута
  • Конвертация поля Price в соответствующий элемент формы
  • Зависимость от библиотеки BigInteger
  • Новый API для манипулирования ценами

Роадмап одним предложением — максимальная интеграция с Drupal 8 и добавление популярных контриб модулей в ядро.

Написанное актуально для Drupal Commerce 2
Похожие записи

Комментарии RSS

Это фантастика! Только надо много терпения

Да, фантастишь

Супергуд!

Стоит kickstart2 - заголовок товара по умолчанию скрыт, и создается автоматически при создании дисплея. Изменить можно только редактируя сам товар. Но редактируя дисплей - заголовок опять изменяется. Как это отключить и включить отображения строки заполнения заголовка товара при создании дисплея?
Заранее спасибо за ответ.

вообще-то мы тут второй коммерц обсуждаем, а не кикстарт ;) http://xandeadx.ru/blog/drupal/685

Звучит очень хорошо. Потому что нынешний drupal commerce это тихий ужас, когда решишь что то под него разработать.

нынешний commerce - вполне хороший продукт

А ты пробовал писать модули под нынешний commerce?

https://drupal.org/user/645760 → Ctrl-F → Commerce

Ого, сколько ты закоммитил.
Ты крут!

В общем, моя претензия к разработке модулей под drupal commerce: многие элементарные вещи сложно и неудобно делать, и документация часто не помогает.
Еще меня бесит то, что в документации к commrce нельзя оставлять комментарии с разъяснениями, как на api.drupal.org.

Вот один из примеров моих ужасных мучений с commerce.
У меня есть order и некоторая числовая переменная $delivery_price = 350 в которой хранится стоимость доставки.
Мне нужно совершить элементарное действие: сделать новый line_item типа shipping с ценой $delivery_price и добавить этот line item к order'у.
ВЕДЬ МНЕ НУЖНО СОВЕРШИТЬ ЭЛЕМЕНТАРНОЕ ДЕЙСТВИЕ!!!!!!!!!!!!!!

Почему я должен совершать его вот так??:
http://pastebin.com/V5LXxPdG

Я потратил ~2 часа на то, чтобы сделать этот код рабочим.
Нигде нормального описания того, что нужно делать именно так (чтобы хотя бы не было ошибок), я не нашел.
Кроме того, этот код кривоват, но я точно не знаю, как сделать его более правильным, и у меня уже просто нет на это сил и времени.
Хорошо хоть, что это как то работает!
Все другие способы, которые я пробовал, вызывали ошибку.
В общем, я зол.

И я не считаю, что в данном случае проблема во мне.
Проблема в commerce.
Каждый раз когда я сажусь за него я уже морально готовлюсь к тому, что любое элементарное действие там будет сопряжено с мучениями.
Commerce в drupal 7 не предназначается для людей, видно что там никто даже не предпринимал попытки сделать commerce человекоудобным.
Нормально писать под commerce можно только тогда, когда ты досканально вызубришь все его неочевидные приемы и не совсем интуитивно понятную логику.

Еще у меня есть такая же претензия к программированию модулей вообще под drupal 7.
Меня бесят entity_metadata_wrappers.
Хорошо хоть в drupal 8 все вроде бы в этом плане несколько получше.
Надеюсь, все с ним не окажется, как всегда, то есть на 1 взгляд нормально, а на 2 - сущий времяпожирающий ад.

для доставки есть модуль Commerce Shipping
или Commerce Fees
на худой конец можно обойтись одним Rules
всё накликивается из админки

для доставки есть модуль Commerce Shipping или Commerce Fees

Ну вот в проекте над которым я работаю и использовался commerce_shipping.
Просто я писал модуль, в котором нужно было программно формировать order'ы.
В order'ах должно было быть много разной информации, в том числе некие товары и информация о доставке.
В предыдущем комментарии я как раз написал про то, как сложно и не очевидно было корректно добавить к order'у информацию о доставке.
Это был пример того, что очень часто в drupal commerce для того, чтобы программно сделать простую вещь, нужно прилагать не сопоставимо большие усилия.
Это то, почему я говорю, что

нынешний drupal commerce это тихий ужас

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

и я сомневаюсь, что за два часа вы бы решили эту задачу в каком нибудь Magento ;)

и я сомневаюсь, что за два часа вы бы решили эту задачу в каком нибудь Magento ;)

Magneto пользоваться не пробовал, но верю на слово. :)
К сожалению, у drupal нет конкурентов, это очень плохо, так как конкуренция ведет к совершенствованию (часто).
Ты не в курсе, как в этом плане все обстоит у ruby on rails магазинов?
Я немного смотрел в сторону rails, и мне показалось, что его разработчики будут поумнее разработчиков drupal и php.
По крайней мере, они явно говорят о том, что нужно стремиться к тому, чтобы то, что они делают, было понятно и удобно для пользования людьми, в drupal такого нет. :)

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

Вот я открыл эту функцию в своем netbeans, и что я там вижу?
Функция принимает на вход $form, &$form_state, $checkout_pane, $order, в описании к функции то, что это за аргументы, политкорректно опущено.
Но то, что там есть какая-то хрен знает откуда взявшаяся pane неизвестно с чем, уже выносит мозг.

Предположим, я смотрю на этот код.
Меня интересует вопрос: у меня есть некая переменная типа INT $shipping_price = 350 мне нужно превратить эту переменную в корректный $unit_price который принимается функцией commerce_shipping_line_item_new.

Дает ли код в функции commerce_shipping_pane_checkout_form_submit ответ на этот вопрос?
НЕТ.
Они там получают $unit_price при помощи ########## ШАМАНСТВА (так это выглядит в моей стороны):

http://pastebin.com/ynymBtxj

Я совершенно не знаю, что это за pane_values, и, кстати говоря, мой мозг устал.
Ему просто нужно получить новый shipping_line_item, ему не интересны никакие pane и никакое глубинное устройство commerce!

Почему я должен изучать глубинное устройство commerce (магии) для того, чтобы просто корректно установить стоимость доставки для order?

Вот я открыл эту функцию в своем netbeans, и что я там вижу?
Функция принимает на вход $form, &$form_state, $checkout_pane, $order, в описании к функции то, что это за аргументы, политкорректно опущено.

их и не нужно знать. код создания line item-oв — в теле функции

Они там получают $unit_price при помощи ########## ШАМАНСТВА
Я совершенно не знаю, что это за pane_values, и, кстати говоря, мой мозг устал.

опять же - не нужно знать, что такое pane_values (хотя это основы commerce checkout)

пять минут изучения функции должны родить какой-нибудь такой код:

commerce_shipping_collect_rates($order);
$rate_line_item = $order->shipping_rates['имя_shipping_сервиса'];
$rate_line_item_wrapper = entity_metadata_wrapper('commerce_line_item', $rate_line_item);
$unit_price = $rate_line_item_wrapper->commerce_unit_price->value();
$line_item = commerce_shipping_line_item_new('имя_shipping_сервиса', $unit_price, $order->order_id, $rate_line_item->data, $rate_line_item->type);
$line_item->data['service_details'] = array();
commerce_shipping_add_shipping_line_item($line_item, $order, TRUE);

код не проверял

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

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

http://api.drupalcommerce.org/api/Drupal%20Commerce/sites!all!modules!commerce_shipping!commerce_shipping.module/function/commerce_shipping_line_item_new/DC

потому что например вот тут вот опубликовать сделанный тобой код я не могу (и кому то вскорости предстоят новые мучения с этой задачей :) ).

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

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

И, кстати, предположим, что я не так профессионален в программировании и commerce, как ты (скорее всего так оно и есть).
Я трачу на такие костыли БОЛЬШЕ 5 минут.
И я не хочу становиться экспертом в commerce для того, чтобы написать в нем что то простое.
И мне не интересен checkout, СОВСЕМ.

*уголок злости*
Мне ОЧЕНЬ хочется плюнуть drupal 7 в лицо и навсегда уйти от него к конкурентам.
Но я этого не сделаю из за моей стратегической ситуации.
Если бы я сейчас вернулся на 2 года назад и знал то, что знаю сейчас, я бы стал ruby программистом, потому что их архитекторы адекватнее и человеколюбивее.
*уголок злости*

commerce_shipping это контрибный модуль, так что непонятны претензии к разработчикам commerce.

сделали бы нормальные комментарии на страницах документации

напиши фидбак, может откроют

и да — это опенсёрс. чего-то не хватает — напиши сам, отправь патч. и помни что тебе никто ничего не должен

P.S: нашёл обёртку commerce_shipping_rate_apply().

напиши фидбак, может откроют

Уже написал им письмо, твердо решил за это бороться, ибо нефиг. :)
А у commerce есть какой-то фидбек?

commerce_shipping это контрибный модуль, так что не понятны претензии к разработчикам commerce.

Это понятно.
Просто я говорю о том, что неважно, как так вышло, однако удобство программирования под commerce в целом - невысокое.
Мягко говоря.

и да — это опенсёрс, чего-то не хватает - напиши сам, отправь патч. и помни что тебе никто ничего не дожен

Тут речь даже не о том, чтобы исправить что то маленькое.
Ruby это тоже opensource но там, в отличие от drupal, четко написано в "приоритетах", что то, что создается, должно быть удобным и понятным, и за этим стремятся следить.
Я считаю, что drupal и drupal commerce тоже бы такая вещь не помешала.

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

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

P.S: нашёл обёртку commerce_shipping_rate_apply().

Ух ты!
А вот такая вещь мне не попадалась, спасибо.
Если тебе не сложно, не мог бы ты показать, как применять это для установки цены на доставку?
Например, если нужно уставноить цену на доставку равную 350 рублям?
Просто если что я и сам посмотрю, но ты опытнее, так что мне было бы интересно увидеть, как это делать правильно.

А у commerce есть какой-то фидбек?

https://drupal.org/project/issues/commerce?categories=All
http://www.drupalcommerce.org/discussions
http://www.drupalcommerce.org/questions

Если тебе не сложно, не мог бы ты показать, как применять это для установки цены на доставку?
Например, если нужно уставноить цену на доставку равную 350 рублям?

из админки создать shipping service с рейтом 350, в коде вызвать commerce_shipping_rate_apply($order, 'имя_shipping_сервиса');

За ссылки спасибо, запостил им реквест на комменты в discussions: http://www.drupalcommerce.org/discussions/13094/comments-apidrupalcommer...

из админки создать shipping service с рейтом 350

К сожалению, это не подходит, потому что стоимость доставки в моем случае может быть произвольной.
Но вообще за совет спасибо.

Вывод, который я извлек для себя из дискуссии: если мне будет нечем заняться на ДОЛГОЕ время, буду делать патчи для drupal commerce.
В патчах будут удобные функции-обертки для говнокода. :)

А вообще, надежда умирает последней.
Так что я наивно верю, что в drupal commerce 2 они одумаются и сделают все нормально и удобно.
Надеюсь, что раз я это написал, то по закону подлости окажется, что drupal commerce 2 и правда будет хорошим. :)

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

создай свой shipping method с динамическим расчётом цены. пример есть в commerce_shipping_example

создай свой shipping method с динамическим расчётом цены. пример есть в commerce_shipping_example

Если бы я разрабатывал магазин с 0 я бы наверное так и поступил (теперь, когда я про это знаю).
Но я работаю с магазином, который разработали другие разработчики.
У них там уже есть свои способы доставки, и они оказывают влияние на кучу мест на сайте.
Они сделали все так, что "химичить" со способами доставки и настройками commerce просто опасно.
Намного безопаснее просто взять и "зашить" стоимость доставки как line item.
А это оказывается очень сложной задачей.

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

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

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

Не знаешь ли ты, есть ли в drupal commerce какой-нибудь удобный модуль для того, чтобы можно было покупать товары в 1 клик?
Чтобы ты нажал кнопку купить, появился попап где можно ввести email, имя и телефон, и после этого создался бы полноценный заказ?
Просто это очень нужная вещь практически во всех электронных магазинах, и такая штука позарез нужна именно конкретно мне прямо сейчас, а тратить время на "велосипед" не хочется.

В bitrix такое есть. :)

не встречал

не встречал

Ясно. Я тоже такого к сожалению не смог найти.

Это такая нужная вещь, что, возможно, я, Дитя Тьмы, ее сделаю. :) Хотя было бы еще лучше, если бы это сделал кто то другой. И тем самым мое время было бы сохранено.

Это такая нужная вещь, что, возможно, я, Дитя Тьмы, ее сделаю.

Сделал. https://drupal.org/project/commerce_buy_one_click

commerce_buy_one_click видел, но он мне не подошел. Можно покупать еще быстрее ;).

Сделал свой модуль для быстрой покупки: https://www.drupal.org/sandbox/petu/2012398 . Как он работает, можно поглядеть тут: http://www.photoclip.ru/index.php?productID=4869

Оставить комментарий

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании