后台表单自定义中的未定义索引(输入文本名称)(Prestashop)

时间:2014-02-03 14:34:11

标签: prestashop prestashop-1.5

我正在创建一个Prestashop 1.5模块,在模块后台定制中我在输入文本后面出现此错误 error in module back office configuration     注意:未定义索引:第228行/var/www/presta/cache/smarty/compile/7d2a4e588611a8a1dd049f82d14a4ae0b20fe990.file.form.tpl.php中的名称

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

提前谢谢。

2 个答案:

答案 0 :(得分: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 来自隐藏的输入,而不是之前的形式。

答案 1 :(得分:0)

我解决了问题,我改变了这段代码

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