В админке сделать кнопки смены статуса заказа

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

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

Подскажите, как правильно прописать теги у кнопок, чтобы корректно менялся статус? Не совсем понимаю, как это реализовано в выпадающем списке.

Вам нужно методом POST отправлять следующий запрос

admin.php?dispatch=orders.update_status&id=97&status=D&notify_user=Y&notify_department=Y

id - номер заказа
status - новый статус
notify_user - уведомлять ли пользователя
notify_department - уведомлять ли админа

1 лайк

Держите:
в файле /design/backend/templates/views/orders/details.tpl

после строк

      <div class="control-group shift-top">
      <div class="control-label">

Вставить 
    <a class="status-link-ag cm-ajax cm-post btn-send-order" data-ca-target-id="content_downloads" href="/admin.php?dispatch=orders.update_status&amp;id={$order_info.order_id}&amp;status=AG&amp;return_url=admin.php%3Fdispatch%3Dorders.details%26order_id%3D{$order_info.order_id}" onclick="setTimeout('window.location.reload()', 200); return fn_check_object_status(this, 'ag', '#6aa84f');" data-ca-event="ce.update_object_status_callback">Подтвердить заказ и передать в доставку</a>

Надо заменить: admin.php на свой адрес админки, status=AG на свою букву статуса соответствующую отправке. Далее (this, 'ag' - так же 'ag' на свою букву статуса.
Добавить стиль для btn-send-order в css.

Насчет великой правильности и красоты данного решения сомневаюсь, но работает.
2 лайка

Спасибо! Буду пробовать.

Статус меняется. Но вот уведомления не уходят ни админу, ни покупателю. ((( Почему такое может быть? При смене статуса через выпадающий список уведомления уходят.

Сделал вот так:

<a 
    class="status-link-e cm-ajax cm-post btn o-status-e"
    style="white-space: normal"
    data-ca-target-id="content_downloads"
    href="/admin.php?dispatch=orders.update_status&amp;id={$order_info.order_id}&amp;status=E&amp;notify_user=true&amp;notify_department=true"
    onclick="setTimeout('window.location.reload()', 200); return fn_check_object_status(this, 'e', '#3c78d8');"
    data-ca-event="ce.update_object_status_callback">
    Подтвердить заказ и передать в доставку
</a>

return_url убрал, чтобы страница перезагружалась и кнопки пропадали.

Вставлять картинки вместо кода — адское зло :face_with_symbols_over_mouth:

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

1 лайк

классная фича, доведите до ума плз :joy: хочу кнопки тоже))))

1 лайк

Если ставить четыре пробела в начале строки, то будет код:

Впишите сюда текст; также, отключить форматирование текста можно, начав строку с 4х пробелов

не код

опять код

Что-то у меня не получается
В начале этой строки есть 4 пробела, а не отображается как код.


Ну да бог с ним. Это предмет отдельного разбирательства.

можно выделить и нажать http://joxi.ru/a2XLOVkilMWR32

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

1 лайк

Ни у кого никаких мыслей не появилось, почему статус меняется, а уведомления не уходят? Стоят запросе параметры для отправки:

&notify_user=true&notify_department=true

Попробуйте так

&notify_user=Y&notify_department=Y

Пробовал. Не помогает.

В консоли разработчика посмотрите, нормально и полностью ли запрос уходит

Консоль показывает, что запрос уходит без

&notify_user=true&notify_department=true

Ну вот, копайте в эту сторону

В общем, отказался от использования AJAX, убрал из ссылки лишние теги. Теперь работает как надо - и статус заказа меняется, и уведомления уходят.

Вот пример кода для кнопки отмены заказа (перевести в статус D):

<a 
    class="cm-post btn o-status-d" 
    style="white-space: normal" 
    href="/admin.php?dispatch=orders.update_status&amp;
        id={$order_info.order_id}&amp;
        status=D&amp;
        return_url=admin.php%3Fdispatch%3Dorders.details%26order_id%3D{$order_info.order_id}&amp;
        notify_user=Y&amp;
        notify_department=Y"
>
    Отменить заказ
</a>

Используя условные конструкции, можно отображать кнопки смены статуса заказа в зависимости от текущего статуса:

{if $order_info.status == "xxx"}
...
{/if}
3 лайка