Prestashop-可翻译表单字段与HelperForm一起失败

Prestashop-可翻译表单字段与HelperForm一起失败,prestashop,Prestashop,我正在尝试执行一个Prestashop模块,但是当尝试在配置表单上设置一个可翻译表单字段时,它失败了 这是我通过JS控制台得到的错误: [14:33:39.915] ReferenceError: defaultLanguage is not defined @ http://localhost:8888/js/admin.js:173 我认为我已经在后台很好地配置了languajes,所以我不确定为什么会发生这种情况 以下是我尝试创建表单的方式: public function displa

我正在尝试执行一个Prestashop模块,但是当尝试在配置表单上设置一个可翻译表单字段时,它失败了

这是我通过JS控制台得到的错误:

[14:33:39.915] ReferenceError: defaultLanguage is not defined @ http://localhost:8888/js/admin.js:173
我认为我已经在后台很好地配置了languajes,所以我不确定为什么会发生这种情况

以下是我尝试创建表单的方式:

public function displayForm()
{
    // Get default Language
    $default_lang = (int)Configuration::get('PS_LANG_DEFAULT');

    // Init Fields form array
    $fields_form[0]['form'] = array(
            'legend' => array(
                    'title' => $this->l('Settings'),
            ),
            'input' => array(
                    array(
                            'type' => 'text',
                            'label' => $this->l('Título de la noticia'),
                            'name' => 'NOTICIA_TIT',
                            'size' => 30,
                            'required' => true,
                            'lang' => true
                    ),
                    array(
                            'type' => 'text',
                            'label' => $this->l('Imagen de la noticia'),
                            'name' => 'NOTICIA_IMG',
                            'size' => 30,
                            'required' => true,
                            'enabled' => false
                    ),
                    array( 
                            'type' => 'file',
                            'label' => $this->l('Subir nueva imagen'),
                            'name' => 'NOTICIA_IMG_FILE',
                            'size' => 30        
                    ),
                    array(
                            'type' => 'textarea',
                            'label' => $this->l('Texto de la noticia'),
                            'name' => 'NOTICIA_TXT',
                            'required' => true,
                            'cols' => 30,
                            'rows' => 4,
                            'lang' => true
                    )
            ),
            'submit' => array(
                    'title' => $this->l('Save'),
                    'class' => 'button'
            )
    );

    $helper = new HelperForm();

    // Module, token 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 = 'submit'.$this->name;
    $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['NOTICIA_TXT'] = Configuration::get('NOTICIA_TXT');
    $helper->fields_value['NOTICIA_TIT'] = Configuration::get('NOTICIA_TIT');
    $helper->fields_value['NOTICIA_IMG'] = Configuration::get('NOTICIA_IMG');

    return $helper->generateForm($fields_form);
}
编辑:我在代码中看到了这一点

<script type="text/javascript">
var module_dir = '/modules/';
    var id_language = 1;
    var languages = new Array();
    var vat_number = 1;
    // Multilang field setup must happen before document is ready so that calls to displayFlags() to avoid
    // precedence conflicts with other document.ready() blocks
            // we need allowEmployeeFormLang var in ajax request
    allowEmployeeFormLang = 1;
    displayFlags(languages, id_language, allowEmployeeFormLang);

    $(document).ready(function() {

        if ($(".datepicker").length > 0)
            $(".datepicker").datepicker({
                prevText: '',
                nextText: '',
                dateFormat: 'yy-mm-dd'
            });

    });

</script>

var module_dir='/modules/';
变量id_语言=1;
var languages=新数组();
var vat_编号=1;
//Multilang字段设置必须在文档准备就绪之前进行,以便调用displayFlags()以避免
//优先级与其他document.ready()块冲突
//我们需要ajax请求中的allowEmployeeFormLang变量
allowEmployeeFormLang=1;
显示标志(语言、id_语言、allowEmployeeFormLang);
$(文档).ready(函数(){
如果($(“.datepicker”).length>0)
$(“.datepicker”).datepicker({
上一个文本:“”,
下一个文本:“”,
日期格式:“yy-mm-dd”
});
});
languajes变量被创建为空数组。但是,这是函数displayFlags:

function displayFlags(languages, defaultLanguageID, employee_cookie)
{
if ($('.translatable'))
{
    $('.translatable').each(function() {
        if (!$(this).find('.displayed_flag').length > 0) {
            $.each(languages, function(key, language) {
                if (language['id_lang'] == defaultLanguageID)
                {
                    defaultLanguage = language;
                    return false;
                }
            });
            var displayFlags = $('<div></div>')
                .addClass('displayed_flag')
                .append($('<img>')
                    .addClass('language_current')
                    .addClass('pointer')
                    .attr('src', '../img/l/' + defaultLanguage['id_lang'] + '.jpg')
                    .attr('alt', defaultLanguage['name'])
                    .click(function() {
                        toggleLanguageFlags(this);
                    })
                );
            var languagesFlags = $('<div></div>')
                .addClass('language_flags')
                .html('Choose language:<br /><br />');
            $.each(languages, function(key, language) {
                var img = $('<img>')
                    .addClass('pointer')
                    .css('margin', '0 2px')
                    .attr('src', '../img/l/' + language['id_lang'] + '.jpg')
                    .attr('alt', language['name'])
                    .click(function() {
                        changeFormLanguage(language['id_lang'], language['iso_code'], employee_cookie);
                    });
                languagesFlags.append(img);
            });
            if ($(this).find('p:last-child').hasClass('clear'))
                $(this).find('p:last-child').before(displayFlags).before(languagesFlags);
            else
                $(this).append(displayFlags).append(languagesFlags);
        }
    });
}
}
函数显示标志(语言、defaultLanguageID、员工\u cookie)
{
如果($('.translateable'))
{
$('.translateable')。每个(函数(){
if(!$(this).find('.displated_flag')。长度>0){
$.each(语言、函数(键、语言){
如果(语言['id_lang']==defaultLanguageID)
{
默认语言=语言;
返回false;
}
});
变量displayFlags=$('')
.addClass('显示的\u标志')
.append($('')
.addClass(“语言标志”)
.html('选择语言:

'); $.each(语言、函数(键、语言){
var img=$('我修复了与您相同的错误,但我得到了另一个错误

为了定义defaultLanguage,您应该填写HelpPerform的languages属性。您可以这样做:

$languages = Language::getLanguages(true);
$helper->languages = $languages;
我不确定您是否应该为getLanguages设置true或false…我对这两个选项都感到厌倦,但仍然会出现以下错误:

Uncaught SyntaxError: Unexpected token ILLEGAL 
发生在这里:

languages[0] = {
id_lang: 1,
iso_code: 'en',
name: 'English',
is_default: '<br />
语言[0]={
同上:1,
iso_代码:“en”,
姓名:‘英语’,
是默认值:'
所以现在,为了定义属性,可能还有更多的工作要做……你找到解决问题的方法了吗

编辑: 通过设置默认值,它可以工作。但是它很难看

// Languages
$languages = Language::getLanguages(true);
    for($i=0; $i<count($languages); $i++){
        if($languages[$i]['id_lang'] == $default_lang){
            $languages[$i]['is_default'] = 1;
        }else{
            $languages[$i]['is_default'] = 0;
        }
    }
$helper->languages = $languages;
//语言
$languages=Language::getLanguages(true);
对于($i=0;$i语言=$languages;

我修复了与您相同的错误,但我得到了另一个错误

为了定义defaultLanguage,您应该填写HelpPerform的languages属性。您可以这样做:

$languages = Language::getLanguages(true);
$helper->languages = $languages;
我不确定您是否应该为getLanguages设置true或false…我对这两个选项都感到厌倦,但仍然会出现以下错误:

Uncaught SyntaxError: Unexpected token ILLEGAL 
发生在这里:

languages[0] = {
id_lang: 1,
iso_code: 'en',
name: 'English',
is_default: '<br />
语言[0]={
同上:1,
iso_代码:“en”,
姓名:‘英语’,
是默认值:'
所以现在,为了定义属性,可能还有更多的工作要做……你找到解决问题的方法了吗

编辑: 通过设置默认值,它可以工作。但是它很难看

// Languages
$languages = Language::getLanguages(true);
    for($i=0; $i<count($languages); $i++){
        if($languages[$i]['id_lang'] == $default_lang){
            $languages[$i]['is_default'] = 1;
        }else{
            $languages[$i]['is_default'] = 0;
        }
    }
$helper->languages = $languages;
//语言
$languages=Language::getLanguages(true);
对于($i=0;$i语言=$languages;

从模块控制器获取语言:

$languages = $this->context->controller->getLanguages();

从模块控制器获取语言:

$languages = $this->context->controller->getLanguages();

我现在无法尝试,但非常感谢!这似乎是正确的解决方案。我现在无法尝试,但非常感谢!这似乎是正确的解决方案。