如何通过图标点击更改prestashop 1.6后端的bool值

时间:2016-07-13 09:59:09

标签: prestashop prestashop-1.6

我想更改我的打印状态,我可以放置图标来更改状态,但是当我单击图像中显示的打印状态图标时我没有发生更改我将回调设置为changePrintStatus

当单击更改状态图标时,代码到达initProcess(),但之后究竟必须发生什么?或者我是否需要调用任何其他函数/覆盖函数? (我想在我们更改客户活动状态的客户列表中执行相同操作,同样我想在此处为我的自定义模块执行此操作)

enter image description here

<?php

    require_once(_PS_MODULE_DIR_.'eticketprinting/eticketprinting.php');
    require_once(_PS_MODULE_DIR_.'eticketprinting/classes/Eticket.php');

    class EticketController extends ModuleAdminController
    {
            public $module;
            public $html;
            public $tabName = 'renderForm';

        public function __construct()
        {
            $this->tab = 'eticket';
            $this->module = new eticketprinting();
                 $this->addRowAction('edit');
            //$this->addRowAction('edit');
          //  $this->addRowAction('view'); // to display the view 
            //$this->addRowAction('delete');
            $this->explicitSelect = false;
            $this->context = Context::getContext();
            $this->id_lang = $this->context->language->id;
            $this->lang = false;
            $this->ajax = 1;
            $this->path = _MODULE_DIR_.'eticketprinting';
            $this->default_form_language = $this->context->language->id;
            $this->table = _DB_KITS_PREFIX_.'print_eticket';
            $this->className = 'Eticket';
            $this->identifier = 'id_print_eticket';
            $this->allow_export = true;
            $this->_select = '
            id_print_eticket,
            ticket_id,
            ticket_no,
            product_id,
            print_status,
            date_add,
            date_upd
            ';
            $this->name = 'EticketController';
            $this->bootstrap = true;
            $this->initTabModuleList();
            $this->initToolbar();
            $this->initPageHeaderToolbar();
           // $this->initFieldList();

            //$this->initContent();
            parent::__construct();
            $this->fields_list = 
            array(
            'id_print_eticket' => array(
            'title' => $this->l('E-Ticket Print ID'),
            'width' => 25,
            'type' => 'text',
            ),
            'ticket_id' => array(
            'title' => $this->l('Ticket- ID'),
            'width' => 140,
            'type' => 'text',
            ),
            'ticket_no' => array(
            'title' => $this->l('Ticket No'),
            'width' => 140,
            'type' => 'text',
            ),
            'product_id' => array(
            'title' => $this->l('Product ID'),
            'width' => 100,
            'type' => 'text',       
            ),
            'print_status' => array(
            'title' => $this->l('Print Status'),
            'align' => 'center',
            'type' => 'bool',
            'callback' => 'changePrintStatus',              
            'orderby' => false,     
            ),
            'date_add' => array(
            'title' => $this->l('Date Add'),
            'width' => 140,
            'type' => 'text',
            ),
            'date_upd' => array(
            'title' => $this->l('Date Update'),
            'width' => 140,
            'type' => 'text',
            ),
        );

        }

       public function changePrintStatus($value, $eticket)
        {
        return '<a class="list-action-enable '.($value ? 'action-enabled' : 'action-disabled').'" href="index.php?'.htmlspecialchars('tab=Eticket&id_print_eticket='
        .(int)$eticket['id_print_eticket'].'&changePrintVal&token='.Tools::getAdminTokenLite('Eticket')).'">
        '.($value ? '<i class="icon-check"></i>' : '<i class="icon-remove"></i>').
        '</a>';
        }


        public function initProcess()
        {
        parent::initProcess();
        //d($this->id_object);
        if (Tools::isSubmit('changePrintVal') && $this->id_object) {
                if ($this->tabAccess['edit'] === '1') {
                    //d("reached here");
                    $this->action = 'change_print_val';
                } else {
                    $this->errors[] = Tools::displayError('You do not have permission to change this.');
                }

            }
        }

        public function postProcess()
        {
            //When generate pdf  button is clicked 
        if (Tools::isSubmit('submitAddeticket')) {
                if (!Validate::isDate(Tools::getValue('date_from'))) {
                    $this->errors[] = $this->l('Invalid "From" date');
                }

                if (!Validate::isDate(Tools::getValue('date_to'))) {
                    $this->errors[] = $this->l('Invalid "To" date');
                }
                if (!Validate::isInt(Tools::getValue('id_product')) || Tools::getValue('id_product')=='' ) {
                    $this->errors[] = $this->l('Invalid Product/select a product ');
                }

                if (!count($this->errors)) {
                    if (count(Ticket::getByProductNDateInterval(Tools::getValue('id_product'),Tools::getValue('date_from'), Tools::getValue('date_to')))) {

                        //d($this->context->link->getAdminLink('AdminPdf'));
     Tools::redirectAdmin($this->context->link->getAdminLink('AdminPdf').'&submitAction=generateEticketPDF&id_product='.urlencode(Tools::getValue('id_product')).'&date_from='.urlencode(Tools::getValue('date_from')).'&date_to='.urlencode(Tools::getValue('date_to')));
                    }

                    $this->errors[] = $this->l('No tickets has been found or Ticket Generated Already for this period for Product ID:'.Tools::getValue('id_product').' (Change the Print Status generate the E-Ticket Again)');
                }
            } else {
                parent::postProcess();
            }

        } 










    }

1 个答案:

答案 0 :(得分:1)

我错过了过程功能:

**但请注意$ this-&gt; action ='change_print_val';  和名称f在我的案例processChangePrintVal

中进程必须类似

因此,如果操作是$ this-&gt; action ='change_printStatus_val';那么进程名称必须是processChangePrintStatusVal **

我添加了以下功能

/**
* Toggle the Eticket Print Status flag- Here the update action occurs
*/
public function processChangePrintVal()
{
$eticket = new Eticket($this->id_object);
if (!Validate::isLoadedObject($eticket)) {
$this->errors[] = Tools::displayError('An error occurred while updating Eticket Print Status information.');
}
$eticket->print_status = $eticket->print_status ? 0 : 1;
if (!$eticket->update()) {
$this->errors[] = Tools::displayError('An error occurred while Eticket Print Status customer information.');
}
Tools::redirectAdmin(self::$currentIndex.'&token='.$this->token);
}