Хочу сделать так, чтобы товары одного типа добавлялись в первую корзину, а товары другого типа - во вторую... ну и так далее.
Ещё необходимо, чтобы все эти корзины показывались на сайте. То есть у каждой корзины свой блок.. ну или чтобы все корзины показывались в одном блоке хотя бы.
сначала подумал, что что-то приближённое можно реализовать через multisite.. тогда отпадает вопрос "как сделать несколько корзин?".. несколько установок друпала с общей базой пользователей и общими сессиями, общее главное меню и одна и та же тема. свои товары, свои типы материалов и свой commerce со своей корзиной.
Однако в таком случае непонятно как показывать обе корзины..
Что скажете? Какие идеи будут? может кто-то уже занимался подобными вещами - тогда буду признателен, если поделитесь опытом
Комментарии
зачем такие сложности? клонируете стандартную корзину, добавляете фильтр по типу товара. Повторяете столько раз, сколько нужно корзин
точно же.... всё гениальное просто. но тогда такой вопрос. появилось допустим 2 корзины.. у каждой корзины 2 кнопки: "checkout" и "cart" - это стандартно.
но ведь теперь мне нужно все эти страницы сделать разные (с разными url я так понимаю, и чтобы разные вьюхи были в них использованы).
я так понимаю что без программирования тут не обойтись? скопировать из коммерца пару функций и заменить в них имена вьюх и путь в меню? так? или я опять усложняю?
пробуйте для начала клонировать вьюху и вывести ее где нибудь.
Насколько я помню, в коммерце доступ к карте модули получают через hook_form_alter, так что может быть и не придется ничего программировать. страницы можно создать и другими способами. Та же вьюха может быть страницей
попробовал. не помогло.. но, знаете, этот шаг не был лишним. в последующем все эти клонированные вьюхи мне пригодятся чтобы сделать уникальное оформление для новой корзины.
в общем это очередная история из разряда "читайте мануалы"... http://www.drupalcommerce.org/user-guide/shopping-carts-orders-and-line-... ... чёрным по белому написано:
«Each change to a shopping cart order is saved as a revision. A user can also have more than one cart, though the default is to present the most recent shopping cart to the user. hook_commerce_cart_order_id() can be used to introduce alternate logic to the cart load process if necessary.»
получается так, что корзина - это order со статусом "Shopping Cart"...
дизайн системы поддерживает несколько карт - это радует!!! очень!!
в общем я пришёл к тому, что проще всего и довольно логично будет добавить в систему новый Order type.
потом как-то надо перед добавлением товара в корзину смотреть тип товара, и по типу товара выбирать тип корзины (то есть order type). хорошо бы этот вопрос решался при помощи rules, или готовыми модулями... однако есть подозрение что без кодинга опять никуда.
ещё нашёл такой модуль - https://drupal.org/project/commerce_order_types - возможно он решит все мои проблемы и вопросы, но есть подозрения что может и не все
в общем я продолжаю изучать этот вопрос. по крайней мере я теперь знаю что такое корзина на самом деле
блин.. не понимаю. помогите разобраться.
установил модуль commerce_order_types... на странице модуля многообещающая инструкция по поводу использования.
создаю rule.. ставлю event - "Before saving a commerce order"
добавляю действие - "Set a data value" .... "commerce order: type"
всё так как на странице модуля
дальше нужен правильный кондишен.. тут то проблемы и начинаются.. понятно, что тут то и надо проверить тип продукта... только как? какой должен быть data selector? откуда мне вытянуть эту информацию.. в line-items там всё пусто.. надо как-то в data selector получить доступ к product reference из line-item? так? и как же это сделать, если это так?
product reference в line item - это поле. Чтобы в рулесах получить поле, нужно в условия добавить 'entity has field'.
Далее делаете loop по всем line items в заказе, где сначала добавляете загрузку продукта, затем добавляете компонент Rule, в нем проверяете тип продукта и добавляете нужный тип для заказа.
Надеюсь, правильно описал.
не получается победить..
значит так.. у меня товар второго типа добавляется в корзину при помощи VBO. как оказалось, встроенные в rules команды "Add product to cart" не позволяют выбрать Line Item Type для добавляемого продукта (стандартная кнопка Product reference в настройках отображения кстати позволяет это выбрать). А это уже необходимо. Так что я решил написать код. После продолжительных чтений исходного кода карты и форумов в интернете у меня получилось такое:
<?php
global $user;
$uid = 0;
if (!empty($user->uid)) {
$uid = $user->uid;
} $order_type = "photoprint_order"; $orders = commerce_order_load_multiple(NULL, array("type" => $order_type, "status" => "cart"));
if (
count($orders)>0) {$order = array_pop($orders);
} else {
$order = commerce_cart_order_new($uid, $order_type);
// Save the order to get its ID.
commerce_order_save($order);
} $product = commerce_product_load($product->product_id); $data = array
(
"context" => array
(
"product_ids" => array((integer)$product->product_id),
"add_to_cart_combine" => FALSE,
"show_single_product_attributes" => FALSE,
"display_path" => "node/70",
"entity" => array
(
"entity_type" => "node",
"entity_id" => "70",
"product_reference_field_name" => "field_product_reference",
),
),
);
$line_item = commerce_product_line_item_new($product, 1, $order->order_id, $data, 'photoprint_line_item');
commerce_line_item_save($line_item); // Add the line item to the order using fago's rockin' wrapper.
$order_wrapper = entity_metadata_wrapper('photoprint_order', $order);
$order_wrapper->commerce_line_items[] = $line_item; // Save the order again to update its line item reference field.
commerce_order_save($order);
?>
к сожалению... не работает.. точнее работает только частично. в базе данных в таблице commerce_line_item появляются записи. все данные правильные. но карта показывается пустой.. А если я добавляю продукт со страницы продукта, а не через VBO (который кстати использует rules, который в свою очередь и вызывает этот мой код), то товар появляется в карте..
что интересно, записи в таблице commerce_line_item для продуктов, которые видны в карте, ничем не отличаются от записей тех продуктов, которые добавились при помощи кода.. один в один вплоть до символа. это я сделал специально, чтобы убедиться, что проблема не в том, что данные разные и где-то в данных ошибках
в общем я ищу гуру коммерца, который поможет мне.. я вроде бы уже совсем близко к тому чтобы реализовать мультикартинг. жаль что модулей готовых не получается найти.. система же позволяет.. эхх