記事内に JavaScript を書いても、コメント宣言が有効にならない&改行が <br /> に変換されスクリプト中に紛れ込み上手く動作しません。
そこで BlognPlus を改造して記事内に JavaScript を書けるようにします。
まず[管理画面>初期設定>有効にするHTMLタグ]で「script」と「noscript」を登録して、記事内でこれらのタグを使えるようにします。
コメント宣言(<!-- -->)は上記の設定画面で登録しても上手く動作しないので、スクリプト自体を改造する必要があります。
common.php 180行目あたりに赤い文字列部分を追加
/* ----- 有効HTMLタグ変換 ----- */
function blogn_permit_html_tag_restore($str) {
$str = ereg_replace("&", "&", $str);
$str = ereg_replace("<", "<", $str);
$str = ereg_replace(">", ">", $str);
$permit_tag = explode(",", BLOGN_PERMIT_HTML_TAG);
while (list($key, $val) = each($permit_tag)) {
$str = preg_replace("/<($val)>/i", "<$val>", $str);
$str = preg_replace("/<\/($val)>/i", "</$val>", $str);
$str = preg_replace("/<($val)([ ]+[\w\W]+?)>/i", "<$val\\2>", $str);
}
$str = preg_replace("/<(br)>/i", "<br>", $str);
$str = preg_replace("/<(br)([ ]+[\w\W]+?)>/i", "<br\\2>", $str);
$str = ereg_replace("&", "&", $str);
$str = ereg_replace("<!--", "<!--", $str);
$str = ereg_replace("-->", "-->", $str);
return $str;
}
BlognPlus の仕様では記事内で改行すると自動的に <br> が挿入されてしまいますが、JavaScript を記述する際にはこの自動改行処理が邪魔です。
そこで行末に「#」を書くとその行には <br> を挿入しないように改造します。
common.php 150行目あたりに赤い文字列部分を追加
/* ----- アイコン整形 ----- */
function blogn_IconStr($str){
$icon = file(BLOGN_INIDIR."icon.cgi");
for ( $i = 0; $i < count( $icon ); $i++ ) {
$icon[$i] = ereg_replace( "\n$", "", $icon[$i] );
$icon[$i] = ereg_replace( "\r$", "", $icon[$i] );
list($filename, $icon_key) = explode("<>", $icon[$i]);
if (strstr($str, $icon_key)){
if (BLOGN_MOBILE_KEY == 1) {
if (BLOGN_PNG_KEY == 0) {
$icon_file = BLOGN_ICONDIR.substr($filename, 0, strlen($filename) - 3)."gif";
}else{
$icon_file = BLOGN_ICONDIR.substr($filename, 0, strlen($filename) - 3)."png";
}
}else{
$icon_file = BLOGN_ICONDIR.$filename;
}
$size = @getimagesize($icon_file);
$icon_name = preg_replace("/\[:([\w\W]+?):\]/", "\\1", $icon_key);
$str = str_replace($icon_key, '<img src="'.$icon_file.'" '.$size[3].' alt="'.$icon_name.'">', $str);
}
}
$str = preg_replace("/#<br(\s\/)*>/i", "\n", $str);
$str = preg_replace("/([^\/])><br(\s\/)*>/i", "\\1>", $str);
return $str;
}
※ 青色部分は「タグ後の改行処理」の追加ルーチンです。必要であれば追加してください(今回の JavaScript 改造には不必要)。
「#」ではなく他の文字で改行を抑制したい場合は、ステップ3で追加した↓の「#」を別の文字に置き換えましょう。
$str = preg_replace("/#<br(\s\/)*>/i", "\n", $str);
基本的に「覚えやすい」「タイプしやすい」「誤動作しにくい」文字を選ぶのが良いでしょう。
スクリプト全行の行末に「#」と書いてください。
例:Hello, World!!