Как вывести кнопку для оплаты в личном кабинете только после смены статуса заказа Есть решение

В файле темы my.order.html есть код, который отвечает за вывод этой кнопки квитанции

<!-- payment plugin output -->
{if !empty($payment)}
<div class="plugin">
{$payment}
</div>
{/if}


Что надо поменять, чтобы кнопка оплаты появлялась не сразу после оформления заказа в кабинете клиента, а после того как заказу будет присвоен определенный статус, например "Ожидание оплаты"


7 ответов

  • 1
    photo@y-net.ru 12 декабря 2014 13:38 #

    Купите плагин CheckPay

    http://www.webasyst.ru/store/plugin/shop/checkpay/

    Он какраз решает эти проблемы.

  • 1
    photo@y-net.ru 12 декабря 2014 13:38 #

    Купите плагин

    <h1>CheckPay</h1>

    http://www.webasyst.ru/store/plugin/shop/checkpay/

    Он какраз решает эти проблемы.

  • 0
    Kirilliuss 14 декабря 2014 01:58 #

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

  • 4
    Леонид Вакуленко Webasyst 15 декабря 2014 08:16 # Решение

    Оберните вашу конструкцию в вот такое, заменив список статусов на свои:

    {if in_array($order.state_id, [ 'completed', 'awaiting_payment', 'my_super_cool_state' ])}
    ...
    {/if}

  • 1
    Мастер Миллер 4 июня 2015 08:29 #

    А подскажите, пожалуйста, где посмотреть список своих статусов для дальнейшей замены в данном куске кода: [ 'completed', 'awaiting_payment', 'my_super_cool_state' ])}

    • +1
      Kirilliuss Kirilliuss 4 июня 2015 09:36 #

      магазин-настройки-статусы заказов

      При создание нового статуса задается ID

      Если статус стандартный то при наведении на него можно посмотреть

  • 1
    oleg.goncarov 5 мая 2017 12:29 #

    У меня чуть другой вопрос, а как сделать отоброжение этого кода:

    <!-- payment plugin output -->
    {if !empty($payment)}
    <div class="plugin">
    {$payment}
    </div>
    {/if}

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



  • 1
    Андрей Кибкало 6 июня 2021 19:25 #

    Если нужно в сводной табличке заказов в Личном кабинете пользователя добавить кнопку "Оплатить", то я делал так:

    в файле wa-apps\shop\lib\actions\frontend\my\shopFrontendMyOrders.action.php менял код на:


    // Prepare order data for template
    // ЭТО ОСТАВЛЯЛ БЕЗ ИЗМЕНЕНИЙ
            $url_tmpl = wa()->getRouteUrl('/frontend/myOrder', array('id' => '%ID%'));
            $workflow = new shopWorkflow();
            foreach($orders as $k => &$o) {
                if ($o['state_id'] == 'deleted') {
                    unset($orders[$k]);
                    continue;
                }
                $o['id_str'] = shopHelper::encodeOrderId($o['id']);
                $o['total_formatted'] = waCurrency::format('%{h}', $o['total'], $o['currency']);
                $o['shipping_name'] = ifset($o['params']['shipping_name'], '');
                $o['payment_name'] = ifset($o['params']['payment_name'], '');
                $o['state'] = $workflow->getStateById($o['state_id']);
                $o['url'] = str_replace('%ID%', $o['id'], $url_tmpl);
    // ВОТ ДО СИХ ПОР НЕ МЕНЯЛ.
    // ДАЛЬШЕ МОЙ КОД:
                $o['payment1'] = '';
                if ($o['state_id'] == "new" && !empty($o['params']['payment_id']) ) {
                    try {
                        $plugin = shopPayment::getPlugin(null, $o['params']['payment_id']);
                        $o['payment1'] = $plugin->payment(waRequest::post(), shopPayment::getOrderData($o, $plugin), false);
                    } catch (waException $ex) {
                        $o['payment1'] = $ex->getMessage();
                    }
                } else {
                    if ($o['state_id'] == "shipped" || $o['state_id'] == "completed") {
                        $o['payment1'] = "Оплачен";
                    } else {
                        $o['payment1'] = "Невозможна";
                    }
                
                }
     
    

    После этого добавлял в файл фронтенда ваш фрагмент кода в таком виде :

    <!-- payment plugin output -->
                    {if !empty($o.payment1)}
                        <div class="plugin">
                            {$o.payment1}
                        </div>
                    {/if}

Добавить ответ

Чтобы добавить комментарий, зарегистрируйтесь или войдите