Визуализация вспомогательной формы из prestashop admin controller

Я пытаюсь добавить вспомогательную форму, которая позволяет пользователю загружать изображения для двух языков, которые пользователь может выбрать.

Однако я застрял с формой и не могу отобразить ее в виде. Вот мой код контроллера:

<?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));
    }
}

Где я должен вызвать метод renderForm()? Я пробовал в админке хуки и в основном везде, что мог себе представить.

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

1 ответ

Решение

Ну ты звонишь renderForm() внутри renderList()(Я предполагаю, что вы хотите, чтобы форма отображалась по умолчанию при открытии страницы контроллера), но вы не назначаете форму для шаблона.

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;
}

Так что, если вы хотите, чтобы форма внутри вашего adminwineoimg.tpl

{* Some HTML *}
{$form_tpl}
{* Some HTML *}
Другие вопросы по тегам