Программно получить заказ, который пользователь только что завершил в Ubercart - PullRequest
4 голосов
/ 22 июня 2010

Когда пользователя отправляют на «страницу благодарности» (корзина / оформление заказа / завершение), мне нужно получить некоторую информацию о заказе, чтобы отправить его в сторонний API отслеживания.Проблема в том, что на данный момент нет информации о заказе ни в сеансе, ни в каком-либо другом месте, о котором я знаю.В качестве обходного пути я попытался запросить последний заказ для текущего подключенного пользователя, но это не удается, когда пользователь незарегистрирован, поскольку Ubercart регистрирует учетную запись на лету и оставляет пользователя незарегистрированным.

Так что мой вопрос, есть лиспособ получить объект Order на данный момент (корзина / оформить заказ / выполнить) из шаблона page-cart.tpl.php?

Мое решение до сих пор:

Возьмите $ _SESSION ['переменная cart_order '] в cart / checkout / review, назначьте ее в $ _SESSION [' faux_order '] и используйте faux_order в моем скрипте в cart / checkout / complete ..., которая выглядит так же уродливо, как и видеть, как жираф захлестывает насмерть.*

Ответы [ 2 ]

4 голосов
/ 23 июня 2011

ВНИМАНИЕ! НЕ ИСПОЛЬЗУЙТЕ ОТВЕТ ВЫШЕ. Смотрите мой комментарий для объяснения.

Вместо ответа, представленного выше (, который НИКОГДА не использовать! ) создайте пользовательское условное действие Ubercart (CA) и добавьте его в раздел «Триггер: заказчик завершает оформление заказа» в рабочем процессе Ubercart CA найдено в https://dev.betternow.org/admin/store/ca/overview

Здесь я определяю пользовательский CA

function my_module_ca_action() {
    $order_arg = array(
        '#entity' => 'uc_order',
    '#title' => t('Order'),
    );


    $actions['my_module_status_update'] = array(
        '#title' => t('Some Title'),
    '#category' => t('Custom UC AC'),
    '#callback' => 'my_module_some_function_name',
    '#arguments' => array(
        'order' => $order_arg,
            ),
            );
        return $actions;
}

Теперь я могу использовать идентификатор заказа в моей собственной функции обратного вызова, определенной в моем модуле:

function my_module_some_function_name(&$order, $settings) {
  echo "This is the order id: " . $order->order_id;
}

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

0 голосов
/ 05 февраля 2015

$ _ SESSION ['cart_order'] доступно на странице обзора заказа .

Итак ...

Создайте файл cookie, представляющий идентификатор заказа, например:

<?php setcookie('orderID', '$_SESSION['cart_order']'); ?>

Затем на странице подтверждение заказа вы можете вызвать сохраненный файл cookie следующим образом:

<?php
if (isset($_COOKIE['orderID'])):
  $theOrder = $_COOKIE['orderID'));

  echo 'The order ID is: ' . $theOrder;
endif;
?>

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

...