2014-10-30 6 views
0

Я отвечаю за создание небольшого платежного модуля. Конфигурация должна управляться с помощью простого CRUD, и я использую класс HelperList для отображения таблицы с записями, хранящимися в базе данных. Один из структуры базы данных таблицы аналогична этойДействие статуса HelperList с ajax

'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 
) 
); 

Как я намерен включить или отключить элемент с помощью кнопки я использую «активный 'и' 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(); 
} 

Я использую this статью официальной документации для создания списка, но независимо от того, какое имя я использую («ajaxProcess», «ajaxProcessSatusItem», «statusItem», и каждые заглавные буквы не вариациям я мог думать) все, что я получаю, - это пустая страница в ответе и никаких изменений в статусе. Я посмотрел исходный код, и в классе HelperList нет комментариев относительно того, как следует вызывать функцию.

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

ответ

0

Если вы используете класс ObjectModel для объекта данных, вы можете autmatically генерировать кнопки переключения, просто добавив одну строку:

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, 
) 

Line '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

Действительно ли поле «active» должно быть логическим? В качестве альтернативы я использовал ajaxProcessStatusItem, аналогичный показанному в AdminStatusesController, но это тоже не сработало. – Trickylastname

+0

Я обновил ответ – gskema