Перенаправление пользователя после сохранения данных в Admin controller Prestashop

Перенаправление пользователя после сохранения данных в Admin controller Prestashop

27.09.2018 04:18:25 Просмотров 59 Источник

У меня есть контроллер администратора, который отображает список данных при нажатии edit на запись или добавлении новой записи, которую я показываю renderForm (), но после сохранения данных (либо путем редактирования, либо добавления) я хочу перенаправить пользователя на другой контроллер вместо отображения того же списка контроллеров. Ниже приведен код, который я в настоящее время использую, например, мои требования я пытаюсь сделать что-то, что я сделал ниже в initcontent() но это не работает, поэтому я хочу знать, где я должен вызвать это вместо initcontent()

<?php

/**
 * The file is controller. Do not modify the file if you want to upgrade the module in future
 * 
 * @author    Globo Jsc <contact@globosoftware.net>
 * @copyright 2016 Globo., Jsc
 * @link         http://www.globosoftware.net
 * @license   please read license in file license.txt
 */
include_once(_PS_MODULE_DIR_ . 'cardelivery/classes/AdditionalServicesModel.php');

class AdminAdditionalServiceController extends ModuleAdminControllerCore {

    public $name;

    public function __construct() {
        $this->name = 'AdminAdditionalService';
        $this->className = 'AdditionalServicesModel';
        $this->table = 'additional_service';
        $this->meta_title = $this->l('Additional Services');
        $this->deleted = false;
        $this->explicitSelect = true;
        $this->context = Context::getContext();
        $this->bootstrap = true;
        $this->_defaultOrderBy = 'id_additional_service';
        $this->filter = true;
        if (Shop::isFeatureActive()) {
            Shop::addTableAssociation($this->table, array('type' => 'shop'));
        }
        $this->position_identifier = 'id_additional_service';
        $this->addRowAction('edit');
        $this->addRowAction('delete');
        $this->fields_list = array(
            'id_additional_service' => array(
                'title' => $this->l('ID'),
                'type' => 'int',
                'width' => 'auto',
                'orderby' => false),
            'service_name' => array(
                'title' => $this->l('Icon'),
                'width' => 'auto',
                'orderby' => false,
            ),
            'service_desc' => array(
                'title' => $this->l('service_desc'),
                'type' => 'text'
            ),
            'active' => array(
                'title' => $this->l('Status'),
                'width' => 'auto',
                'active' => 'status',
                'type' => 'bool',
                'orderby' => false),
        );
        parent::__construct();
    }

    function initContent() {
        parent::initContent();
        if (Tools::isSubmit('submit')) {
            Tools::redirectAdmin(self::$currentIndex . '&token=' . Tools::getAdminTokenLite('AdminCategories') . '&conf=7');
        }
    }

    public function initPageHeaderToolbar() {
        $this->page_header_toolbar_btn['back_to_list'] = array(
            'href' => Context::getContext()->link->getAdminLink('AdminGCardeliverycity', true),
            'desc' => $this->l('Back to list', null, null, false),
            'icon' => 'process-icon-back'
        );
        parent::initPageHeaderToolbar();
    }

    public function renderForm() {
        $id_citydelivery = (int) Tools::getValue('id_citydelivery');
        if ($id_citydelivery == 0) {
            $addSerModObj = new AdditionalServicesModel((int) Tools::getValue('id_additional_service'));
            $id_citydelivery = $addSerModObj->id_citydelivery;
        }
        $fields_form_1 = array(
            'form' => array(
                'legend' => array('title' => $this->l('Additional Service'), 'icon' => 'icon-cogs'),
                'input' => array(
                    array(
                        'type' => 'hidden',
                        'name' => 'id_citydelivery'
                    ),
                    array(
                        'type' => 'text',
                        'label' => $this->l('Service_name'),
                        'name' => 'service_name',
                        'size' => 255,
                        'required' => true,
                        'desc' => $this->l('Enter name of Arrival port')
                    ),
                    array(
                        'type' => 'text',
                        'label' => $this->l('service_desc'),
                        'name' => 'service_desc',
                        'size' => 255,
                        'required' => true,
                        'desc' => $this->l('Enter name of Arrival port')
                    ),
                    array(
                        'type' => 'text',
                        'label' => $this->l('charge'),
                        'name' => 'charge',
                        'size' => 255,
                        'required' => true,
                        'desc' => $this->l('Enter name of Arrival port')
                    ),
                    array(
                        'type' => 'switch',
                        'label' => $this->l('Active'),
                        'name' => 'active',
                        'required' => false,
                        'is_bool' => true,
                        'values' => array(array(
                                'id' => 'active_on',
                                'value' => 1,
                                'label' => $this->l('Active')), array(
                                'id' => 'active_off',
                                'value' => 0,
                                'label' => $this->l('Inactive')))),
                ),
                'submit' => array('title' => $this->l('Save')),
                'buttons' => array(
                    array(
                        'href' => Context::getContext()->link->getAdminLink('AdminGCardeliverycity', true) . '&updatecitydelivery&id_citydelivery=' . $id_citydelivery,
                        'title' => $this->l('Cancle'),
                        'icon' => 'process-icon-cancel'
                    )
                )
            )
        );
        $helper = new HelperForm();
        $helper->show_toolbar = false;
        $helper->module = $this;
        $helper->name_controller = $this->name;
        $helper->toolbar_scroll = true;
        $lang = new Language((int) Configuration::get('PS_LANG_DEFAULT'));
        $helper->default_form_language = $lang->id;
        $helper->allow_employee_form_lang = Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') ? Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') : 0;
        $this->fields_form = array();
        $helper->identifier = $this->identifier;
        $helper->submit_action = 'submit';
        $helper->currentIndex = AdminController::$currentIndex;
        $helper->token = Tools::getAdminTokenLite($this->name);
        $id_additional_service = (int) Tools::getValue('id_additional_service');
        $additionalServiceObj = new AdditionalServicesModel($id_additional_service);
        $helper->tpl_vars = array(
            'fields_value' => $this->getFormValues($additionalServiceObj),
            'languages' => $this->context->controller->getLanguages(),
            'id_language' => $this->context->language->id
        );
        $_1 = $helper->generateForm(array($fields_form_1));
        $return = $_1;
        return $return;
    }

    function getFormValues($additionalServiceObj) {
        return array(
            'service_name' => Tools::getValue('service_name ', $additionalServiceObj->service_name),
            'service_desc' => Tools::getValue('service_desc', $additionalServiceObj->service_desc),
            'charge' => Tools::getValue('charge', $additionalServiceObj->charge),
            'active' => Tools::getValue('active', $additionalServiceObj->active)
        );
    }

}
У вопроса есть решение - Посмотреть?

Ответы - Перенаправление пользователя после сохранения данных в Admin controller Prestashop / Redirect user after saving data in admin controller Prestashop

Mahdi Shad

27.09.2018 04:40:20

Вероятно redirect_after может быть полезным

$this->redirect_after = 'Your custom address';
https://stackoverflow.com/questions/52537957/redirect-user-after-saving-data-in-admin-controller-prestashop/52538424#comment92036346_52538424
но в каком методе я должен написать это? в __договор()?
https://stackoverflow.com/questions/52537957/redirect-user-after-saving-data-in-admin-controller-prestashop/52538424#comment92036437_52538424
Я попробовал это внутри postprocess() и _ _ construct, но после этого при нажатии кнопки add или edit в списке он не показывал renderform, но каждый раз получал перенаправление.
https://stackoverflow.com/questions/52537957/redirect-user-after-saving-data-in-admin-controller-prestashop/52538424#comment92054761_52538424
Вы должны добавить это после Parent:: postProcess(); и с особым условием отправки.
Является ответом!
Alexander Grosul

28.09.2018 08:59:38

Прежде всего, кажется, что вы перенаправляете свою страницу на тот же URL-адрес. Попробуйте использовать это Tools::redirectAdmin($this->context->link->getAdminLink('AdminHome'));

где

AdminHome

это URL-адрес перенаправления, вам нужно заменить его своим. И во-вторых, попробуйте использовать

Tools::getIsset('yourButtonName')

вместо

Tools::isSubmit('yourButtonName')

и последнее, если ничто из перечисленного выше не поможет, попробуйте сдвинуться с места

parent::initContent();

и поставьте его после вашего состояния

https://stackoverflow.com/questions/52537957/redirect-user-after-saving-data-in-admin-controller-prestashop/52549206#comment92045276_52549206
общественная функция постобработки() { если (инструменты::getIsset('submitAddadditional_service')) { $этом->redirect_after = контекст::метода getcontext()->ссылка->getAdminLink('AdminGCardeliverycity', истина) ; } родителя::постобработка(); }
Помочь в развитии проекта:
Закрыть X