Drupal 7 Syntax Highlighter и GeshFilter
7 сентября 2018, я наконец-таки сделал это. Установил Syntax Highlighter на своём блоге, так как данная потребность назрела уже давно. Тэгов code и php стало категорически не хватать. Во-первых, в данных тэгах нет нормального форматирования текста, отсутствует табуляция, по крайней мере в дефолтных настройках. Во-вторых, нет нормальной подсветки. Ура! Теперь на сайте появится нормальный вид кода.
Подключал изначально модули и виджеты по указанному выше видео. Ссылку на саму библиотеку Syntax Highlighter по вот этой ссылке syntaxhighlighter. На момент написания данного поста выложена версия v3.0.90, но я использовал версию v3.0.83, так как v3.0.90 в настройках самого модуля Drupal не подключилась.
Изначально подсветка кода не подключилась. В консоли браузера показываются следующие ошибки:
Uncaught ReferenceError: XRegExp is not defined at shCore.js:107 at shCore.js:1699
Uncaught TypeError: Cannot read property 'Highlighter' of undefined at shBrushCss.js:68 at shBrushCss.js:75
Решается это следующим образом. В файле sites/all/modules/syntaxhighlighter/syntaxhighlighter.module в функции syntaxhighlighter_init() перед кодом
drupal_add_js($scripts_path . 'shCore.js', $js_options); if (variable_get('syntaxhighlighter_legacy_mode', 0)) { drupal_add_js($scripts_path . 'shLegacy.js', $js_options); }
Нужно добавить код:
if (file_exists($scripts_path .'XRegExp.js')) { drupal_add_js($scripts_path .'XRegExp.js', $js_options); }
После этого Syntax Hightlighter заработал. После этого я взялся за GeshFilter. Первое же включение модуля привело к следующим проблемам. Я не мог перейти на главную страницу сайта со списком статей, а также зайти на страницу /admin/content. Проанализировал логи Apache и в файле error.log нашёл следующие сообщения:
Sep 7 10:50:42 babs apache_error: modern-develop.ru [Fri Sep 07 10:50:42 2018] [error] [pid 29189] sapi_apache2.c(325): [client 95.68.243.163:57764] PHP Fatal error: Cannot access protected property GeSHi::$language in /home/c/co67645/modern-develop.ru/public_html/sites/all/modules/geshifilter/geshifilter.pages.inc on line 362
Патч, который мне помог расположен по этой ссылке: патч. Приведу код прямо тут на всякий:
diff --git a/geshifilter.pages.inc b/geshifilter.pages.inc
index 5bbecb1..cbff2bf 100644
--- a/geshifilter.pages.inc
+++ b/geshifilter.pages.inc
@@ -373,8 +373,11 @@ function geshifilter_geshi_process($source_code, $lang, $line_numbering=0, $line
// To counter a change between GeSHi version 1.0.7.22 and 1.0.8 (svn
// commit 1610), we use both the language and overall_class for the class,
// to mimic the 1.0.8 behavior, which is backward compatible.
- $code_class = "{$geshi->language} {$geshi->overall_class}";
- $source_code = ''. $geshi->parse_code() .'
';
}