Prestashop 1.6将tinymce字段添加到管理员首选项

时间:2019-06-07 09:30:16

标签: php prestashop prestashop-1.6

我正在尝试向“管理偏好设置”中添加一个新字段-具有tinymce的textarea字段。我已将代码添加到AdminPreferencesController.php:

    $this->fields_options['contact'] = array(
        'title' =>  $this->l('Contact'),
        'icon' =>   'icon-cogs',
        'submit' => array('title' => $this->l('Save')),
    );

    $this->fields_options['contact']['fields']['PS_CONTACT_ADDITIONAL_INFO'] = array(
        'type' => 'textarea',
        'label' => $this->l('Short description'),
        'name' => 'short_description',
        'lang' => true,
        'cols' => 60,
        'rows' => 10,
        'autoload_rte' => 'rte',
        'col' => 6,
    );

但是tinymce不会出现,当我保存后使用HTML标记时,它们会消失。 Presta剥离所有HTML标记。

如何在此字段上允许HTML标签并启用tinymce?

1 个答案:

答案 0 :(得分:0)

似乎您不能仅仅以常规方式添加它。但是您可以以另一种方式实现它。 首先,使用字段类型textareaLang代替textarea,并向该字段添加参数'validation' => 'isCleanHtml'

$this->fields_options['contact']['fields']['PS_CONTACT_ADDITIONAL_INFO'] = array(
    'type' => 'textareaLang',
    'label' => $this->l('Short description'),
    'name' => 'short_description',
    'lang' => true,
    'cols' => 60,
    'rows' => 10,
    'col' => 6,
    'validation' => 'isCleanHtml'
);

创建自己的脚本以初始化编辑器。我创建了一个脚本tinymce.init.js并将其放入js/admin/文件夹

$(document).ready(function(){
    ad = ''; // this is defenition of the external plugin path. I didn't fint how it can impact on script if it's empty but by default it it the path to your admin folder
    iso = iso_user;
    var config = {
        selector: '.textarea-autosize'
    };
    tinySetup(config);
});

然后将tinymce脚本和您自己的脚本包含到此控制器AdminPreferencesController.php

public function setMedia()
{
    $this->context->controller->addJquery();
    $this->context->controller->addJS(
        array(
            _PS_JS_DIR_.'admin/tinymce.init.js',
            _PS_JS_DIR_.'tiny_mce/tiny_mce.js',
            _PS_JS_DIR_.'admin/tinymce.inc.js'
        )
    );

    parent::setMedia();
}

它应该实现您的要求。但是不要忘记,现在您应该在多语言范围内调用配置字段。因此,将语言ID添加到Configuration::get(),例如

Configuration::get('PS_CONTACT_ADDITIONAL_INFO, $id_lang)

每当您使用它时。

P.S。请记住,实现您目标的最佳解决方案是创建一个简单的模块来处理此问题。还有更多,推荐的方法。