未定义指数(输入文本名称)在返回办公室的表单自定义(的Prestashop)(Undefined i

2019-10-19 06:55发布

我创建一个的Prestashop 1.5模块,在该模块返回办公室定制我得到了输入文本背后的错误 注意:未定义指数:名称/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);?>

它lookes就像它与输入文本值相关。

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

先感谢您。

Answer 1:

我认为你需要的形式输入添加默认值:

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

$操作变量从以前的形式通过了低谷$ _ POST [“行动”]在之前的“编辑”按钮提交进来。 并且$ id例如来自一个隐藏的输入取消以前的形式。



Answer 2:

我解决我改变了这种代码的问题

$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');


文章来源: Undefined index (input text name) in Back office form customization (Prestashop)