このブログソースコードが以下の点で凄く見難かった。
1.phpのnl2br関数を使っているので、preタグの中でも改行されてしまう。
2.全て同じ色
で、素直にはてな日記とかで書こうかなと思ったんだけど、そういうのを解決していくのが勉強かなと思い留まり、頑張って実装してみた。
まずは、1つめの改行問題について。
smartyで独自の修飾子で解決できないかなと考え、いろんなところからソース探してきてこんなものが出来た。
参考サイト:No Such Blog or Diary - Nucleus の改行をちょっと頭よくする
これで一応preタグ間はbrタグ入らないようになった。
続いて2の問題については、いろいろ探したらjavascriptで色つけれる奴があるみたいだった。
一番簡単そうなのが、Javascript code prettifierって奴だったので、以下のサイトを参考に実装。
参考サイト:コードをプリティに整形するjavascript「code prettifier」 : skuare.net
で、DBに格納しているデータそのものにprettifierってclass名をつけるのがなんだか嫌だったので、これまたsmartyの修飾子を作成。
んで、smartyのテンプレートで2つとも呼んでやればOKってことにした。
キレイキレイ。
1.phpのnl2br関数を使っているので、preタグの中でも改行されてしまう。
2.全て同じ色
で、素直にはてな日記とかで書こうかなと思ったんだけど、そういうのを解決していくのが勉強かなと思い留まり、頑張って実装してみた。
まずは、1つめの改行問題について。
smartyで独自の修飾子で解決できないかなと考え、いろんなところからソース探してきてこんなものが出来た。
参考サイト:No Such Blog or Diary - Nucleus の改行をちょっと頭よくする
function smarty_modifier_mynl2br($value)
{
$i=0;
$v2="";
$n=mb_strlen($value);
while($i<$n){
$p=mb_strpos($value,"<pre",$i);
if($p==FALSE){
$v2.=nl2br(mb_substr($value, $i));
break;
}
$v2.=nl2br(mb_substr($value, $i,$p-$i));
$i=$p;
$p=mb_strpos($value,"</pre>",$i);
// 1つも無い場合
if($p==FALSE){
$v2.=mb_substr($value, $i);
break;
}
$v2.=mb_substr($value, $i,$p-$i);
$i=$p;
}
return $v2;
}これで一応preタグ間はbrタグ入らないようになった。
続いて2の問題については、いろいろ探したらjavascriptで色つけれる奴があるみたいだった。
一番簡単そうなのが、Javascript code prettifierって奴だったので、以下のサイトを参考に実装。
参考サイト:コードをプリティに整形するjavascript「code prettifier」 : skuare.net
で、DBに格納しているデータそのものにprettifierってclass名をつけるのがなんだか嫌だったので、これまたsmartyの修飾子を作成。
function smarty_modifier_prettyprint($value)
{
$result = str_replace('<pre', '<pre class="prettyprint"', $value);
return $result;
}んで、smartyのテンプレートで2つとも呼んでやればOKってことにした。
キレイキレイ。