Home > Archives > February 2008
February 2008
[Nucleus]記事のページングや一覧表示をするプラグインNP_ShowBlogs
以下のプラグインを導入し、ページング機能を追加する。
プラグインは普通にpluginsフォルダ配下にダウンロード&解凍したファイルを設置し、プラグイン管理からのインストールでOK。 その後テンプレート編集で使用しているテンプレートの「メインの目次ページ」を編集。
<%blog(template/index, 10)%>
のように記述されているところを
<%ShowBlogs(template/index,10)%>
のように変更するだけで過去記事へのリンクが上下に表示される。 とりあえずこれでいいや。
疑問点
ここで使用しているテンプレートではblogではなMultipleCategoriesという変数を使用していた。 これは以前導入したサブカテゴリ用のプラグインの変数で、サブカテゴリの設定が反映されるように表示するためのものらしい。
[参照] カテゴリの階層化
だけどMultipleCategoriesをShowBlogsに変更したところで表示は別に変わってないし、記事にサブカテゴリも表示されている。 なんだろう?まあいいや。
[未解決]google-code-prettifyを使用するとIEで改行が表示されない
n46さんに指摘いただいて調査した結果、google-code-prettifyとIEの相性が悪いことが判明。 結局IEのみgoogle-code-prettifyを使用しないように逃げたのですが、以下悪あがきした経緯を書いておきます。 コード部分の改行が全て削除されてしまうというもの。 こちらを参照するとどうもIEが悪いっぽい。
Favorite Labo - google-code-prettify
ここを参考にさせてもらいました。 ただし現在のバージョン(prettify_31_Aug_2007)ではいじる場所が少し違い990行目を修正。 修正に関して、JavaScriptに疎いため知人に助言をもらいました。 (guccyon, fujioka0729ありがとう!)
prettify.js修正前
pre.innerHTML = newContent;
prettify.js修正後
pre.innerHTML=(/*@cc_on!@*/false) ? newContent.replace(/<br\s?\/?>/g, ' <br/>') : newContent;
ブラウザ判定方法がやや特殊ですが、毎回読み込まれ実行されるため、コード量や処理負荷をできる限り減らそうという意図があります。 <br>だけではなくて、<br/>や<br />(/の前に空白あり)にも対応させました。 また、僕はサイズ縮小版のprettify-small_31_Aug_2007を使用しているので、そちらの場合の修正ポイントも書いておきます。 修正箇所はprettify.jsファイルの中をinnerHTMLでテキスト検索していって一番最後に見つかった部分です。最終行である18行目の後ろのほうを以下のように修正しました。
prettify.js修正前
~(省略)~l.innerHTML=m;~(省略)~
prettify.js修正後(上記のl.innerHTML=m;部分を以下に置き換え)
l.innerHTML=(/*@cc_on!@*/false) ? m.replace(/<br\s?\/?>/g, ' <br/>') : m;
で、これでとりあえずいけるかと思ったけど・・・ダメだったと(実際は少し惜しかった)。 日本語表示行の改行ができない。<br>タグすらないと思われる。 それを調べるためにMicrosoft提供のIE版FirebugのようなものInternet Explorer Developer Toolbarなんてものを入れたりして格闘しました。
また、この修正でもIEでコード部分をコピペした場合、やはり改行が削除されてしまうという問題は解決していません。 ということでFavorite Laboの中の人は導入を見送ったみたいです。 そこで後から知ったことだけど、dan kogai氏も同じ問題に対してIEのみオフという対処をしたようなので(参照:404 Blog Not Found - google-code-prettify vs IE 6)、僕も同じ手段を取りました。 IEかどうかの判定部分は知人のアドバイスを受け入れdan氏とは少し違う方法を取りました。
if (1 /*@cc_on -1 @*/)
ではなく
if (/*@cc_on!@*/true)
という方法。数値型を真偽値にキャストするコストを抑えるため、らしい。そういう風に解釈した。間違ってないよね? そして以前google-code-prettifyの導入時に、bodyタグのonLoadで2つの関数を実行しているので、そこを丸ごとこのif文で囲みました。
<body onload="if (/*@cc_on!@*/true){prettyPrepare();prettyPrint();}">
とりあえずこれで逃げます。 指摘くださったn46さん、ありがとうございました。
[Nucleus]スパムコメントに対応 - NP_Captchaプラグイン
以下から入手して、ここ数日急きょ増えたスパムコメントに対応。 コメント時に画像内の文字を入力するという、よくあるやつ。
それはそうとコメントフォームの表示が崩れるんだけど、修正する方法がわからない。 スキンやテンプレートで定義されているのでもないみたい。 どっかでカスタマイズできるのかな。
追記
CSSの修正でなおることがわかった。どうやらNucleus3.3独自の問題なのかな?
以下参照。
[Nucleus][MODx]google-code-prettifyでソースコードの色分け表示
以下参照
google-code-prettify で ソースコード表示 を修飾
最近、Nucleusのカスタマイズに関してここのブログに大変お世話になっています。
僕も誰かの役に立てるような情報を残せるように、早くなりなさい。
google-code-prettify導入後、色合いが背景と会わなかったのでスタイルシートの背景色を若干修正。
よし、これでOK。
これを参考にMODxのサイトにも導入してみた。
prettify.css と prettify.jsは(MODxインストールディレクトリ)/assets/jsと(MODxインストールディレクトリ)/assets/cssに設置。cssディレクトリは無かったので新たに作りました。ようは見えるところにあればどこでもいい。
個別のドキュメントに一つずつ修正を加えるのはもちろんナンセンスなので、共通のテンプレートの<head>内に以下のコードを追加します。prettify.cssとprettify.jsへのリンクは各自の環境にあわせましょう。
<!-- google-code-prettify -->
<link href="/assets/css/prettify.css" rel="stylesheet" type="text/css"/>
<script src="/assets/js/prettify.js" type="text/javascript"></script>
<script type="text/javascript">
function prettyPrepare() {
var o = document.getElementsByTagName("pre");
for (var i=0; i<o.length; i++) {
if (o[i].firstChild.tagName.toLowerCase() == "code") o[i].firstChild.className = "prettyprint";
}
}
</script>
そしてbodyタグを修正。
<body onload="prettyPrepare();prettyPrint();">
以上。 最近、人のふんどしで相撲取りすぎだな。。
追記
IEでの利用に不具合が発覚しました。 詳しくは次の記事を参照してください。 今のところ解決法は見つかっておらず、IEのみオフになるようにしています。
[Nucleus]カテゴリの階層化
NP_MultipleCategoriesで実現できます。
ただしスキン編集とかスキンファイルをいじったりする必要がある。
Nucleusはデザインに関する設定内容が色んな場所に散らばってる。
これはスキンとテンプレートという思想上しかたのないことかもしれないけど、若干不便に感じるんだなぁ。
そういえばMODxもこれに似ているところがある。
でもMODxは普通のHTMLに近いので知ってる人にはわかりやすい気がする。
Nuleusのスキンとテンプレートの概念って、本当にちゃんと理解するのって大変そう。。
[Nucleus]検索フレーズ分析プラグイン NP_SearchedPhrase
とりあえずここに書いてるとおりやってみた。
するとGoogle検索のキーワード表示がどうも文字化けしている。
そ こで見つけた情報がこちら。
NP_SearchedPhrase.phpの396行目のmb_convert_encoding()の第3引数に"auto"を追加。
できた!!
僕が使用しているvicunaというスキンの場合はスキンファイルのothers.incを編集したらOKでした。
文字化けしてた時の残骸が残ってるけど、ログは直近の一か月しか持たないらしいし、そのうち消えるでしょ。
さて、飲みに行くか。