Подсветка кода в TV
Подскажите пожалуйста возможно ли вывести редактор кода Ace в TV параметре?
Комментарии: 14
По идее, нужно указать тип ТВ «Область редактора», но Ace это, похоже, просто игнорирует.
Ну да, в TV есть «Текстовая область» и «Текстовый редактор», текстовая область выводит простой textarea а текстовый редактор выводит установленный у меня CKEditor. Может можно как то сделать свой тип TV с выводом Ace, просто гугл мне не помог в данном вопросе, может кто уже делал такое.
если сделать в системных настройках use_editor нет, то будет ace, правда везде, а не только в этом поле
Уже неплохо, теперь надо подумать как бы это выводить для определенного поля (TV параметра). Получается там где тип «текстовые редактор» выводится Ace. Видимо надо копнуть сам Ace )
Этот PR добавляет свой тип TV github.com/danyaPostfactum/modx-ace/pull/9
Но насколько совместим с текущей версией Ace не знаю
Но насколько совместим с текущей версией Ace не знаю
Не совсем понятно, данный пакет поверх имеющегося Ace не поставить, а если поставить чисто один этот пакет, то редактор вовсе отсутствует.
Не совсем понял что и куда вы ставите.
Из PR можно посмотреть какие файлы меняются и перенести изменения в текущую версию Ace.
Там всего добавляются 2 новых файла и пара строк в плагин Ace.
Из PR можно посмотреть какие файлы меняются и перенести изменения в текущую версию Ace.
Там всего добавляются 2 новых файла и пара строк в плагин Ace.
Ага, понял, сейчас еще разок попробую, я просто думал накатить ваш пакет поверх )
1. Заменил код в файле plugin.ace.php только в последней версии Ace он называется уже ace.plugin.php
2. Добавил файлы
core/components/ace/elements/tv/input/codetext.class.php
core/components/ace/elements/tv/input/tpl/codetext.tpl
Все что изменилось так это только то что Ace перестал подсвечивать вызов сниппетов.
Либо чего то я опять не понял, либо как говорилось выше версия не совместима.
2. Добавил файлы
core/components/ace/elements/tv/input/codetext.class.php
core/components/ace/elements/tv/input/tpl/codetext.tpl
Все что изменилось так это только то что Ace перестал подсвечивать вызов сниппетов.
Либо чего то я опять не понял, либо как говорилось выше версия не совместима.
Знаю, что прошло три года, но может кому пригодится. Это кусок моего плагина. (там ещё RTE подключается для определенные категорий ресуров)
создаем плагин, событие на «OnDocFormRender» с кодом:
Короткий вариант для всех блоков «Текстовая область»:
создаем плагин, событие на «OnDocFormRender» с кодом:
$script = '';
$resource = ($resource instanceof modResource)
?
$modx->getObject('modResource',$resource->get('id'))
: $modx->getObject('modResource',(int)$resource);
// ACE
// Настройка под определенный тв-параметр в шаблоне
$templates_enable = array( // [id-шаблона] => array('tv[id-тв]')
'3' => array('tv14'),
'4' => array('tv14')
);
if ( $resource instanceof modResource && array_key_exists($resource->get('template'), $templates_enable) ) {
$script .= 'if (MODx.ux.Ace.replaceTextAreas) {';
foreach ($templates_enable[$resource->get('template')] as $tv) {
$script .= 'MODx.ux.Ace.replaceTextAreas(Ext.query("textarea#' . $tv . '"));';
}
$script .= '}';
}
$modx->regClientStartupHTMLBlock('<script>Ext.onReady(function(){' . $script . '})</script>');
id шаблонов и тв-параметров находятся в скобках в дереве элементов.Короткий вариант для всех блоков «Текстовая область»:
$resource = ($resource instanceof modResource)
?
$modx->getObject('modResource',$resource->get('id'))
: $modx->getObject('modResource',(int)$resource);
if ( $resource instanceof modResource ) {
$modx->regClientStartupHTMLBlock('
<script>Ext.onReady(function(){
if (MODx.ux.Ace.replaceTextAreas) {
MODx.ux.Ace.replaceTextAreas(Ext.query(".x-form-textarea"));
}
');
}
Очень круто! На днях потестирую. СПАСИБО!
Не за что. Короткий вариант (не закончил js-код).
$resource = ($resource instanceof modResource)
?
$modx->getObject('modResource',$resource->get('id'))
: $modx->getObject('modResource',(int)$resource);
if ( $resource instanceof modResource ) {
$modx->regClientStartupHTMLBlock('
<script>
Ext.onReady(function(){
if (MODx.ux.Ace.replaceTextAreas) {
MODx.ux.Ace.replaceTextAreas(Ext.query(".x-form-textarea"));
}
})
</script>
');
}
Алексей, искренне благодарю, очень помог ваш вариант!
Супер. А подскажи пожалуйста как заставить его подсвечивать fenom? (с определенными tv)
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.