Рейтинг: 5 / 5

Звезда активнаЗвезда активнаЗвезда активнаЗвезда активнаЗвезда активна
 

Как удалять заказы через админку в Prestashop? Добавляем кнопочки.

Этим вопросом задается почти каждый пользователь PrestaShop. Многие удаляют заказы непосредственно из базы данных посредством незамысловатого SQL запроса,  дабы не заморачиваться с программированием и не изучать структуру классов PrestaShop. Также на просторах сети можно найти такое, не совсем правильное решение:

 

Открываем файл AdminOrdersController.php, который находится по адресу: /controllers/admin/.

В нем находим строку:

$this->addRowAction('view');

И сразу после нее прописываем эту строку:

$this->addRowAction('delete');

Сохраняем файл. Теперь вы можете удалять заказы поштучно.

Однако, такое решение нельзя назвать правильным. НЕЛЬЗЯ ПЕРЕПИСЫВАТЬ РОДНЫЕ КЛАССЫ любой CMS. Такой подход в быту программистов называется быдлокодерством. Данный метод плох тем, что как только вы обновите Prestashop, ваши изменения будут перезаписаны и вам нужно будет каждый раз выполнять эти действия заново. 

В PrestaShop есть возможность переопределять базовые контроллеры и модули. Для переопределения используется папка override. Все классы, контроллеры и модули, которые вы хотите переопределить нужно скопировать в нее. В Prestashop существует несколько способов переопределения, но мы не будем рассматривать их в рамках данной статьи и перейдём непосредственно к решению нашей задачи. За вывод списка заказов отвечает контроллер AdminOrdersController.php, расположенный в папке /controllers/admin/AdminOrdersController.php. Для его переопределения мы создадим файл с таким же названием в папке /override/controllers/admin/. Далее нужно будет создать в этом файле класс AdminOrdersController наследуемый от AdminOrdersControllerCore. Первым делом вызываем конструктор родителя (вначале, дабы инициализировать параметры по умолчанию) строкой parent::__construct();. Ниже представлен готовый код из файла с комментариями, вам остается создать его и написать туда соответствующий код.

 

Непосредственно само решение добавляющее кнопки удаления заказов в PrestsShop:

Открываем наш /override/controllers/admin/AdminOrdersController.php и пишем в него следующий код:

<?php

/**
 * @property Order $object
 */
class AdminOrdersController extends AdminOrdersControllerCore
{
    public function __construct()
    {
      parent::__construct();
      
      // Добавляем возможность удалять заказ кнопкой
      $this->addRowAction('delete');

      // Добавляем возможность удалять отмеченные заказы массово
      $this->bulk_actions = array(
        'delete' => array( 'text' => $this->l('Delete selected'), 'confirm' => $this->l('Delete selected items?'), 'icon' => 'icon-trash' )
      );
    }
}

После данных манипуляций в админке на странице заказов появится кнопка для удаления заказа (там где кнопка "Просмотр" в конце строки заказа) и в списке массовых действий добавится действие "Удалить отмеченные" (Delete selected), для удаления отмеченных галочками заказов.

Приятной работы.

Если заметили ошибку, выделите фрагмент текста и нажмите Ctrl+Enter

У вас недостаточно прав для того чтобы тут гадить.

Комментарии   

Владимир
# Владимир 13.11.2016 20:49
Спасибо, полезная информация.
А стили CSS так же переопределяютс я?