Подсветка синтаксиса в phpFOX 3 (BBcode: code|html|php)

Форум поддержки движка социальной сети phpFOX.
Аватара пользователя
Slash
Администратор
Сообщения: 2029
Поблагодарили: 62 раза

Подсветка синтаксиса в phpFOX 3 (BBcode: code|html|php)

Сообщение Slash » Сб мар 26, 2016 4:24 pm

В phpFOX 3 есть вшитая подсветка синтаксиса, но только для HTML тегов и то её надо допилить... Я её "выкинул напрочь" и вставил highlight.js. Делал так:
Открыть: theme/frontend/nebula/template/template.html.php, найти:

Код: Выделить всё

    </body>
</
html>
{/if}

Выше добавить:

Код: Выделить всё

        <script type="text/javascript">
            hljs.initHighlightingOnLoad();
        </script>

Открыть: include/library/phpfox/phpfox/phpfox.class.php, найти:

Код: Выделить всё

            if (Phpfox::isModule('friend'))
            {
                $oTpl->setPhrase(array('friend.show_more_results_for_search_term'));        
            
}

Выше добавить:

Код: Выделить всё

            if (Phpfox::isModule('forum') || Phpfox::isModule('blog'))
            {
                $oTpl->setHeader('cache', array(
                        'code.css'          => 'style_css',
                        'highlight.pack.js' => 'static_script'                
                    
)
                );
            }

Открыть: include/library/phpfox/parse/bbcode.class.php, найти:

Код: Выделить всё

        $sTxt = '<div class="quote">' . ($bNoTitle ? '' : '<div class="quote_title">' . trim($sTitle) . ':</div>') . '<div class="quote_body" style="overflow:auto;' . ($this->_aBlockHeight[$sTxt] >= 540 ? ' height:' . $this->_aBlockHeight[$sTxt] . 'px;' : '') . '">' . $sPrefix . $sNewTxt . $sSuffix . '</div></div>';

Заменить на:

Код: Выделить всё

        $sTxt = '<div class="quote"><div class="quote_title">' . trim($sTitle) . ':</div><div class="quote_body" style="overflow: auto; max-height: 180px;"><pre><code>' . $sNewTxt . '</code></pre></div></div>';

Найти и удалить или закомментировать:

Код: Выделить всё

        $sPrefix = '';    
        $sSuffix 
= '';
        if ($sType != 'php')
        {
            $sPrefix = '<pre>';    
            $sSuffix 
= '</pre>';
        }

Удалить или закомментировать:

Код: Выделить всё

                    $sNewTxt = preg_replace('#&lt;((?>[^&"\']+?|&quot;.*&quot;|&(?!gt;)|"[^"]*"|\'[^\']*\')+)&gt;#esiU', "\$this->_htmlTags('\\1')", $sNewTxt);

В этом же файле удалить или закомментировать две функции: _htmlTags и _getHtmlColors.
Функция _htmlTags:

Код: Выделить всё

    /**
    * Handles an individual HTML tag in a [html] tag.
    *
    * @param    string    The body of the tag.
    * @return    string    Syntax highlighted, displayable HTML tag.
    */
    private function _htmlTags($sTag)
    {
        static $aHtmlColors = array();

        if (!$aHtmlColors)
        {
            $aHtmlColors = $this->_getHtmlColors();
        }

        // change any embedded URLs so they don't cause any problems
        $sTag = preg_replace('#\[(email|url)=&quot;(.*)&quot;\]#siU', '[$1="$2"]', $sTag);

        // find if the tag has attributes
        $iSpacepos = strpos($sTag, ' ');
        if ($iSpacepos != false)
        {
            // tag has attributes - get the tag name and parse the attributes
            $sTagname = substr($sTag, 0, $iSpacepos);
            $sTag = preg_replace('# (\w+)=&quot;(.*)&quot;#siU', ' \1=<span style="color:' . $aHtmlColors['attribs'] . '">&quot;\2&quot;</span>', $sTag);
        }
        else 
        
{
            // no attributes found
            $sTagname = $sTag;
        }
        // remove leading slash if there is one
        if ($sTag{0} == '/')
        {
            $sTagname = substr($sTagname, 1);
        }
        // convert tag name to lower case
        $sTagname = strtolower($sTagname);

        // get highlight colour based on tag type
        switch($sTagname)
        {
            // table tags
            case 'table':
            case 'tr':
            case 'td':
            case 'th':
            case 'tbody':
            case 'thead':
                $sTagcolor = $aHtmlColors['table'];
                break;
            // form tags
            //NOTE: Supposed to be a semi colon here ?
            case 'form';
            case 'input':
            case 'select':
            case 'option':
            case 'textarea':
            case 'label':
            case 'fieldset':
            case 'legend':
                $sTagcolor = $aHtmlColors['form'];
                break;
            // script tags
            case 'script':
                $sTagcolor = $aHtmlColors['script'];
                break;
            // style tags
            case 'style':
                $sTagcolor = $aHtmlColors['style'];
                break;
            // anchor tags
            case 'a':
                $sTagcolor = $aHtmlColors['a'];
                break;
            // img tags
            case 'img':
                $sTagcolor = $aHtmlColors['img'];
                break;
            // all other tags
            default:
                $sTagcolor = $aHtmlColors['default'];
                break;
        }

        $sTag = '<span style="color:' . $sTagcolor . '">&lt;' . str_replace('\\"', '"', $sTag) . '&gt;</span>';
        
        return $sTag
;
    }

Функция _getHtmlColors:

Код: Выделить всё

    /**
    * Color code.
    *
    * @return    array    array of type (key) to color (value)
    */
    private function _getHtmlColors()
    {
        return array(
            'attribs'    => '#0000FF',
            'table'        => '#008080',
            'form'        => '#FF8000',
            'script'    => '#800000',
            'style'        => '#800080',
            'a'            => '#008000',
            'img'        => '#800080',
            'if'        => '#FF0000',
            'default'    => '#000080'
        );
    }

Залить файл highlight.pack.js в папку: static/jscript/.
Файл code.css (стиль подсветки) в папку: theme/frontend/default/style/default/css/.
Почистить кэш.
Готово.
Реклама

Вернуться в «phpFOX»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость