PrestaShop: создайте вкладку администратора и покажите записи с действием редактирования / обновления / удаления

#php #prestashop #prestashop-1.6

#php #prestashop #prestashop-1.6

Вопрос:

Я пытался реализовать вкладку администратора в PrestaShop. Я хочу показать записи из базы данных. Для каждой записи я хочу иметь параметры редактирования, обновления, удаления.

Мой controllers/admin/AdminEblpayment.php файл содержит следующий код:

 class AdminEblpaymentController extends ModuleAdminController
{
    public function __construct()
    {
        $this->className = 'EblPaymentModel';
        $this->table = 'ebl_payments';
        $this->identifier = "id";
        $this->_defaultOrderBy = 'created_at';
        $this->_defaultOrderWay = 'desc';
        $this->orderBy = "created_at";
        $this->orderWay = "desc";
        $this->meta_title = $this->l('EBL payment attempts');
        $this->deleted = false;
        //$this->explicitSelect = true;
        $this->list_no_link = true;
        $this->context = Context::getContext();
        //$this->lang = true;
        $this->bootstrap = true;

        $this->sortedTree = array();

        if (Shop::isFeatureActive()) {
            Shop::addTableAssociation($this->table, array('type' => 'shop'));
        }

        $this->addRowAction('edit');
        $this->addRowAction('details');
        $this->addRowAction('updatestatus');
        $this->addRowAction('cart');

        $this->fields_list = array(
            'id' => array(
                'title' => $this->l('ID'),
                'type' => 'int',
                'align' => 'center',
                'width' => 25,
            ),
            'cart_id' => array(
                'title' => $this->l('Cart id'),
                'width' => 'auto',
                'orderby' => false
            ),
            'order_id' => array(
                'title' => $this->l('Order id'),
                'width' => 'auto',
                'orderby' => false
            ),
            'status' => array(
                'title' => $this->l('Status'),
                'width' => 'auto',
                'orderby' => false
            ),
            'result' => array(
                'title' => $this->l('Result'),
                'width' => 70,
                'align' => 'center',
                'orderby' => false
            ),
            'result_code' => array(
                'title' => $this->l('Result code'),
                'width' => 70,
                'align' => 'center',
                'orderby' => false
            ),
            'dbbl_transaction_id' => array(
                'title' => $this->l('Transaction id'),
                'width' => 70,
                'align' => 'center',
                'orderby' => false
            ),
            'dbbl_response' => array(
                'title' => $this->l('Response'),
                'width' => 70,
                'align' => 'center',
                'orderby' => false
            ),
            'created_at' => array(
                'title' => $this->l('Created at'),
                'width' => 70,
                'align' => 'center',
                'orderby' => true
            ),
            'updated_at' => array(
                'title' => $this->l('Updated at'),
                'width' => 70,
                'align' => 'center',
                'orderby' => true
            )
        );
        parent::__construct();
    }
  
  }  

Мой models/EblpaymentModel.php файл содержит следующий код:

 class EblPaymentModel extends ObjectModel
{
    private $_catTree = array();

    public $id;
    public $cart_id;
    public $order_id;
    public $ebl_order_id;
    public $ebl_status;
    public $ebl_resu<
    public $ebl_result_code;
    public $ebl_card_number;
    public $ebl_transaction_id;
    public $ebl_request;
    public $ebl_response;
    public $created_at;
    public $updated_at;

    //Multilang Fields
    public $name;
    public $description;
    public $meta_description;
    public $link_rewrite;

    /**
     * @see ObjectModel::$definition
     */
    public static $definition = array(
        'table' => 'ebl_payments',
        'primary' => 'id',
        'multilang' => false,
        'fields' => array(
            //Fields
            'cart_id' =>  array('type' => self::TYPE_INT, 'validate' => 'isUnsignedInt'),
            'order_id'              =>  array('type' => self::TYPE_INT, 'validate' => 'isUnsignedInt'),
            'ebl_order_id'              =>  array('type' => self::TYPE_INT, 'validate' => 'isUnsignedInt'),
            'ebl_status'          =>  array('type' => self::TYPE_INT, 'validate' => 'isUnsignedInt'),
            'ebl_result'             =>  array('type' => self::TYPE_INT),
            'ebl_result_code'       =>  array('type' => self::TYPE_STRING),
            'ebl_card_number'           =>  array('type' => self::TYPE_STRING),
            'ebl_transaction_id'           =>  array('type' => self::TYPE_STRING),
            'ebl_request'           =>  array('type' => self::TYPE_STRING),
            'ebl_response'           =>  array('type' => self::TYPE_STRING),
            'created_at'           =>  array('type' => self::TYPE_STRING),
            'updated_at'           =>  array('type' => self::TYPE_STRING),

            //Multilanguage Fields
            'name'              =>  array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'required' => true, 'size' => 250),
            'description'       =>  array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isCleanHtml', 'size' => 250),
            'meta_description'  =>  array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isCleanHtml', 'size' => 250),
            'link_rewrite'      =>  array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isLinkRewrite', 'required' => true, 'size' => 250),
        )
    );  

В BO на вкладке «Eblpayment» у меня есть следующий список, но я не могу редактировать, обновлять, удалять.

введите описание изображения здесь

Когда я нажимаю на ссылку Редактирования, я получаю сообщение об ошибке «Модель EblPaymentModel не найдена»:

Пожалуйста, кто-нибудь, дайте мне какую-нибудь хорошо документированную ссылку на ресурс для разработки модуля администратора с «Вкладкой администратора», «страница списка записей с действиями редактирования, обновления, удаления».

Заранее спасибо.

Ответ №1:

Вам нужен require_once 'path_to_your_model_file' поверх этого файла контроллера.

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

Вам также необходимо определить $this->fields_form массив для просмотра / редактирования в __construct() методе.

Взгляните на документацию или встроенные контроллеры администратора для правильного определения.

Кнопки строк добавляются следующим образом.

 $this->addRowAction('edit');
$this->addRowAction('update');
$this->addRowAction('delete');
$this->addRowAction('whatevernameyouwant');
  

Чтобы загрузить страницу или обработать что-либо (сохранить в БД или что-то еще), например, при нажатии «whatevernameyouwant», вы должны использовать методы postProcess() , processWhatevernameyouwant() и renderView() .

 public function postProcess() {
    if (Tools::getIsset('whatevernameyouwant') {
        // Set display to 'view' if you want to render some content
        // When display is set to 'view' the controller will call renderView() method to display content
        $this->display = 'view';

        // Set action if you want to process something
        // When you set an action the controller will call processWhatevernameyouwant() method
        $this->action = 'whatevernameyouwant';
    }

    return parent::postProcess();
}

public function renderView() {
    // return some content related to whatevernameyouwant action
    if (Tools::getIsset('whatevernameyouwant') {
        return $someTemplateContent;
    }

    return parent::renderView();
}

public function processWhatevernameyouwant() {
    // process some stuff in here
}
  

Комментарии:

1. Спасибо. Как я могу добавить действие обновления для каждой записи?