Вы не зашли.
Здравствуйте. С новым годом всех!
Решил посмотреть, как можно подключить TinyMCE 5 так, чтобы он ещё и работал. И меня сходу озадачило то, что CMS в новостях, оборачивает содержимое тегов <pre> в phphighlight('<code></code>'), и это так и отправляется в браузер. Версия движка последняя - 0.9.5.
В файле engine/includes/classes/parse.class.php, строка 479.
Для чего нужна эта строка?
Что вообще сделать с блоком
$content = preg_replace_callback(
"/<code>(.*?)<\/code>/s",
function ($match) {
return "phphighlight('" . $match[0] . "')";
},
$content
);
чтобы не создать угрозу безопасности? Я его пока закомментировал.
UPD. Точнее не оборачивает, а заменяет тег <code> внутри тега <pre>. Нужно разобраться, зачем он там вообще нужен. Но тем не менее, replace довольно загадочный.
Изменено ikv777vlg (2019-01-16 11:21:15)
Не в сети
Не понятно: зачем вы оборачиваете в <pre><code>, если есть bb [code].
Он автоматом добавит <pre>. А уже после этого js обработает ваш код, как видно на картинке такой используется.
Либо при создании/редактировании новости ставьте галочку Отключить автоформатирование
[code]$content = preg_replace_callback(
"/<code>(.*?)<\/code>/s",
function ($match) {
return phphighlight($match[1]);
},
$content
);[/code]
Изменено rusiq (2019-01-19 07:33:11)
Не в сети
Это нерабочий вариант. Потому-что мне нужно передать классы для визуализатора Prism.
Плюс, нужно включать поддержку bb-кодов в TinyMCE внутри Code sample plugin. Всё это не представляется возможным. Суть я понял, но в общем, ваш вариант - здесь не работает.
Задача заключается в том, чтобы блок с кодом 100% одинаково отображался и на сайте, и при редактировании новости в визуальном редакторе TinyMCE в админке.
CMS заменит bb-код, можно даже передачу класса в тег pre и code (для Prism нужен code внутри pre, либо с помощью плагинов для него, можно использовать <script type="text/plain"></script>, но это пока у меня не получилось сделать, да и смысла не вижу, как и не вижу смысла в том, чтобы использовать в тексте новости bb-код code, который преобразуется в <script ...>, который преобразуется призмом в <pre class="..."><code><code></pre>уже на JS) организовать, но как заставить Prism в админке, подсвечивать, например, такой код (пробел в bb-теге поставил, чтобы движок форума не ругался):
[code class="line-numbers language-css"]body {... color:#666; ...}[/code ]
И как заставить TinyMCE в админке, не оборачивать вышеприведённый пример кода в bb-коде, в параграф <p>?
И вот зачем это всё?
Короче, визуализатору в админке надо так, и на сайте должно быть так:
<pre class="line-numbers language-css"><code>body {
background-color: #fff;
margin: 0;
padding: 0;
height: auto !important;
min-height: 100%;
font: normal 11px/14px Tahoma, sans-serif;
color: #666;
}
</code></pre>
Не в сети
попробуйhttps://ngcmshak.ru/nastroika-plaginov- … vkami.html там плагин с визуальными редакторами, тебе нужен ckeditor, у меня с ним проблем не было
жизнь бьёт ключом......,ну иногда и гайкой.....
Хаки и Скрипты| Бесплатные шаблоны NGCMS
На Районе - Шахтинск Украшение Windows
Не в сети
rusiq, отключение автоформатирования, даёт лишь возможность призму, правильно пронумеровать строки на странице новости. Кстати спасибо за этот совет, а то скриптом маркировалась только первая строка, и это всё из-за <br />. Отключил автоформатирование в настройках вообще. Но ответ на вопрос из первого топика, я так и не получил
irbees2008, конечно, этот ckeditor довольно крут. Я попробовал, посмотрел. Но я не буду искать лёгких путей, и попробую уж закончить начатое. Да и в принципах тончайшей настройки ckeditor, мне так сходу не разобраться. Новый TinyMCE довольно неплох, по сравнению с его третьей версией, которая добавляла к каждому параграфу стили
style="margin: 0px; padding: 0px; color: #000000; font-family: Verdana; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 18.46666717529297px; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"
Особенно забавно, выглядит line-height: 18.46666717529297px;, я просто валяюсь. Новая версия из коробки, таких приколов не имеет.
Не по теме, но как я буду добавлять изображения без платного Image Manager - пока неизвестно. Если вы знаете где достать аналог - подскажите, я просто ещё не дошёл до этого момента, застряв на Code Sample Plugin
И кстати,
попробуйhttps://ngcmshak.ru/nastroika-plaginov- … vkami.html там плагин с визуальными редакторами, тебе нужен ckeditor, у меня с ним проблем не было
Нет подсветки кода - нет проблем?
Изменено ikv777vlg (2019-01-19 16:50:35)
Не в сети
rusiq, написано что? Что изящнее отключить автоформатирование, чем закомментировать описанный выше код? Согласен.
Но это всё похоже на троллинг, от чего у меня должно уже было знатно подгореть. Но этого не случится, так как я из этого уже вырос.
И на всякий случай, таки повторю заголовок этой темы: "Что это: return "phphighlight('" . $match[0] . "')"; ?"
Кстати. А почему в том топике, в котором всё написано, вдруг $match[1] ?
Изменено ikv777vlg (2019-01-19 16:57:11)
Не в сети
есть, подключить плагин подсветки кода и все, хотя вот этот подключен sуntaxhighlighter, ну и сопутствующие скрипты и стили
https://ngcmshak.ru/interfeis-effekty-s … atyah.html
жизнь бьёт ключом......,ну иногда и гайкой.....
Хаки и Скрипты| Бесплатные шаблоны NGCMS
На Районе - Шахтинск Украшение Windows
Не в сети
1 return "phphighlight('" . $match[0] . "')"; - возвращает строку с найденной подстрокой, кавычки тут лишние, т.к. нам нужен возврат функции...
2а $match[0]
<code>body {
background-color: #fff;
margin: 0;
padding: 0;
height: auto !important;
min-height: 100%;
font: normal 11px/14px Tahoma, sans-serif;
color: #666;
}</code>
2б $match[1]
body {
background-color: #fff;
margin: 0;
padding: 0;
height: auto !important;
min-height: 100%;
font: normal 11px/14px Tahoma, sans-serif;
color: #666;
}
Отключаете автоформатирование, используете плагин для TinyMCE и ничего не случится с безопасностью. Т.к. плагин переводит содержимое pre code в html сущности.
Изменено rusiq (2019-01-19 17:53:34)
Не в сети
Кавычки нам пригодились, если бы мы не использовали анонимную функцию, то нужны были бы:
$content = preg_replace_callback(
"/<code>(.*?)<\/code>/s",
'phphighlight',
$content
);
Но тогда функция phphighlight в файле engine\includes\inc\functions.inc.php выглядела бы не так
function phphighlight($content = '') {
$f = array('<br>', '<br />', '<p>', '<', '>', '&', '|', '"', '$', '\', ''', ' ', '\"');
$r = array("\n", "\n", "\n", '<', '>', '&', '\|', '"', '$', '', '\'', '', '"');
$content = str_replace($f, $r, $content);
$content = highlight_string($content, true);
return $content;
}
Атак
function phphighlight(array $match) {
$f = array('<br>', '<br />', '<p>', '<', '>', '&', '|', '"', '$', '\', ''', ' ', '\"');
$r = array("\n", "\n", "\n", '<', '>', '&', '\|', '"', '$', '', '\'', '', '"');
$content = str_replace($f, $r, $match[1]);
$content = highlight_string($content, true);
return $content;
}
А $match[1] используем, потому что функция highlight_string, выполняя `подсветку кода` оборачивает его в тег code. Но ведь нам не нужно вложеный тег code в уже существующем.
Не в сети