Henry Lynx Henry Lynx - 16 days ago 14
PHP Question

Render helper form from prestashop admin controller

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!

Answer

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 *}
Comments