Sazanof.ru Блог Подсветка кода во фронтенде MODx EVO

Подсветка кода во фронтенде MODx EVO

Хочу поздравить каждого из вас с наступающими новогодними праздниками! В честь этого делюсь с вами своим очередным велосипедом на квадратных колесах =)

Я бегло пошуршал по интернету и не наткнулся на решение подсветки кода на сайте как в Revo.

Поэтому и написал на скорую руку плагин:

<?php
/*
 * Name:SyntaxHighlighter Plugin for Site Frontend
 * CMS / CMF MODx Evolution
 * Author: Saz (sazanof.ru)
 * Version: v1.0
 * Default	shThemeDefault.css
 * Django	shThemeDjango.css
 * Eclipse	shThemeEclipse.css
 * Emacs	shThemeEmacs.css
 * Fade To Grey	shThemeFadeToGrey.css
 * Midnight	shThemeMidnight.css
 * RDark	shThemeRDark.css
 * NOTY: use great with TiniMCE custom "styles fix by bubenok" (see http://modx.im/blog/questions/4624.html)
 * @PROPERITIES
 * {
      "theme": [
        {
          "label": "Тема",
          "type": "list",
          "value": "Default",
          "options": "Default,Django,Eclipse,Emacs,Fade To Grey,Midnight,RDark",
          "default": "Default",
          "desc": ""
        }
      ]
    }
 *
 * @EVENTS
 * OnWebPageInit
 *
 */
if (!defined('MODX_BASE_PATH')) {
    die('What are you doing? Get out of here!');
}
global $modx;
$e = &$modx->Event;
$output =  '';
define("SH_DIR", MODX_SITE_URL . 'assets/plugins/modxsh/syntaxhighlighter/');
switch ($e->name) {
    case 'OnLoadWebDocument':
        $f = array('<code>','</code>','brush: php','brush: html');
        $r = array('','','brush: php','brush: html');
        $modx->documentContent = str_replace($f,$r,$modx->documentContent);
        //die;
        $theme = isset($theme) ? $theme : 'Default';
        $cssTheme = 'shTheme' . $theme . '.css';
        $cssTheme = str_replace(' ', '', $cssTheme);
        $all = '<script type="text/javascript">
             SyntaxHighlighter.autoloader(
                ["js","jscript","javascript","' . SH_DIR . 'scripts/shBrushJScript.js"],
                ["bash","shell","' . SH_DIR . 'scripts/shBrushBash.js"],
                ["css","' . SH_DIR . 'scripts/shBrushCss.js"],
                ["xml","html","' . SH_DIR . 'scripts/shBrushXml.js"],
                ["sql","' . SH_DIR . 'scripts/shBrushSql.js"],
                ["php","' . SH_DIR . 'scripts/shBrushPhp.js"],
                ["plain","' . SH_DIR . 'scripts/shBrushPlain.js"]
             );
             SyntaxHighlighter.config.stripBrs = true;
             SyntaxHighlighter.all()
        </script>';
        $output .= $modx->regClientCSS(SH_DIR . 'styles/shCore.css');
        $output .= $modx->regClientCSS(SH_DIR . 'fix.css');
        $output .= $modx->regClientCSS(SH_DIR . 'styles/' . $cssTheme);
        $output .= $modx->regClientScript(SH_DIR . 'scripts/shCore.js');
        $output .= $modx->regClientScript(SH_DIR . 'scripts/shAutoloader.js');
        $output .= $modx->regClientScript($all);
        break;
}

Архив с гитхаба скачаешь ты тут

 

А теперь про косяки:

Как у нас принято говорить: все работает, но ©

  1. Иногда после вставки через TinyMCE код выстраивается в одну линию, поэтому вставляю его через исходный код, можно еще через плагин TinyMCE codesample (но окно настолько его большое, что не видно =( кнопки вставить код)
  2. Чтобы использовать смену классов налету пришлось… (читаем README.md), отдельное спасибо bubenok modx.im/blog/questions/4624.html

Комментарии: 0


ОтменитьДобавить комментарий