首页 > 解决方案 > 使用 HelperForm 时 Prestashop 表单输入不可见

问题描述

我正在开发一个 prestashop 模块,这只是一个开始。问题出在我的模块的配置页面中。

我附加了一些文本框,标签和描述可见,但文本框不可见。

我查看了许多其他示例,但还没有发现任何差异和问题所在。

神秘的是,如果我将类型更改为dateor file,它是可见的。

// This function called in getContent() of main module php file.
public function displayForm()
{
    $fields_form = array(
        'form' => array(
            'legend' => array(
                'title' => $this->trans('*'),
            ),
            // Here is the textbox.
            'input' => array(
                array(
                    'type' => 'text',
                    'label' => $this->trans('Link:'),
                    'name' => 'LINK_PRODUCT',
                    'desc' => $this->trans('Please input the link...'),
                    'lang' => true,
                    'required' => true
                )
            ),
            'submit' => array(
                'title' => $this->trans('Save'),
                'class' => 'btn btn-default pull-right'
            )
        )
    );

    $helper = new HelperForm();
    $helper->module = $this;
    $helper->name_controller = $this->name;
    $helper->token = Tools::getAdminTokenLite('AdminModules');
    $helper->currentIndex = AdminController::$currentIndex . '&configure=' . $this->name;

    $helper->title = $this->displayName;
    $helper->show_toolbar = false;
    $helper->submit_action = 'submit';
    $helper->fields_value['LINK_PRODUCT'] = Configuration::get('LINK_PRODUCT');

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

我想让文本框可见,我应该怎么做?

标签: phpprestashop

解决方案


您想要多语言,因此您需要定义默认语言。将此代码添加到您的助手定义中

$helper->default_form_language = $this->context->language->id;

并更换

$helper->fields_value['LINK_PRODUCT'] = Configuration::get('LINK_PRODUCT');

$helper->tpl_vars = array(
    'fields_value' => array('LINK_PRODUCT' => Configuration::get('LINK_PRODUCT')),
    'languages' => $this->context->controller->getLanguages(),
    'id_language' => $this->context->language->id,
);

定义 LINK_PRODUCT 变量的所有可用语言和值。而且,不要忘记您使用多语言字段,并且您需要有一个包含变量值的数组。因此,在提取和保存期间,您需要将它们视为所有语言的值。例如,如果您有三种可用的语言,则需要获取三个值。获得它们的最好方法是

$values = [];
foreach ($this->context->controller->getLanguages() as $language) {
    $values[$language['id_lang']] = Configuration::get('LINK_PRODUCT', $language['id_lang']);
}
$helper->tpl_vars = array(
    'fields_value' => array('LINK_PRODUCT' => $values),
    'languages' => $this->context->controller->getLanguages(),
    'id_language' => $this->context->language->id,
);

当你保存它时,使用类似的组合,但使用updateValue


推荐阅读