pplog の使い勝手を良くしてみる

パピーを名犬にするための技、テクニック

モデレータ: 暇人, YoN, nyu

返信する
アバター
サボり魔
記事: 294
登録日時: 07/12/06(木) 12:28
お住まい: 関東

pplog の使い勝手を良くしてみる

投稿記事 by サボり魔 »

えーと、実は Puppy に同梱されているブログ用のスクリプト pplog を使ったことはありません(でした)。 :oops:
ブログを持つ予定も無かったし、触れる機会と言えば Puppy の新バージョンが出る際の動作チェック程度…。

で、今回一念発起して使ってみることにしました。
環境は Puppy 内ではなく、他所に pplog 一式をアップロード。
1週間ほど試用してみました。

かつて日本語が使えない状態をフォーラムの皆さんと一緒に修正したことがありましたが、
まだいじるところはありそうです。
  1. 記事カテゴリー(左メニュー内)に日本語を入れることはできるが、正しいリンクが生成されない
  2. 各記事を開いた時のページタイトルが、ブログの大元のタイトルのまま
  3. RSS で配信される記事が、記事の日時ではなくクライアントからリクエストした日時になる
  4. 記事を更新する(edit)と、オリジナルの投稿日時が失われる
とりあえず、上記の4点が気になりました。
サボり魔
Precise-550JP & Precise-571JP & Tahr-Puppy
frugal install (USB)
8GB ASUS H97I-PLUS Core-i5 4690S
8GB ASRock Z68M-ITX/HT Core-i7 2600k with Win7
16GB ASROCK H170M-ITX/ac Core-i5 6600
アバター
サボり魔
記事: 294
登録日時: 07/12/06(木) 12:28
お住まい: 関東

pplog の記事カテゴリー分けで日本語リンクが通るようにする

投稿記事 by サボり魔 »

では、綺麗なコードを汚くしてゆきます。

ベースになっているのは、Puppy-431JP90 に同梱されている pup_pplog.pl です。
行数もこのバージョンに準じます。


まずは左メニューの「カテゴリー」に入れた日本語リンクが不動なところから。
原因は、リンクのクエリに数値参照文字列がそのまま入っているから。

コード: 全て選択

& => %26 
# => %23 
; => %3b 
という具合に url エンコードしてやれば通るみたい。

26-29行目の「use ほにゃらら;」の辺りに

コード: 全て選択

use URI::Escape; 
を挿入。

441行目の

コード: 全て選択

print '<a href="?viewCat='.$_.'">'.$_.'</a>'; 

コード: 全て選択

print '<a href="?viewCat='.uri_escape($_).'">'.$_.'</a>';
に書き換え。


これで日本語カテゴリー名のリンクが動くようになる。

Perl で urlエンコードするには URI モジュールを使えばよいとのことですが、このモジュールどの環境でも使えるのかな?
私が pplog を設置したサーバーでは通ったけど…、ダメなら上記3種類の文字だけを置き換えるサブルーチンを作ればOK。
サボり魔
Precise-550JP & Precise-571JP & Tahr-Puppy
frugal install (USB)
8GB ASUS H97I-PLUS Core-i5 4690S
8GB ASRock Z68M-ITX/HT Core-i7 2600k with Win7
16GB ASROCK H170M-ITX/ac Core-i5 6600
アバター
サボり魔
記事: 294
登録日時: 07/12/06(木) 12:28
お住まい: 関東

pplog の各記事のタイトルを当の記事ページのタイトルに使う

投稿記事 by サボり魔 »

pplog ではブログのタイトルをソースコードに直接書き込むことで設定できますが、
このタイトルが全てのページのタイトルになります。

例えば、「日本語パピー」というブログを開設すると、どの記事を開いてもページタイトルは「日本語パピー」(だけ)です。ブラウザのタブに表示されるやつです。
Google も<title>タグを読むそうですし、個別の記事のタイトルを使いたいですよね。


ひとまず、次のサブルーチンを定義して、

コード: 全て選択

sub getContentTitle
{
	if(r('viewDetailed') ne '')
	{
		my $fileName_contentTitle = r('viewDetailed');
		unless(-e "$config_postsDatabaseFolder/$fileName_contentTitle.$config_dbFilesExtension")
		{
			return "";
		}
		open(FILE, "<$config_postsDatabaseFolder/$fileName_contentTitle.$config_dbFilesExtension");
		my $tempContentTitle;
		while(<FILE>)
		{
			$tempContentTitle.=$_;
		}
		close FILE;
		my @entry4title = split(/"/, $tempContentTitle);
		return $entry4title[0].' - ';
	}
	else
	{
		return "";
	}
}
375行目の

コード: 全て選択

<title>'.$config_blogTitle.' - Powered by PPLOG</title>

コード: 全て選択

<title>'.getContentTitle().$config_blogTitle.'</title>
に変える。

「Powered by PPLOG」を削りましたが、どうせブログのフッターに(リンク付きで)書かれてるから問題ないでしょう。

なお、ブログの大元のタイトル(各記事ではない)に日本語の文字列を使いたい場合は、数値文字参照形式でソースコードに追加すると文字化けしません。
最後に編集したユーザー サボり魔 [ 12/01/18(水) 22:31 ], 累計 2 回
サボり魔
Precise-550JP & Precise-571JP & Tahr-Puppy
frugal install (USB)
8GB ASUS H97I-PLUS Core-i5 4690S
8GB ASRock Z68M-ITX/HT Core-i7 2600k with Win7
16GB ASROCK H170M-ITX/ac Core-i5 6600
アバター
サボり魔
記事: 294
登録日時: 07/12/06(木) 12:28
お住まい: 関東

pplog の RSS 機能に配信日時を追加する

投稿記事 by サボり魔 »

pplog には RSS 配信機能がある(左の Main menu 内)。
試してみたところ、RSS の機能としては致命的な点が一つあった。記事の更新日時が表示されない。

様々な RSS を受信していると、配信日時がこちらからリクエストした時間と同じ時間になっているサイトがあることに気がつく。(同じ記事が複数回取得されたりする)
pplog もそうらしい。
RSS の仕組みを調べたところ、出力に時刻が入っていないため、自動的にリクエストされた時刻が適用されているらしい。

pubDate タグを設定すれば通りそうなので、各エントリに埋め込まれている時刻データを流用しようと思ったけれど、RSS 用のフォーマットになってない。
仕方ないのでエントリごとに RSS 用のデータを持たせることにした。


配列の finalEntries に各データが格納されるようなので、その最後に RSS 用データが来るようにする。

RSS 用時刻文字列取得用の関数を定義

コード: 全て選択

sub get_rssDate
{
 my ($week, $month, $day, $time, $year) = split /\s+/, scalar(localtime());
 return $week.', '.$day.' '.$month.' '.$year.' '.$time.' +0900';
}
802行目近辺の

コード: 全て選択

print FILE $title.'"'.$content.'"'.$date.'"'.$category.'"'.$i;
の最後のセミコロンの前に

コード: 全て選択

.'"'.get_rssDate()
を付け足す。

1076行目近辺の

コード: 全て選択

print FILE $title.'"'.$content.'"'.$date.'"'.$category.'"'.$fileName;
にも同様に付け足す。

355行目付近の RSS タグ生成過程(<category>タグと<description>タグの間とか)に

コード: 全て選択

<pubDate>'.$finalEntries[5].'</pubDate>
を付け足す。

で、ついでだから <lastBuildDate> タグも作りたいので、
328行目付近の

コード: 全て選択

my @limit;
の後に

コード: 全て選択

my @hoge_entries = split(/"/, $entries[0]);
を付け足し、

コード: 全て選択

<description>'.$config_metaDescription.'</description>
の次の行に

コード: 全て選択

<lastBuildDate>'.$hoge_entries[5].'</lastBuildDate>
を書いておく。


これで RSS が更新時刻通りに取得できるようになった。
サボり魔
Precise-550JP & Precise-571JP & Tahr-Puppy
frugal install (USB)
8GB ASUS H97I-PLUS Core-i5 4690S
8GB ASRock Z68M-ITX/HT Core-i7 2600k with Win7
16GB ASROCK H170M-ITX/ac Core-i5 6600
アバター
サボり魔
記事: 294
登録日時: 07/12/06(木) 12:28
お住まい: 関東

pplog の記事を後から修正してもオリジナルの投稿日時を更新しないようにする

投稿記事 by サボり魔 »

pplog の記事を更新(=修正)すると、記事の日時が更新した日時になってしまい、
オリジナルのエントリー日時が失われる。

むしろ「最初に書いたのいつだっけ?」となってしまうし、
「~年~月~日に修正」と書けばよいだけなので、個人的にはこの機能はなくてよい。

で、日時が更新されないようにしてみた。


965行目の

コード: 全て選択

my $category = $entry[3];
の次に

コード: 全て選択

my $original_date = $entry[2];
を追加。

967行目の form タグの次の行に

コード: 全て選択

<input name="original_date" type="hidden" id="original_date" value="'.$original_date.'">
を追加。

1075行目の

コード: 全て選択

my $date = getdate($config_gmt);
の先頭に # をつけてコメントアウト。
すぐ次の行に

コード: 全て選択

my $original_date = r('original_date');
を追加。

1076行目の

コード: 全て選択

print FILE $title.'"'.$content.'"'.$date.'"'.$category.'"'.$fileName;

コード: 全て選択

print FILE $title.'"'.$content.'"'.$original_date.'"'.$category.'"'.$fileName;
に書き換える。

これで各記事を後日修正しても日付がオリジナルのままになる。


なお、先に挙げた点「pplog の RSS 機能に配信日時を追加する」を併用する場合、最後の書き換えは

コード: 全て選択

print FILE $title.'"'.$content.'"'.$original_date.'"'.$category.'"'.$fileName.'"'.get_rssDate();
となる。
更新時の挙動は、オリジナルの日時は変わらず、RSS では更新した日時が送られることになる。
最後に編集したユーザー サボり魔 [ 12/01/18(水) 22:34 ], 累計 1 回
サボり魔
Precise-550JP & Precise-571JP & Tahr-Puppy
frugal install (USB)
8GB ASUS H97I-PLUS Core-i5 4690S
8GB ASRock Z68M-ITX/HT Core-i7 2600k with Win7
16GB ASROCK H170M-ITX/ac Core-i5 6600
アバター
サボり魔
記事: 294
登録日時: 07/12/06(木) 12:28
お住まい: 関東

Re: pplog の使い勝手を良くしてみる

投稿記事 by サボり魔 »

ひとまずこんなところです。4番目の修正は好みで、ってとこでしょうか。

さーて、 ブログを閉鎖してきましょう…。 :wink:
サボり魔
Precise-550JP & Precise-571JP & Tahr-Puppy
frugal install (USB)
8GB ASUS H97I-PLUS Core-i5 4690S
8GB ASRock Z68M-ITX/HT Core-i7 2600k with Win7
16GB ASROCK H170M-ITX/ac Core-i5 6600
アバター
暇人
記事: 2392
登録日時: 07/08/12(日) 23:33
お住まい: 埼玉県xx市並4
連絡する:

Re: pplog のデザインをいじってみる。

投稿記事 by 暇人 »

初期状態では素っ気ないPPLOGですが、スタイルシートをいじるとそれなりの結果が得られます。
添付ファイルを見るにはパーミッションが必要です
管理人見習い
NEC Express5800 S70/SR G6950 2.8GHz/1G
lenovo S10-3 AtomN450 1.66G/1G
暇人/貳馬力/2CV
アバター
シノバー
記事: 3139
登録日時: 09/03/21(土) 00:05
連絡する:

pplog最新版

投稿記事 by シノバー »

L18LさんによるUTF-8対応の本家版最新は pplog-1.1.3 になります。
http://bkhome.org/blog/?viewDetailed=02830
また sc0ttman版 SJPPLOGというものもあるそうです。
http://pplog.scottjarvis.com/?viewDetailed=00021

以上、参考まで。
The bar master, Shino's Bar
http://shinobar.net/
アバター
サボり魔
記事: 294
登録日時: 07/12/06(木) 12:28
お住まい: 関東

Re: pplog 最新版

投稿記事 by サボり魔 »

このスレッドをたてた頃は PPLOG のページ(pplog.infogami.com)が生きていたのですが、現在は 404 ですね。
ただ、以前からデザインを変えるためのスキンをダウンロードできませんでした。

現在は http://code.google.com/p/pplog/ がソース配布元ってことかな?

本家で 文字表記不具合が改善されたものが、バージョン 1.1.3
これまで使われていたものが、バージョン 1.1b
Puppy 日本語版に入ってたものが、バージョン 1.1bJP改
ってとこでしょうか。
暇人 さんが書きました:スタイルシートをいじるとそれなりの結果が得られます。
だいぶ違いますね。カッコよくなってる :D
サボり魔
Precise-550JP & Precise-571JP & Tahr-Puppy
frugal install (USB)
8GB ASUS H97I-PLUS Core-i5 4690S
8GB ASRock Z68M-ITX/HT Core-i7 2600k with Win7
16GB ASROCK H170M-ITX/ac Core-i5 6600
返信する