Действие статуса HelperList с ajax

Я отвечаю за создание небольшого платежного модуля. Конфигурация должна управляться с помощью простого 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 нет комментариев относительно того, как должна вызываться функция.

Любая помощь будет оценена.

0

Решение

Если вы используете класс 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);
}
}

Надеюсь, это поможет вам.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector