Prestashop 1.6 добавляет поле tinymce в настройки администратора - PullRequest
0 голосов
/ 07 июня 2019

Я пытаюсь добавить новое поле в Предпочтения администратора - поле textarea с tinymce. Я добавил код в 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 голосов
/ 08 июня 2019

Кажется, вы не можете просто добавить его обычным способом. Но вы можете реализовать это следующим образом. Прежде всего, используйте тип поля 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();
}

Это должно соответствовать вашим требованиям. Но не забывайте, что теперь вы должны вызывать ваше поле конфигурации в многоязычной области. Итак, добавьте идентификатор языка в Configuration::get() как

Configuration::get('PS_CONTACT_ADDITIONAL_INFO, $id_lang)

всякий раз, когда вы используете его.

P.S. Имейте в виду, что лучшим решением для вашей цели является создание простого модуля, который справится с этим. И гораздо больше, это рекомендуемый способ.

...