QG : Akiary Labo
2009年10月30日(金) カテゴリーテンプレートの修正を反映させるには
categlist.cgiを見ているとバージョン表記をするAkiaryタグがあったので、使おうと思いました。初期状態のカテゴリーテンプレートがなくて、うっかり書きそびれていました。
早速テンプレートに書き入れたのですが、同じカテゴリー名で新記事を投稿(日記書き込みページからcateglist.cgiに「日記」リンクでアクセス)しても、カテゴリーテンプレートの修正は反映されませんでした。そこで、新しいカテゴリー名を作ると反映されました。ただ、一度作ったカテゴリー名はカテゴリー毎のリストページが残っているためか、カテゴリー名削除(別のカテゴリー名に書き換え)後再びそのカテゴリー名を使って記事を投稿しても、テンプレートの修正は反映されませんでした。
「カテゴリー復活」でも見た動作のように、categories.jsとcat_checked.txtの内容を空にしてアップするのと、カテゴリー毎のリストページを削除して初期状態に戻せば、更新時に反映されそうです。
また、少し気になったこととして、新しいカテゴリーを作った直後にできるカテゴリー毎のリストページが、リストを書き出すjavascriptのバグなのか、リストより後にあるソースが二度繰り返されて表示が二重になることがありました。もう一度更新すると正しく表示されました。必ずしも二重示になるわけでないので、原因が特定できていません。
2009年10月29日(木) カテゴリー復活
Akiary v.0.51の時にはあったカテゴリーが無くて不便を感じ、保存していたデータからカテゴリー作成CGI「categlist.cgi」を使いました。Akiary v.0.61でもうまくいくことを祈りつつ。
CGIはパーミッションを755、カテゴリーリストを生成するjavascript「categories.js」とチェックリストの「cat_checked.txt」は666に。
カテゴリーリストを生成するjavascriptは、リンク先のファイルがカテゴリーファイルを置くディレクトリー「cat_dir」となっています。デフォルトのようにカテゴリーのCGIと同じディレクトリにファイルがあれば問題はなかったのでしょうが、1つ余分にさかのぼってしまいました。
$categindex.="document.writeln('[<a href=\"".$conf->{'cat_dir'}.&EscapePercent($file)."\">".$category."</a>]')\n";
そのため、日記を置くディレクトリをあらわすURL「uri_base」に指定し直し。
$categindex.="document.writeln('[<a href=\"".$conf->{'uri_base'}.&EscapePercent($file)."\">".$category."</a>]')\n";
categories.jsとcat_checked.txtの内容を空にしてアップし、日記を更新したら正しいURLに修正できました。
2009年10月28日(水) 改行処理まわりが怪しいのですが
「タイムスタンプ追加」を書いていて、投稿後に書き込み欄がリロードされると、空けておいた改行がまた詰まってしまうという改行処理の怪しさに気付きました。
PREタグが混じった文章を久しぶりに書いていたから気付けたものの、見逃していたバグのようでした。「変換まわりのまとめ」では自身ありげに書いていたものですが、これだとULタグやDIVタグも本当はうまくいっていない可能性があります。
先日から、ちまちま試しになおとさんのパッチをakiary.cgiのコピーに当てたりしているのですが、こちらの信頼できるソースとすげ替えたくなってきました。しかし、自分独自の変換処理カスタマイズなどしているので、過去ログに生じるかもしれないバグ取りが大変になりそう。それをするならまた新たに日記ディレクトリを作ろうかと思い直しました。現ディレクトリにリンクでつなげば、読むには問題ないし。
2009年10月28日(水) タイムスタンプ追加
QGを久しぶりに手直ししていて、日記にタイムスタンプを表示させたくなりました。
利用できるAkiaryタグはないようでしたので、Akiaryに手を入れることに。
「+」マークの行を追加しました。
オリジナル版1413行目あたり「# MakeBNDiary -- バックナンバーファイル作成関数 -- (5)日記ファイルを作成する」の「# body部作成」内。
# 日記本文
$tmp=~s/<!--\s*akiary_body\s*-->/<!--akiary_body-->$bnbody{$_}<!--\/akiary_body-->/;
+ # タイムスタンプ
+ $times=substr($_, 9, 19);
+ ($ss, $mn, $hh) = localtime($times);
+ $dttm = sprintf("%02d:%02d", $hh, $mn);
+ $tmp=~s/<!--\s*akiary_time\s*-->/$dttm/g;
+
print FH "$tmp";
print FH "<!--/akiary_diary-->\n";
}
同様に、オリジナル版1695行目あたり「# <!-- akiary_diary [^>]*-->から<!-- /akiary_diary -->を日記に置換 (3)最新版日記を変数上で作成」の「# body部作成」内。
# 日記本文
$tmp=~s/<!--\s*akiary_body\s*-->/$body{$_}/g;
+ # タイムスタンプ
+ $times=substr($_, 9, 19);
+ ($ss, $mn, $hh) = localtime($times);
+ $dttm = sprintf("%02d:%02d", $hh, $mn);
+ $tmp=~s/<!--\s*akiary_time\s*-->/$dttm/g;
+
$ret.=$tmp;
}
didの実態は新規記事作成をした時点のepochらしいです。
エポックとはこういうことだそうな。Perl 入門講座 [PRIVATE]
Perlは、時刻を、過去のある時点(『エポック秒』と呼ばれる)からの経過秒数で表す。
UNIXを始めとする多くのシステムでは、1970年1月1日0時0分(GMT)をエポック秒として使用している。
Akiary Laboでもこのエポック秒(UNIX時間と呼んでいました)を利用した事を書いた記事がありますが、localtime()で普通の日時に変換すれば出てくるやん、てことで。
まずはdidからエポック秒の部分(アンダーバー以下10文字)を取り出す。
$times=substr($_, 9, 19);
エポック秒は$timesに代入したので、localtime()の出番です。
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($times);
フルだとこのくらいになるところを、欲しいのが時間と分だけなので、必要な部分までを書きました。(変数名は処理中のと被らなければ何でもOK)
($ss, $mn, $hh) = localtime($times);
それから、2桁の時間:分にフォーマット。
$dttm = sprintf("%02d:%02d", $hh, $mn);
最後に、日記テンプレートで使えるように、Akiaryタグを定義。
$tmp=~s/<!--\s*akiary_time\s*-->/$dttm/g;
せっかくなので、Akiary Laboにも表示させることにしました。