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


#1

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

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

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


#2

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

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

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


#3

Держите:
в файле /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.

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

#4

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


#5

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

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

<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 убрал, чтобы страница перезагружалась и кнопки пропадали.


Смена статуса заказа через API
#6

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


#7

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


#8

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


#9

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

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

не код

опять код

#10

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


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


#11

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


#12

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


#13

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

&notify_user=true&notify_department=true

#14

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

&notify_user=Y&notify_department=Y

#15

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


#16

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


#17

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

&notify_user=true&notify_department=true

#18

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


#19

В общем, отказался от использования 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}