Редактор BBcode в phpFOX

10:14 30.07.2017
Если установить опцию Allow HTML на false (настройки core: admincp/setting/edit/module-id_core/), то в созданном списке ul или ol появляется ошибки, например я составил код списка вот так:
[ul]
[*]Пример первой строки
[*]Пример второй строки
[*]Пример третьей строки
[/ul]

на экране будет так:
[*]Пример первой строки
[*]Пример второй строки
[*]Пример третьей строки

Исходный код страницы выглядит так:
<ul><li><br>[*]Пример первой строки<br>[*]Пример второй строки<br>[*]Пример третьей строки<br></li></ul>

Пока я решил звездочку ([*]) заменить на открывающий и закрывающий тег ([*li][*/li] (без звездочек *)). Делаю так:
Открываем: static/jscript/editor.js, находим:
    getListReply: function()
    {
        var $sReply = prompt('Enter text to build your list. Once you are done click cancel.', '');
        
        if (!empty($sReply))
        {
            Editor.createBBtag("\n[*]", "", this.sEditorId, $sReply);
            
            this.getListReply();
        }
        else
        {
            Editor.createBBtag("\n[/" + this.sLastListType + "]\n",'', this.sEditorId);
        }
    },

Меняем на:
    getListReply: function()
    {
        var $sReply = prompt('Write word or phrase to the list:', '');
        if ($sReply)
        {
            Editor.createBBtag("[li]" + $sReply + "[/li]\n", '', this.sEditorId);
            this.getListReply();
        }
        else
        {
            Editor.createBBtag("[/" + this.sLastListType + "]\n",'', this.sEditorId);
        }
    },

Очищаем кэш. Теперь вместо одной звездочки, будет вставляться два тега (li), открывающий и закрывающий, а между ними строка.
Это временное решение и не исправляет ошибку на 100%. Рекомендую все же включить Allow HTML.
10:38 30.07.2017
Ещё одни правки для редактора поста.
После того, как вставляешь какой то BBcode, например: , курсор тут же перемещается в конец строки, что очень неудобно, так как я вставляю теги, для того, что бы между ними, что то написать, а курсор убежал в конец и приходится его возвращать...

Что бы курсор не убегал, открываем: static/jscript/editor.js, находим и удаляем строку:
        $('#' + areaId).putCursorAtEnd(); 

После сохранения файла, необходимо почистить кэш.

Если надо завернуть какую то фразу|слово в уже набранном тексте, достаточно выделить ту фразу, что надо обвернуть и нажать нужный тег, фраза встанет между тегами, а курсор опять убежит в самый конец текста, что тоже очень не удобно. А вдруг мне надо эту фразу завернуть в ещё один тег? Опять искать, где эта фраза? Я не хочу мучить своих пользователей. Я сделал так: нахожу:
            var preString = (txtArea.value).substring(0,txtArea.selectionStart);
            var newString = openerTag + (txtArea.value).substring(txtArea.selectionStart,txtArea.selectionEnd) + closerTag;
            var postString = (txtArea.value).substring(txtArea.selectionEnd);
            txtArea.value = preString + newString + postString;
            txtArea.focus();

И меняю на:
            var preString  = (txtArea.value).substring(0,txtArea.selectionStart);
            var newString  = openerTag + (txtArea.value).substring(txtArea.selectionStart,txtArea.selectionEnd) + closerTag;
            var postString = (txtArea.value).substring(txtArea.selectionEnd);
            var markStart  = preString.length + openerTag.length;
            var markEnd    = preString.length + newString.length - closerTag.length;

            txtArea.value  = preString + newString + postString;
            txtArea.select();
            txtArea.setSelectionRange(markStart, markEnd);

Сохранил, почистил кэш. Теперь после вставке тегов выделенного текста, текст остаётся выделенным и не срабатывает надоедливая прокрутка вниз.

Функцию putCursorAtEnd, я вообще удалил:
$Behavior.putCursorAtEnd = function()
{
    jQuery.fn.putCursorAtEnd = function()
    {
        return this.each(function()
        {
            $(this).focus();
            if (this.setSelectionRange)
            {
                var len = $(this).val().length * 2;
                this.setSelectionRange(len, len);
            }
            else
            {
                $(this).val($(this).val());
            }

            this.scrollTop = 999999;
        });
    };
}; 
10:42 30.07.2017
Добавил в редактор текста BBcode link (в phpFOX 3 вместо тега URL пишется LINK), тег img и code. Добавлял так:
Открыть файл: include/library/phpfox/editor/editor.class.php, найти:
        array( 
            'image'   => 'text_underline.png',
            'command' => 'u',
            'phrase'  => 'core.underline'
        ),
        
        array(
            'separator'
        ),

Ниже добавить:
        array(
            'image'   => 'link.png',
            'command' => 'link',
            'phrase'  => 'core.url'
        ),
        
        array(
            'image'   => 'img.png',
            'command' => 'img',
            'phrase'  => 'core.image'
        ),        
        
        array(
            'image'   => 'code.png',
            'command' => 'code',
            'phrase'  => 'core.code'
        ),
        
        array(
            'separator'
        ),

В папку: theme/frontend/default/style/default/image/editor/, добавить картинки:
Редактор BBcode в phpFOXРедактор BBcode в phpFOXРедактор BBcode в phpFOX

Уже и не помню (и наверно ни когда не вспомню) после каких правок, при отключенном Allow HTML у меня при создании списка, его элементы располагаются через пустую строчку, смотрится некрасиво.
Исправил так, открываю: include/library/phpfox/parse/output.class.php, нахожу:
            $text = str_replace("\n", '[br]', $text);

Выше добавляю:
            $text = preg_replace('#(\[\/?(ul|ol|li)\])[\n]{1}#', '$1', $text);

Как всегда - название переменных у меня свои, будьте внимательны.