#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. Спасибо. Как я могу добавить действие обновления для каждой записи?