добавление подсветки синтаксиса к веб-страницам (HTML / php) - PullRequest
3 голосов
/ 24 августа 2010

Я использую http://softwaremaniacs.org/soft/highlight/en/, чтобы выделить синтаксис HTML.У меня есть PHP-цикл, извлекающий код из WordPress.Я использую теги pre / code в своем коде и следующий цикл, чтобы извлечь код из WordPress.

<?php while (have_posts()) : the_post(); ?>
<p><i><?php the_date(); echo "<br />"; ?> </p></i>
<h2><?php the_title(); ?></h2>    
<p><?php the_content(); ?></p>
<?php endwhile;?>

В верхней части моей php-страницы есть импорт ...

<script type="text/javascript" src="highlight.pack.js"></script>
<script type="text/javascript">
hljs.initHighlightingOnLoad();
</script>

test.html на странице работает нормально, но моя страница не работаетмой веб-сервер.Это как-то связано с тем, как я динамически вытягиваю контент?Как бы я сделал эту работу?

Ответы [ 5 ]

8 голосов
/ 27 августа 2010

Из исходного кода

function initHighlightingOnLoad() {
    var original_arguments = arguments;
    var handler = function(){initHighlighting.apply(null, original_arguments)};
    if (window.addEventListener) {
      window.addEventListener('DOMContentLoaded', handler, false);
      window.addEventListener('load', handler, false);
    } else if (window.attachEvent)
        window.attachEvent('onload', handler);
    else
        window.onload = handler;
}

Так что это будет работать только один раз, НО

Вы можете снова вызвать метод, обманувплагин

hljs.initHighlighting.called = false;
hljs.initHighlighting();

Я протестировал его на демонстрационной странице и, кажется, работает довольно хорошо.

Так что вам может понадобиться вызвать эти две строки после вставки новых элементов на странице.

3 голосов
/ 30 августа 2010

Возможный альтернативный подход: используйте GeSHi для подсветки синтаксиса в PHP.

Пример из их документации :

//
// Include the GeSHi library//
include_once 'geshi.php'; 
//// Define some source to highlight, a language to use
// and the path to the language files//
$source = '$foo = 45;
for ( $i = 1; $i < $foo; $i++ ){
  echo "$foo\n";  --$foo;
}';$language = 'php';
 //
// Create a GeSHi object//
 $geshi = new GeSHi($source, $language);
 //
// And echo the result!//
echo $geshi->parse_code();
0 голосов
/ 02 сентября 2010

Вы можете использовать FSHL (Fast Syntax Highlighter) , он написан на PHP, поддерживает общие языки, может быть хорошо настроен, стилизован и расширен. Попробуйте.

Динамически загружаемый контент должен быть уже выделен сервером, чем вам не нужно было бы использовать JavaScript.

Если вы настаиваете на использовании подсветки на стороне клиента, я предлагаю использовать SyntaxHighlighter от Alex Gorbatchev, он полнофункциональный, очень популярный и вам не понадобится дополнительный код PHP.

0 голосов
/ 30 августа 2010

проверьте, успешно ли загружается javascript с сервера.

также вам нужно взглянуть на встроенную функцию php для выделения:

http://php.net/manual/en/function.highlight-string.php

0 голосов
/ 24 августа 2010

Существует множество плагинов с подсветкой синтаксиса для Wordpress. Например: http://kpumuk.info/projects/wordpress-plugins/codecolorer/examples/

...