Я хочу добавить продукт в корзину программно при отправке формы

Мой код ниже работает только для root, но на моем сайте анонимный пользователь может получить доступ к корзине и оформлению заказа, но при отправке формы без пользователя = 1 он возвращает Your shopping cart is empty.

В моей функции отправки:

$uid = ($user->uid) ? $user->uid : 0;
    $order = commerce_order_new($uid, 'checkout_checkout');

// Save the order to get its ID.
    commerce_order_save($order);

// Load whatever product represents the item the customer will be
// paying for and create a line item for it.
    $product = commerce_product_load($product_id);

    $line_item = commerce_product_line_item_new($product, 1, $order->order_id);
// Save the line item to get its ID.
    commerce_line_item_save($line_item);
// Add the line item to the order using fago's rockin' wrapper.
    $order_wrapper = entity_metadata_wrapper('commerce_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_cart_order_refresh($order);
//    ym(commerce_cart_order_id($uid));
    //commerce_cart_commerce_order_load($order);
    //ym(commerce_cart_order_is_cart($order));
    //commerce_cart_product_add($uid, $line_item);
    //commerce_cart_product_add_by_id($product_id);
    //$form_state['redirect'] = 'cart';
    drupal_goto('cart');

Почему это не работает корректно с не root (uid=1)?

7
griz 9 Янв 2022 в 14:51
Что приводит к проблеме со стандартными разрешениями, так работает ли это с другими пользователями, кроме анонимных? например, другой авторизованный/зарегистрированный пользователь? или это работает только с вашим пользователем root uid 1?
 – 
Jimajamma
5 Мар 2014 в 17:36
Запрошенная страница "/nashrtest/checkout/22" не может быть найдена для анонимного пользователя, и сначала возвращается "доступ запрещен", я устанавливаю просмотр проверки всех ролей, для авторизованного получения правильной покупки в анонимном пользовательском возврате страница не найдена !! !
 – 
Yuseferi
5 Мар 2014 в 18:17
Вы подтвердили, что все это, например этот модуль, работает даже с анонимными пользователями? drupal.stackexchange.com/questions/89412/… кажется предполагает, что это не так?
 – 
Jimajamma
5 Мар 2014 в 19:04
Модуль корзины и проверка работает для анонимного пользователя правильно, но когда я создаю позицию и заказываю вручную, не работает :(
 – 
Yuseferi
6 Мар 2014 в 13:10

3 ответа

Лучший ответ

Вам не нужно изменять заказ напрямую, commerce_cart_product_add сделает это за вас.

Попробуйте этот код:

Переменные:

 $product : commerce product
 $quantity: number of elements

Код

 global $user;
 // Create new line item:
 $line_item = commerce_product_line_item_new($product, $quantity);

 // Add to current user's cart: if the user is not logged in ($user->uid: 0) Drupal Commerce manages the $_SESSION
 $line_item_added = commerce_cart_product_add($user->uid, $line_item);

 // If $line_item_added !== FALSE the line_item has been added OK!
15
jorgetutor 30 Июл 2014 в 12:44

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

2
joetsuihk 30 Июл 2014 в 12:23

Вы должны проверить разрешения анонимных пользователей на компоненты магазина.

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

0
Uriah1216 10 Апр 2014 в 19:21