Неопределенный индекс (вводимое текстовое имя) в настройке формы бэк-офиса (Prestashop)

Я создаю модуль Prestashop 1.5. В модуле настройки бэк-офиса я получил эту ошибку за входным текстом error in module  конфигурация бэк-офиса Примечание: неопределенный индекс: имя в /var/www/presta/cache/smarty/compile/7d2a4e588611a8a1dd049f82d14a4ae0b20fe990.file.form.tpl.php в строке 228

строка 228 такая

<?php $_smarty_tpl->tpl_vars['value_text'] = new Smarty_variable($_smarty_tpl->tpl_vars['fields_value']->value[$_smarty_tpl->tpl_vars['input']->value['name']], null, 0);?>

Похоже, это связано со значением входного текста.

name — имя входного текста. я не знаю как решить эту проблему

мой код функции displayForm здесь

public function displayForm()
{

$default_lang = (int)Configuration::get('PS_LANG_DEFAULT');
 $id_lang = (int)Context::getContext()->language->id;

$categories = $this->getCMSCategories(false, 0, (int)$id_lang);
$options = array();

foreach ($categories as $category)
{

    $pages = $this->getCMSPages((int)$category['id_cms_category'], false, (int)$id_lang);

    foreach ($pages as $page){
    //  var_dump($page['meta_title']);exit;
        $radioelement =array(
                'id' => 'id_cms'.(int)$page['id_cms'],
                'value' => (int)$page['id_cms'],
                'label' => $page['meta_title']
        );
    $options[]  = $radioelement;
    }   
}


//$spacer = str_repeat('&nbsp;', $this->spacer_size * (int)$depth);

$fields_form[0]['form'] = array(
        'legend' => array(
                'title' => $this->l('Settings'),
        ),

        'input' => array(
                array(
'type'     => 'text',                                // This is a regular <input> tag.
'label'    => $this->l('Name'),                      // The <label> for this <input> tag.
'name'     => 'name',                                // The content of the 'id' attribute of the <input> tag.
'size'     => 50,                                    // The content of the 'size' attribute of the <input> tag.
'required' => true,                                  // If set to true, this option must be set.
'desc'     => $this->l('Please enter your name.')    // A help text, displayed right next to the <input> tag.
 ),
                 array(
                'type' => 'radio',
                'label' => $this->l('choose a cms page'),
                'name' => 'id_cms',
                'class' => 't',
                 'values' => $options,
                'is_bool' => false,
                'required' => true
        )
        ),

        'submit' => array(
                'title' => $this->l('Save'),
                'class' => 'button',
                'name'=>'submitCmsReadMore'
        )
);

$helper = new HelperForm();

// Module, t    oken and currentIndex
$helper->module = $this;
$helper->name_controller = $this->name;
$helper->token = Tools::getAdminTokenLite('AdminModules');
$helper->currentIndex = AdminController::$currentIndex.'&configure='.$this->name;

// Language
$helper->default_form_language = $default_lang;
$helper->allow_employee_form_lang = $default_lang;

// Title and toolbar
$helper->title = $this->displayName;
$helper->show_toolbar = true;        // false -> remove toolbar
$helper->toolbar_scroll = true;      // yes - > Toolbar is always visible on the top of the screen.
$helper->submit_action = 'submitCmsReadMore';
$helper->toolbar_btn = array(
    'save' =>
    array(
        'desc' => $this->l('Save'),
        'href' => AdminController::$currentIndex.'&configure='.$this->name.'&save'.$this->name.
        '&token='.Tools::getAdminTokenLite('AdminModules'),
    ),
    'back' => array(
        'href' => AdminController::$currentIndex.'&token='.Tools::getAdminTokenLite('AdminModules'),
        'desc' => $this->l('Back to list')
    )
);

// Load current value
$helper->fields_value['MOD_CMS_READ_MORE_ID_CMS'] = Configuration::get('MOD_CMS_READ_MORE_ID_CMS');
$helper->fields_value['MOD_CMS_READ_MORE_NB_CHARS'] = Configuration::get('MOD_CMS_READ_MORE_NB_CHARS');


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

Заранее спасибо.


person Tarek Fellah    schedule 03.02.2014    source источник


Ответы (2)


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

    // Load current value
    $helper->fields_value['MOD_CMS_READ_MORE_ID_CMS'] = Configuration::get('MOD_CMS_READ_MORE_ID_CMS');
    $helper->fields_value['MOD_CMS_READ_MORE_NB_CHARS'] = Configuration::get('MOD_CMS_READ_MORE_NB_CHARS');

    $helper->fields_value['name'] = 'nombre'; //If you want an empty value simply use ''
    $helper->fields_value['id_cms'] = 'value3';

Я делаю свой первый модуль и использую предложение переключения, чтобы узнать, создаю ли я новые значения или изменяю существующее значение:

switch($action) {

  case 'new':
    $helper->fields_value['name'] = ''; //Empty input
    $helper->fields_value['id_cms'] = 'value1'; //Default value selected
    break;

  case 'edit':
    $data = Db::getInstance()->getRow('SELECT * FROM `'._DB_PREFIX_.'table` WHERE id = '.$_POST["id"].''); //Recover from data from database using id passed trough $_POST["id"].
    $helper->fields_value['name'] = $data["name"]; //Name from database
    $helper->fields_value['id_cms'] = $data["id_cms"]; //Radio value from database
    break;
}

Переменная $action получена из предыдущей формы, переданной через $_POST["action"] в предыдущей кнопке отправки "редактировать". и $id, например, получен из скрытого ввода в предыдущей форме.

person Sundbox    schedule 06.02.2014
comment
Или в пределах getConfigFormValues() модулей, сгенерированных генератором PrestaShop : 'FORM_FIELD' => Configuration::get('FORM_FIELD', default_value) (обратите внимание, что default_value может быть null). - person Skippy le Grand Gourou; 21.08.2019
comment
Еще одна причина этой ошибки — ключи options query не соответствуют дескрипторам options. Например. в этот пример с использованием optgroup, если вы измените label => label на label => group, вам придется использовать group => marg вместо label => marg впоследствии — то же самое для query, id и name в последнем массиве options. - person Skippy le Grand Gourou; 21.08.2019

Я решил проблему, я изменил этот код

$helper->fields_value['name'] = Configuration::get('MOD_CMS_READ_MORE_NB_CHARS');
$helper->fields_value['id_cms'] =  Configuration::get('MOD_CMS_READ_MORE_ID_CMS');
person Tarek Fellah    schedule 07.02.2014