Подсветка синтаксиса
Рубрика: Что нового?
19 Апр. 2010Подсветка php кода на страницах блога — штука невероятно удобная. Давайте в двух словах разберемся как я подкрутил её у себя...
---Все инструменты для подсветки синтаксиса делятся на две категории (насколько мне известно): js скрипты делающие подсветку на стороне клиента и серверные скрипты которые делают всё это на стороне сервера.
Описывать подробно плюсы и минусы думаю нет смысла, т.к. они вполне очевидны:
- js-библиотеки изменяют блок с кодом на лету в браузере пользователя. Если javascript у него будет отключен - всей красоты он не увидит. Конечно выполнение скрипта требует небольшого времени и для больших страниц с кодом пользователю потребуется подождать пока скрипт выполнит свою работу (примерно 0.5-2сек)
- серверные скрипты подсветки синтаксиса делают разукравшивание всего один раз, при добавлении/изменении страницы. css/html требуемый для красивого отображения кода попадает сразу в базу. Данный вариант удобен конечным пользователям т.к. не требует от них поддержки js и выполнения кода подсветки у себя в браузере от страницы к странице.
Для подсветки на своем блоге я выбрал маленький скрипт highlight.js который на стороне клиента занимается всеми «разукрашиваниями». Мне просто удобнее что бы код в базе не меняли всякие скрипты, вдруг я через день передумаю и решу использовать что то другое.
Порядок работы:
1. Заходим на сайт и скачиваем highlight.js
2. Распаковываем папку highlight в корень, рядом с папкрй protected
3. Подключаем скрипт в лаяуте строчкой:
либо зададим свойство scriptMap компонента clientScript. Это можно сделать как в настройках приложения, так и в коде. К примеру:<script src="/highlight/highlight.pack.js"></script>$cs=Yii::app()->clientScript;
$cs->scriptMap=array(
'highlight'=>'/highlight/highlight.js',
…
);
4. На странице где хотим использовать подсветку синтаксиса (либо сразу в лаяуте) делаем инициализацию библиотеки: <script type="text/javascript">
hljs.initHighlightingOnLoad();
</script>
5. Блоки кода на сайте в которых хотим использовать подсветку синтаксиса оформляем по типу: <pre><code>...</code></pre>
Пользуемся!
Если хотите опубликовать этот материал у себя - пожалуйста, разместите ссылку на страницу откуда вы его взяли.
- Разработчики в очередной раз не перестают нас радовать новой версией замечательного фреймворка. Я был очень рад когда после выходных, выйдя ... "Версия 1.0.7"
- Сегодня разговор снова пойдет про деревья :) Наткнулась мне заметка «Display an AJAX tree from your DB using CtreeView» которую ... "Открытие узлов дерева через AJAX"
- Во всех приложениях большую часть внимания мы с вами (программисты) должны уделять именно безопасности. Мы с вами живем в ... "Перевод : Безопасность"

[guest] Werewolf
Было сказано: Вторник, 20 Апрель 2010
<script src="/view/highlight/highlight.pack.js"></script>
Protected должна быть закрыта от глаз, тем более класть ее прямо в корень документрута кощунственно.
Мне кажется проще использовать registerScriptFile.

[adm] zolter
Было сказано: Вторник, 20 Апрель 2010
Я изначально использую вариант с scriptMap, по поводу protected исправил, действительно неверно указал :)

[guest] yareg
Было сказано: Четверг, 29 Апрель 2010
Хотел написать на мыло, но как-то не нашел контактного мейла...
http://ipicture.ru/upload/100429/Fxy7fc64xg.jpg

[guest] zolter
Было сказано: Четверг, 29 Апрель 2010
Оо спасибо,
на будущее моя почта zolter.od@gmail.com

[guest] zolter
Было сказано: Четверг, 06 Май 2010
Подсветка синтаксиса кстати походу есть встроенная в yii, надо будет об этом написать :)

[guest] Гость
Было сказано: Среда, 25 Август 2010
Столкнулся с проблемой, что TinyMCE-редактор перекодирует символы и логично, что подсветка не работает. Как обойти это? Например как то выделить, что это мол исходный код - его не трогай)

[adm] zolter
Было сказано: Четверг, 26 Август 2010
Я TinyMCE юзаю, с этим проблем нету :/
Правда блоки с кодом вбиваю через режим HTML в нем, а не через сам виз.редактор

[guest] Гость
Было сказано: Четверг, 26 Август 2010
Да, спасибо, через хтмл режим работает!) полез спрашивать не изучив тулбар редактора(<


