Как мы можем использовать детали заказа на странице успешного оформления заказа в шаблоне Opencart?

Мне нужно добавить данные заказа в шаблон OpenCart 2.1.0.1 на странице оформления заказа / успеха. Я добавил приведенный ниже код в view/theme/name/template/common/success.tpl, но он не показывает данные о заказе, (значения пустые, потому что в $this->session->data нет идентификатора заказа).

<?php if(!empty($orderid)) echo $orderid; ?>
<?php if(!empty($email)) echo $email; ?>
<?php if(!empty($fname)) echo $fname; ?>
<?php if(!empty($lname)) echo $lname; ?>

В /catalog/controller/checkout/success.php я определил эти переменные PHP:

$this->data['orderid'] = $$this->session->data['order_id'];
$this->data['fname'] = $this->session->data['guest']['firstname'];
$this->data['lname'] = $this->session->data['guest']['lastname'];

$this->load->model('account/order');
$order = $this->model_account_order->getOrder($this->session->data['order_id']);
if($order) {
$this->data['email'] = $order['email'];    
}

Может ли кто-нибудь указать, что мне не хватает и почему эти значения не загружаются в файл in.tpl, и каково решение. Даже жестко закодированные значения также не загружаются в .tpl.

Значения $ this-> session-> data:

(
[language] => en
[currency] => USD
[user_id] => 9
[token] => 5ZiNOGeVjCdg4gefNkDLcHzF1zMUVKgA
[account] => guest
[payment_address] => Array
    (
        [firstname] => sdfsdf
        [lastname] => adfafa
        [company] => 
        [address_1] => test test test
        [address_2] => 
        [postcode] => 34324
        [city] => sdfsdfd
        [country_id] => 216
        [zone_id] => 3396
        [country] => Turkmenistan
        [iso_code_2] => TM
        [iso_code_3] => TKM
        [address_format] => 
        [custom_field] => Array
            (
            )
        [zone] => Ahal Welayaty
        [zone_code] => A
    )
[shipping_address] => Array
    (
        [firstname] => sdfsdf
        [lastname] => adfafa
        [company] => 
        [address_1] => test test test
        [address_2] => 
        [postcode] => 34324
        [city] => sdfsdfd
        [country_id] => 216
        [zone_id] => 3396
        [country] => Turkmenistan
        [iso_code_2] => TM
        [iso_code_3] => TKM
        [address_format] => 
        [zone] => Ahal Welayaty
        [zone_code] => A
        [custom_field] => Array
            (
            )
    )
)

person XIMRX    schedule 23.02.2017    source источник


Ответы (2)


Правильное имя переменной

Opencart 2.0 и выше не использует $this->data для шаблонов. Вместо этого просто используйте $data. ТАК вместо:

$this->data['hardcoded'] = "HARD CODED";

Ты можешь написать:

$data['hardcoded'] = "HARD CODED";

Позиция кода

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

if (isset($this->session->data['order_id'])) {

Эффективность и точность данных

Обычно $this->session->data['guest'] только определяется, если клиент не вошел в систему. Лучший способ использовать данные заказа - это получить данные из самого заказа и назначить их единому массиву, поскольку все условные выражения уже были разобрались, когда он был создан. Это избавит вас от необходимости заново определять каждую переменную и проверять статус входа в систему и т. Д .:

$this->load->model('checkout/order');
$data['order'] = $this->model_checkout_order->getOrder($this->session->data['order_id']);

Затем в вашем tpl вы можете получить доступ к любому порядку в массиве $order:

$order['order_id']
$order['firstname']
person billynoah    schedule 24.02.2017
comment
Не работает. $order в табл. В этом ответе показан сложный метод, может ли он быть единственным решением? stackoverflow.com/questions/35290034/ - person XIMRX; 24.02.2017
comment
@XIMRX - при всем уважении, я работаю над Opencart на постоянной основе, и вышеуказанное решение будет работать. Если это не работает для вас, значит, вам чего-то не хватает. Возможно, вам нужно обновить кеш модификаций? - person billynoah; 24.02.2017
comment
В данных $ this- ›session-› отсутствует идентификатор заказа. (См. Значение дампа в обновленном вопросе) - person XIMRX; 24.02.2017
comment
Если заказ был подтвержден, то при загрузке страницы $this->session->data['order_id'] не будет пустым. Обязательно обратите внимание на положение вашего кода, указанное в моем ответе. - person billynoah; 24.02.2017
comment
Я тестирую "метод банковского перевода". Может ли это быть причиной отсутствия order_id? - person XIMRX; 24.02.2017
comment
@XIMRX - нет, это бы ни на что не повлияло. OpenCart устанавливает order_id в качестве переменной сеанса, как только вы переходите к этапу подтверждения оформления заказа. Поэтому, прежде чем вы даже подтвердите заказ, существует order_id. Вы пробовали очистить кеш модификаций? Вы уверены, что код выполняется до того, как будет очищен order_id? теперь вы можете видеть жестко запрограммированные значения? - person billynoah; 24.02.2017
comment
на странице успеха вы не получите order_id, используя $this->session->data['order_id']. order_id уже не установлен. - person K. B.; 25.09.2018
comment
У меня такая же проблема с оплатой oc 2.1.0.1 / journal / paypal. Я не могу получить order_id на странице успеха - person Stavros; 04.09.2020

находится ли бит $ data ['order'] прямо в

$this->load->model('checkout/order');
$data['order'] = $this->model_checkout_order->getOrder($this->session->data['order_id']);

не должно быть?

$this->load->model('checkout/order');
$order = $this->model_checkout_order->getOrder($this->session->data['order_id']);
person Gary Baldwin    schedule 25.09.2018