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() .'';
   }

 

Тэг в списке: