Render helper form from prestashop admin controller

丶灬走出姿态 提交于 2019-12-06 11:50:45

问题


I am trying to add a helper form that lets the user upload images for two languages that the user can select.

However I am stuck with the form and cannot render it in the view. Here is my controller code:

<?php

class AdminWineoHeaderImgController extends ModuleAdminController
{
    public function __construct()
    {
        $this->bootstrap = true;
        $this->lang = (!isset($this->context->cookie) ||
         !is_object($this->context->cookie)) ? intval(Configuration::get('PS_LANG_DEFAULT')) : intval($this->context->cookie->id_lang);

        parent::__construct();
    }

    public function display()
    {
        parent::display();
    }

    public function renderList()
    {
        $this->renderForm();
        $return = $this->context->smarty->fetch(_PS_MODULE_DIR_.'wineoheaderimg/views/templates/hook/adminwineoimg.tpl');

        return $return;
    }

    public function renderForm()
    {
        $fields_form = array(
            'form' => array(
                'legend' => array(
                    'title' => $this->module->l('Wineo Header Img Configuration'),
                    'icon' => 'icon-envelope',
                ),
                'input' => array(
                    array(
                        'type' => 'file',
                        'label' => $this->module->l('Add images'),
                        'name' => 'enable_grades',
            'id' => 'uploadwineoheaderimg',
            'required' => false,
                        'desc' => $this->module->l('Choose images that will appear on the front page.'),
                    ),
                    array(
                    'type' => 'select',
                    'label' => $this->l('Languages:'),
                    'name' => 'category',
                    'required' => true,
                    'options' => array(
                                'query' => $options = array(
                                            array(
                                              'id_option' => 1,       // The value of the 'value' attribute of the <option> tag.
                                              'name' => 'EN',    // The value of the text content of the  <option> tag.
                                            ),
                                            array(
                                              'id_option' => 2,
                                              'name' => 'BG',
                                            ),
                                ),
                                'id' => 'id_option',
                                'name' => 'name',
                               ),
                ),
                ),
                'submit' => array('title' => $this->module->l('Save')),
            ),
        );

        $helper = new HelperForm();
        $helper->table = 'wineoheaderimg';
        $helper->default_form_language = (int) Configuration::get('PS_LANG_DEFAULT');
        $helper->allow_employee_form_lang = (int) Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG');
        $helper->submit_action = 'wineo_header_img_pc_form';
        $helper->currentIndex = $this->context->link->getAdminLink('AdminModules', false).'&configure='.$this->module->name.'&tab_module='.$this->module->tab.'&module_name='.$this->module->name;
        $helper->token = Tools::getAdminTokenLite('AdminModules');
        $helper->tpl_vars = array(
            'fields_value' => array(
                'wineo_header_img' => Tools::getValue('enable_grades', Configuration::get('WINEO_HEADER_IMG')),
            ),
            'languages' => $this->context->controller->getLanguages(),
        );

        return $helper->generateForm(array($fields_form));
    }
}

Where should I call the method renderForm()? I have tried in the admin hooks and basically everywhere I could imagine.

Any help will be appreciated!


回答1:


Well you are calling renderForm() inside renderList(), (I assume you want the form to display by default when you open controller page) but you don't assign the form to template.

public function renderList()
{
    $form = $this->renderForm();

    // To load form inside your template
    $this->context->smarty->assign('form_tpl', $form);
    return $this->context->smarty->fetch(_PS_MODULE_DIR_.'wineoheaderimg/views/templates/hook/adminwineoimg.tpl');

    // To return form html only
    return $form;
}

So if you want the form inside your adminwineoimg.tpl

{* Some HTML *}
{$form_tpl}
{* Some HTML *}


来源:https://stackoverflow.com/questions/40544689/render-helper-form-from-prestashop-admin-controller

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!