вобщем совал было на сайт модуль Texy! но послу настроки поиска - текси стало плохо и его пришлось усыпить. мотив для установки текса был прост как все генитальное - подсветка синтаксиса. хотя в итоге как оказалось сам текс пользуется для этих целей сторонней библиотекой fshl. после недолгих раздумий пришла идея прикрутить доблестный (действительно быстрый и качественный подсвечиватель) fshl ко всем любимому и понятному bbcode.
изменения внесены в 2 файла модуля bbcode (отрывки кода приведены с кусками окружения, чтоб легче найти):
сам bbcode.module
- в него добавлена функция bbcode_menu которая добавляет css со стилями подсвечиваемых слов. почему эта функция - не знаю, посмотрел в других модулях - они свои css так добавляют.
// $Id: bbcode.module,v 1.41 2006/07/08 10:44:04 naudefj Exp $ function bbcode_menu ($may_cache) { // add stylesheet for sintax heighlight theme_add_style(drupal_get_path('module', 'bbcode') . '/fshl/styles/COHEN_style.css'); return NULL; } function bbcode_help($section) {
второй измененный файл - bbcode-filter.inc
изменения следующие:
1. вкладываем подсвечиватель и его конфигурационный файл (так было сделано в Texy!)
// $Id: bbcode-filter.inc,v 1.49 2006/07/05 15:56:13 naudefj Exp $ require_once ('fshl/fshl.php'); require_once ('fshl/fshl-config.php'); function _bbcode_filter_process(&$body, $format = -1) {
2. правим строчку замены текста в теге php bbcode на вызов исправлнной функции и добавляем остальные (имеющиееся в fshl на данный момент синтаксисы)
'#\[/quote(?::\w+)?\]#si' => '</blockquote></div>', // syntax highlighted PHP, CPP, CSS, HTML, JAVA, JS, SQL '#\[php(?::\w+)?\](?:[\r\n])*(.*?)\[/php(?::\w+)?\]#sie' => '_bbcode_php_tag(\'PHP\',\'\\1\')', '#\[cpp(?::\w+)?\](?:[\r\n])*(.*?)\[/cpp(?::\w+)?\]#sie' => '_bbcode_php_tag(\'CPP\',\'\\1\')', '#\[css(?::\w+)?\](?:[\r\n])*(.*?)\[/css(?::\w+)?\]#sie' => '_bbcode_php_tag(\'CSS\',\'\\1\')', '#\[html(?::\w+)?\](?:[\r\n])*(.*?)\[/html(?::\w+)?\]#sie' => '_bbcode_php_tag(\'HTML\',\'\\1\')', '#\[java(?::\w+)?\](?:[\r\n])*(.*?)\[/java(?::\w+)?\]#sie' => '_bbcode_php_tag(\'JAVA\',\'\\1\')', '#\[js(?::\w+)?\](?:[\r\n])*(.*?)\[/js(?::\w+)?\]#sie' => '_bbcode_php_tag(\'JS\',\'\\1\')', '#\[javascript(?::\w+)?\](?:[\r\n])*(.*?)\[/javascript(?::\w+)?\]#sie' => '_bbcode_php_tag(\'JS\',\'\\1\')', '#\[sql(?::\w+)?\](?:[\r\n])*(.*?)\[/sql(?::\w+)?\]#sie' => '_bbcode_php_tag(\'SQL\',\'\\1\')', // Links to popular sites '#\[google(?::\w+)?\]([\w\s-]+?)\[/google(?::\w+)?\]#si' => '<a href="http://www.google.com/search?q=\\1">\\1</a>',
3. правим родную функцию bbcode для подсветки не только php но и всего остального (она самая последняя в файле)
function _bbcode_php_tag($type = 'CPP', $text = NULL) { $parser_options = P_TAB_INDENT; $parser = new fshlParser('HTML_UTF8', $parser_options); return '<pre>'. $parser->highlightString($type, str_replace('<br />', '', stripslashes($text))) .'</pre>'; }
ну и в итоге, чтобы увидеть результат, нужно выключить и снова включить филтр bbcode в вашем формате ввода (видимо они кешируются).
прикладываю готовый модуль bbcode+fshl+моя руссификация, проверенную на drupal 4.7.3
да. неплохо было бы и здесь такое прикрутить. а то запарился угловые скобки перерисовывать
Вложение | Размер |
---|---|
bbcode.tar_.gz | 65.57 КБ |
Комментарии
очень юзефульная весч!
правда я пока не юзаю
ну хоть кому-то понравилось. ещеб кому-то пригодилось - былоб ваще карачо.
думаю всем понравилось, но у всех сейчас цейт-нот!
cent not - нету бабок?
Дай ссылку на демо, если не трудно...
попробовать не сможете, но глянуть (только одним глазком) - пожалуйста [url]http://runetbsd.ru/blog/qnub/spravka_po_bbcode[/url]
цейт-нот - нету времени
gnub боюсь показаться занудой, но сейчас зашел на ваш сайт, посмотрел одну страницу, после чего у меня на вашем сайте больше ничего не открывается. пустые белые страницы.
у мя тоже на http://runetbsd.ru/blog/qnub/spravka_po_bbcode открылась пустая страничка.
боюсь с вами согласиться. есть такая проблема - не могу понять почему. у меня все нормально работает. но многие сообщают о таких вот косяках. или страница пустая или бред на странице
а сейчас открылось и всё нормально отобразилось!
мож перегрузки на сервере?
ну он хоть бы сообщение что-ли выдавал...
все исправил. заходите - любуйтесь.
2Рома:
дело было вот в чем: [url]http://www.drupal.ru/node/2705[/url]
Я решил сделать подробную инструкцию о том как организовывается подсветка кода и синтаксиса в Drupal