PivotX でごにょごにょ
2010-01-19 02:54 /

いま PivotX を使って、小規模なエリアのお知らせ一覧を表示しているのだが、かなり手を入れる必要がある。
まずエントリーのフォームにかならず「サブタイトル」とか「抜粋」を入力する欄があって、こんなのはいらないからテンプレートで削らないといけない。それから、ソースレベルの編集をライトボックス上でしなきゃいけないというのは致命的なバカ仕様だが、これはもうあきらめるしかない。JavaScript を多用する環境では動作が重い(というか頻繁にフリーズする)Firefox で運用しないように、Chrome か IE8(!)でも使うほうがよい。あとは、WP のショートコード風のマクロについて使い方を整理する必要がある。正直言ってマイナーなブログツールだし、ドキュメントもかなりお粗末なので心もとないからだ。例えば、

ドキュメントページにこんな記述があるのだけれど、トップページにお知らせのリストを表示したときに、アーカイブページで並んでる個々の記事に内部アンカーで飛ばすような場合、ヘディングタグに ID を振るわけだが、リストのタイトルにつけるアンカータグの URI にどうやって記事の ID を追加すればよいのか。上記の文章だけで何も表記例がないため、結局はコアのソースを読む必要がある。
/pivotx/modules/module_parser.php を見ると、
if (strpos($format, “[[id_anchor]]”)==0) {
$entry_html = ‘<span id=”e’.$entry['code'].’”></span>’;
} else {
$entry_html =”";
}
こんな記述が 1,969 行辺りにある。どうやら、ターゲット側では空の <span /> に ID を追加して挟み込むようだ。ダサい(笑)。ていうか、パースしてるのはここだけなので、リンク元にどう書けばいいのか分からない。[[link]] タグで制御するであろうことはわかるのだが、オプションをどう付けても <a> タグ全体でしか出力しないので、これもコアエンジンをハードコーディングしなければならないようだ。
具体的には、/pivotx/modules/module_parser.php の 2,090 行以下にある、makeArchiveLink() というユーザ定義関数の中で、$unit となっているのが記事の ID にあたる。記事の一覧を表示する場合は、c=info とか c=announce といったカテゴリーごとに記事の一覧を表示するため、$_GET[ 'c' ] の中身を見て、しかるべきカテゴリー表示の一覧に飛ばすように、
if ( $_GET[ 'c' ] == ‘information’ )
{
$link = $PIVOTX['paths']['site_url'] . ‘?c=info&id=’ . $entry_id;
}
else if ( $_GET[ 'c' ] == ‘topics’ )
{
$link = $PIVOTX['paths']['site_url'] . ‘?c=announce&id=’ . $entry_id;
}
のように $link 出力の内容を書き換える。トップページのテンプレート側では、frontpage_template.html にて、
<ul>
[[ subweblog name="standard" order="desc" amount="8" category="info" ]][[ literal ]]
<li>
<p>[[ permalink text="%title%" title="%title%" ]]</p>
</li>
[[ /literal ]][[ /subweblog ]]
</ul>
のような一覧を出力する。これで、カテゴリー “info” の記事が新しいものから順番に、最大八つだけ表示される。問題は、[[ permalink ]] だと勝手に URL が出力されるため、href の値にクエリ文字列を追加しようとすればハードコーディングしか手がないということだ。
一番の問題点は、カテゴリーのアーカイブを archive_template.html ではなく、frontpage_template.html で出力するようになっていることだ。すると、このサイトのトップページで frontpage_template.html が出力したリスト部分をインクルードしているが、カテゴリーのアーカイブを出力すると、このリスト部分だけのページが表示されてしまう。かといって、テンプレート内でいちいち条件分岐するなんてのはおかしい。そんなことをするくらいなら、トップページでは RSS を SimplePie などでパースして表示したほうがマシである。カテゴリーのアーカイブを archive_template.html で出力するようにしなければならない。
・・・とやってみて、トップページでは SimplePie でリストを表示するのが最も簡単であることに気づいた。それに、PivotX は非常に動作が遅く(何と言っても、まともな設計の PHP フレームワークが全て避けて通る Smarty なんか使ってるわけで)、キャッシュもあまり期待できない性能なので、SimplePie のキャッシュを読み込むだけなら速い。実際にやってみると、初回はかなり遅いがキャッシュを使った表示は静的な HTML と体感が変わりない。いま SimplePie.org のサイトは落ちているようだが、いつもながらできのよさに感心する。
