Я отвечаю за создание небольшого платежного модуля. Конфигурация должна управляться с помощью простого CRUD, и я использую класс HelperList для отображения таблицы с записями, хранящимися в базе данных.
Одна из таблиц структуры базы данных похожа на эту
'CREATE TABLE IF NOT EXISTS '._DB_PREFIX_.'MODULE_ITEM
(
`id` INT(11) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(100) NOT NULL,
`active` VARCHAR(3) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE='._MYSQL_ENGINE_.' DEFAULT CHARSET=utf8;'
Итак, значение list_fields выглядит следующим образом
array(
'id' => array(
title' => $this->l('Id'),
//'width' => 140,
'type' => 'text',
'align' => 'center'
),
'name' => array(
'title' => $this->l('Name'),
//'width' => 140,
'type' => 'text',
'align' => 'center'
),
'active' => array(
'title' => $this->l('Status'),
//'width' => 140,
'active' => 'statusItem',
'type' => 'boolean',
'align' => 'center',
'ajax'=> true
)
);
Поскольку я намереваюсь включить или отключить элемент с помощью кнопки, я использую опции ‘active’ и ‘ajax’ для этого конкретного поля, и при отображении на странице конфигурации модуля ссылка, сгенерированная для рассматриваемого столбца, выглядит примерно так: index.php?controller=AdminModules&configure=Example&item_id=4&statusItem&action=statusItem&ajax=1&(...)
, Обратите внимание, что statusItem — это название действия.
С другой стороны, я написал эту функцию в главном файле модуля, который должен изменить статус элемента.
public function ajaxProcessStatusItem()
{
$id=(int)Tools::getValue('item_id');
$value=(int) Db::getInstance()->executeS($this->createSelectQuery('module_item','item_id',$id))[active];
Db::getInstance()->update('module_item', array('active' => !$value), 'item_id='.$id);
die();
}
Я использую этот статья официальной документации для создания списка, но независимо от того, какое имя я использую («ajaxProcess», «ajaxProcessSatusItem», «statusItem» и все варианты прописных букв, которые я мог придумать), все, что я получаю, — это пустая страница в ответ, и без изменений в статусе. Я взглянул на исходный код, и в классе HelperList нет комментариев относительно того, как должна вызываться функция.
Любая помощь будет оценена.
Если вы используете класс ObjectModel для своего объекта данных, вы можете автоматически сгенерировать кнопку переключения, просто добавив одну строку:
AdminProductTabController.php or when defining fields somwehre else
and calling HelperList->generate()
'active' => array(
'title' => 'Active',
'active' => 'status',
'filter_key' => '!active',
'type' => 'bool',
'width' => 'auto',
'orderby' => false,
'search' => false,
)
Линия 'active' => 'status',
не относится ни к каким именам полей. Добавьте эту строку в определение списка (если вы определяете свойства поля списка в Admin {YourObjectModel} Controller или вызываете HelperList откуда-то еще).
Выдержка из моей ObjectModel:
ProductTab.php
class ProductTab extends ObjectModel {
.......
public static $definition = array(
..........
'active' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool',),
Я посмотрел свой код и заметил, что на самом деле вызвал специальную функцию обработки:
AdminProductTabController.php
public function initProcess()
{
$id_product_tab = (int)Tools::getValue('id_product_tab');
$product_tab = new ProductTab($id_product_tab);
$isStatusAction = Tools::getIsset('status'.$this->table);
if ($isStatusAction)
{
$product_tab->toggleStatus();
Tools::redirectAdmin($this->href_back);
}
}
Надеюсь, это поможет вам.
Других решений пока нет …