• avatar ff00
  • 1
Если из коробки, то только tinyMCE, но как по мне tinyMCE — не очень, лучше ckeditor поставить и потихоньку его дорабатывать под свои нужды. Документация там хорошая, плагинов много, да и самому плагин можно элементарно запилить любой.
Да уж, это точно! Я может плохо искал, есть 100% рабочее решение, кроме tinyMCE?
  • avatar ff00
  • 0
Траблов там будет очень много, его придется допиливать и очень долго.
В общем так, у меня ls 1.0.3 и ckeditor, который в каталоге, если честно, то так себе и загрузка картинок на 1.0.3 не работает. Но я его скачал, потом пошел сюда, скачал basic версию и залил файлы в \plugins\ckeditor\templates\skin\default\js\ckeditor
Имеем красивый редактор в черном стиле, загрузка изображений, но какие-то траблы с размером экрана. Надо ставить на живой сайт и пробовать работать
Это который из каталога? Сейчас попробую
Я пробовал, у меня с tiny проблемы какие-то были. Не помню точно, но вроде не получилось добавить кнопки заголовков h2-h3. В markitup без проблем добавил
  • avatar dex-
  • 1
Привет! Из «коробки» есть визуальный редактор TinyMCE. Подключается в файле конфига.
  • avatar ff00
  • 1
Не будет отображаться, т.к. для отображения там используется textarea, т.е. отображаться может только текст. Я бы посоветовал прикрутить ckeditor.
  • avatar ska
  • 0
Какие плагины стоят?
  • avatar ska
  • 0
Почему плагин пропал из каталога?
Сразу поясню, «зачем так сложно».

Мне несложно изменить конфиг конкретно шаблона Synio.

Но у меня автоматический деплой кода и вносить изменения в репозитории плагинов — те, которые могут быть заданы в основном конфиге приложения — я не хочу.
В общем, единственное решение, которое хоть как-то работает:

/engine/modules/viewer/Viewer.class.php

public function Init($bLocal = false)
    {
        $this->Hook_Run('viewer_init_start', compact('bLocal'));
        /**
         * Load template config
         */
        if (!$bLocal) {
            if (file_exists($sFile = Config::Get('path.smarty.template') . '/settings/config/config.php')) {
                Config::LoadFromFile($sFile, false);
            }

            $skin = Config::Get('view.skin');
            if (file_exists($sFile = Config::Get('path.root.server') . "/config/skins/{$skin}.config.php")) {
                Config::LoadFromFile($sFile, false);
            }
        }
...


И, к слову, зачем такая сложная функция слияния массивов?

чем не угодил
php.net/manual/ru/function.array-replace-recursive.php
?
Причем я не понимаю другого.

/config/config.php

Тут max_tree определен, допустим, как 7.
Этот конфиг загуржается с перезаписью (true) (перезаписываем пустой конфиг)

/config/config.local.php
При его загрузке стоит «НЕ ПЕРЕЗАПИСЫВАТЬ»

Тут max_tree определен как 10
… и значение успешно меняется на 10.

/templates/skin/synio/settings/config/config.php
При загрузке стоит опять «НЕ ПЕРЕЗАПИСЫВАТЬ»

Тут max_tree определен как 5
… значение в конфиге меняется на 5.
Что за бред вообще в логике ядра???

/engine/modules/viewer/Viewer.class.php
if (!$bLocal) {
            if (file_exists($sFile = Config::Get('path.smarty.template') . '/settings/config/config.php')) {
                Config::LoadFromFile($sFile, false);
            }
        }

Загружаем конфиг, говорим НЕ ПЕРЕЗАПИСЫВАТЬ имеющийся конфиг полученным.
Все верно? Верно.
Идем дальше по цепочке вызовов…

… и приходим к
engine/lib/internal/ConfigSimple/Config.class.php

public function SetConfig($aConfig = array(), $bRewrite = true)
    {
        if (is_array($aConfig)) {
            if ($bRewrite) {
                $this->aConfig = $aConfig;
            } else {
                $this->aConfig = $this->ArrayEmerge($this->aConfig, $aConfig);
            }
            return true;
        }
        $this->aConfig = array();
        return false;
    }


Идем в код ArrayEmerge (точнее в func_array_merge_assoc()

… и обнаружием удивительную вещь:

Массив arr1 перезаписывается ключами массива arr2, хотя это поведение НЕ ОЖИДАЕТСЯ.

Ясно же сказано — не перезаписывать конфиги? Ясно.

А данные херятся.

Где логика?
Нет. Смотрите метод Init. Там загрузка конфигов шаблона происходит
Что-то, единственно похожее на правду нашел тут:

/engine/modules/viewer/Viewer.class.php
/**
     * Получает локальную копию модуля
     *
     * @return ModuleViewer
     */
    public function GetLocalViewer()
    {
        $sClass = $this->Plugin_GetDelegate('module', __CLASS__);

        $oViewerLocal = new $sClass(Engine::getInstance());
        $oViewerLocal->Init(true);
        $oViewerLocal->VarAssign();
        $oViewerLocal->Assign('aLang', $this->Lang_GetLangMsg());
        return $oViewerLocal;
    }


Оно?
попробуем поковырять. но почему так странно сделано?
А я просто в начале каждого плагина написал вот так:

    const ConfigKey = 'expwall';
    const HooksArray = [
        'template_main_menu_item'       =>  'MenuMain',
        'template_profile_whois_end'    =>  'ProfileWhois'
    ];

    public function RegisterHook()
    {
        $plugin_config_key = $this::ConfigKey;
        foreach ($this::HooksArray as $hook => $callback) {
            $this->AddHook(
                $hook,
                $callback,
                __CLASS__,
                Config::Get("plugin.{$plugin_config_key}.hook_priority.{$hook}") ?? 1
            );
        }
    }


Да, это не решает проблему полностью, но я могу в локальном конфиге прописать:
$config['plugin']['page']['hook_priority']['template_main_menu_item'] = 2;
$config['plugin']['expwall']['hook_priority']['template_main_menu_item'] = -10;


Теперь плагин page отработает раньше, чем ExpWall

Правда если какой-то плагин решит повесить на один и тот же хук два обработчика — эта схема сломается, но я думаю, это нереальный случай.
Все равно глобально это не решает проблему: добавленные пункты будут в конце основного меню.
А если нужно «между», 2-м по сету, 3-м и т.п.?
Я просто добавил хуков и поправил плагины: template_main_menu_item_1, ...2 и т.д.