DataLife Engine > FAQ > Подсветка кода в DLE

Подсветка кода в DLE


28-02-2011, 14:40. Разместил: n0wheremany
Подсветка кода в DLE Многие задают вопросы - как подсветить код на странице. Раньше я использовал Geshi - подсветку средствами PHP, но это увеличивало нагрузку на сервер, и размер БД. Сегодня я расскажу о том, как сделать подсветку кода в тэгах code на сайте DLE через Java через SyntaxHighlighter.

Чтобы из
print('Я ГеНиЙ');


получилось
print('Я ГеНиЙ');


Итак начинаем:
На момент написания статьи вышла SyntaxHighlighter версии 3.0.83. Её и будем использовать.

  • Нам понадобится исходные файлы ява скрипта:

    SyntaxHighlighter + Инструкция 32,26 Kb (cкачиваний: 237)

    parse.class.php для 9.3 10,95 Kb (cкачиваний: 120)

  • Начинаем установку.
    Для начала зальём все это дело в engine\classes\sh\

    Данная инструкция только для информации, т.к. парсер вырезает код некоторый, текст был искажен, следовательно работать он не будет.
    Правильный код представлен в архиве


    Теперь правим файлы
    • engine\classes\sparse.class.php

      Ищем:
              if( $this->allow_code )
                  $source = preg_replace( "#\[code\](.+?)\[/code\]#ies", "\$this->code_tag( '\\1' )", $source );

      меняем на
              if( $this->allow_code ) {
                  $source = preg_replace( "#\[code\](.+?)\[/code\]#ies", "\$this->code_tag( '\\1' )", $source );
                  $source = preg_replace( "#\[code=(.+?)\](.+?)\[/code\]#ies", "\$this->code_tag( '\\2' , '\\1' )", $source );
              }


      Ищем
              $source = preg_replace( "#\[code\](.+?)\[/code\]#is", "<!--code1--><div class=\"scriptcode\"><!--ecode1-->\\1<!--code2--></div><!--ecode2-->", $source );


      Ниже вставляем
              $source = preg_replace( "#\[code=(.+?)\](.+?)\[/code\]#is", '<pre class="brush:\\1">\\2</pre>', $source );


      Ищем
              $txt = preg_replace( "#<!--code2-->(.+?)<!--ecode2-->#", '[/codе]', $txt );


      Ниже вставляем
              $txt = preg_replace( "#<pre class=\"brush:(.+?)\">(.+?)</pre>#", '[code=\\1]\\2[/codе]', $txt );


      Ищем
              if( $wysiwig != "yes" ) $txt = preg_replace( "#\[code\](.+?)\[/code\]#ies", "\$this->decode_code('\\1', '{$use_html}')", $txt );


      Меняем на
              if( $wysiwig != "yes" ) {
                  $txt = preg_replace( "#\[code\](.+?)\[/code\]#ies", "\$this->decode_code('\\1', '{$use_html}')", $txt );
                  $txt = preg_replace( "#\[code=(.+?)\](.+?)\[/code\]#ies", "\$this->decode_code('\\2', '{$use_html}', '\\1')", $txt );
              }


      Ищем
          function code_tag($txt = "") {


      Меняем на
          function code_tag($txt = "", $type = "") {


      Ищем
              $p = "[code]{2}


      Меняем на
              if ($type=="") {
                  $p = "[code]{3}


      Ищем:
          function decode_code($txt = "", $use_html) { 


      Меняем на
          function decode_code($txt = "", $use_html, $type = "") { 


      Ищем:
              return "[code]{4}


      Меняем на:
              if ($type=="")
                  return "[code]{5}


    • templates\ВАШ ШАБЛОН\main.tpl

      В блок HEAD
      Вставляем
      <link type="text/css" rel="stylesheet" href="/engine/classes/sh/SyntaxHighlighter.css"/>
      <script type="text/javascript" src="/engine/classes/sh/shCore.js"></script>
      <script type="text/javascript" src="/engine/classes/sh/shAutoloader.js"></script>


      Ищем
      </body>
      </html>


      выше вставляем

      <script language='javascript'>
      function path() {
          var args = arguments,
              result = [];
          for(var i = 0; i < args.length; i++)
              result.push(args[i].replace('@', '/engine/classes/sh/'));
          return result
      };

      SyntaxHighlighter.autoloader.apply(null, path(
          'applescript            @shBrushAppleScript.js',
          'actionscript3 as3        @shBrushAS3.js',
          'bash shell                @shBrushBash.js',
          'coldfusion cf            @shBrushColdFusion.js',
          'cpp c                    @shBrushCpp.js',
          'c# c-sharp csharp        @shBrushCSharp.js',
          'css                    @shBrushCss.js',
          'delphi pascal            @shBrushDelphi.js',
          'diff patch pas            @shBrushDiff.js',
          'erl erlang                @shBrushErlang.js',
          'groovy                    @shBrushGroovy.js',
          'java                    @shBrushJava.js',
          'jfx javafx                @shBrushJavaFX.js',
          'js jscript javascript    @shBrushJScript.js',
          'perl pl                @shBrushPerl.js',
          'php                    @shBrushPhp.js',
          'text plain                @shBrushPlain.js',
          'py python                @shBrushPython.js',
          'powershell ps posh        @shBrushPowerShell.js',
          'ruby rails ror rb        @shBrushRuby.js',
          'sass scss                @shBrushSass.js',
          'scala                    @shBrushScala.js',
          'sql                    @shBrushSql.js',
          'vb vbnet                @shBrushVb.js',
          'xml xhtml xslt html    @shBrushXml.js'
      ));
      SyntaxHighlighter.config.bloggerMode = true;
      SyntaxHighlighter.config.stripBrs = false;
      SyntaxHighlighter.config.toolbar = false;
      SyntaxHighlighter.all();
      </script>




  • теперь нам можно использовать
    как [codе] тут код [/codе],
    так и [codе=php] тут код [/codе]


Все протестировано на DLE 9.2

Вернуться назад