朝顔日記

rNote の file.cache に tag を埋め込む

2006-03-10

順番が逆になったみたいですが、先日書いた rNote に tag を装備したい の続きです。

先日は書かなかった、rNote の file.cache に、タグ情報を載せるための rnote.php の改造方法を書いておきます。本来ならば、diff の結果を書いておけばよさげなんですが、他にも改造している箇所があるので、tag を埋め込む部分だけ抜き出して書いておきます。

まず、rNote の設定ファイル、rnote_config.php に追加する分です。タグ名設定の設定辺りに以下を追加します。私は、Class 要素にしましたが要素名は適当に。


define(TAG_LABEL,'Class');      //タグ用

定数名を TAG_TAG とかにするとややこしいことになりそうだったので、TAG_LABEL を使いました。:p)

さて、次はいよいよ rnote.php の改造です。

最初のほうにある、$g_filelist; のところに1行追加して以下のようにします。


$g_filelist;
define(FILELIST_DATE,0);
define(FILELIST_TITLE,1);
define(FILELIST_WBACCEPT,2);
define(FILELIST_LABEL,3);

次は、オリジナル rnote.php の720行目付近の file.cache を生成するところ、GetFileList 関数を書き換えます。オリジナルは以下の通り。


      $title = get_XMLTag(TAG_TITLE,$datafile);
      $title = preg_replace("/[\t\n\x0b\x0c\r]/",'',strip_tags($title));
      $titlelist[$dir.$file][FILELIST_TITLE]    = $title;
      $titlelist[$dir.$file][FILELIST_WBACCEPT] = get_XMLTag(TAG_WBACCEPT,$datafile);
      $num++;
    }

ここを以下のように。


      $title = get_XMLTag(TAG_TITLE,$datafile);
      $title = preg_replace("/[\t\n\x0b\x0c\r]/",'',strip_tags($title));
      $label = get_XMLTag(TAG_LABEL,$datafile);
      $label = preg_replace("/[\t\n\x0b\x0c\r]/",'',strip_tags($label));
      $titlelist[$dir.$file][FILELIST_TITLE]    = $title;
      $titlelist[$dir.$file][FILELIST_WBACCEPT] = get_XMLTag(TAG_WBACCEPT,$datafile);
      $titlelist[$dir.$file][FILELIST_LABEL]    = $label;
      $num++;
    }

次は、オリジナルの752行目付近の CreateFileCache 関数のところです。


      $temp = "$fname\t$date\t".
        $titlelist[$fname][FILELIST_TITLE]."\t".
        $titlelist[$fname][FILELIST_WBACCEPT]."\n";
      fwrite($fp,$temp);
    }

ここは以下のように。


      $temp = "$fname\t$date\t".
        $titlelist[$fname][FILELIST_TITLE]."\t".
        $titlelist[$fname][FILELIST_WBACCEPT]."\t".
        $titlelist[$fname][FILELIST_LABEL]."\n";
      fwrite($fp,$temp);
    }

FILELIST_WBACCEPT のところの、\n\t に書き換えるのを忘れないように。

次は、オリジナルの778行目の ReadFileCache 関数の終わりのほうです。


foreach($filelist as $a){
      list($fname,$date,$title,$wbaccept) = explode("\t",str_replace("\n",'',$a));
      $g_filelist[$fname][FILELIST_DATE] = $date;
      $g_filelist[$fname][FILELIST_TITLE] = $title;
      $g_filelist[$fname][FILELIST_WBACCEPT] = $wbaccept;
    }

ここを以下のように。

    foreach($filelist as $a){
      list($fname,$date,$title,$wbaccept) = explode("\t",str_replace("\n",'',$a));
      $g_filelist[$fname][FILELIST_DATE] = $date;
      $g_filelist[$fname][FILELIST_TITLE] = $title;
      $g_filelist[$fname][FILELIST_WBACCEPT] = $wbaccept;
      $g_filelist[$fname][FILELIST_LABEL] = $label;
    }

次はすぐ下、オリジナルの800行目付近の FileCache_AddEntry 関数のところです。


function FileCache_AddEntry($fname,$date,$title,$wbaccept){
  $filelist = _file(FNAME_FILECACHE);
  array_unshift($filelist,"$fname\t$date\t$title\t$wbaccept\n");  // add new entry
  $fp = _fopen_wb(FNAME_FILECACHE);
  foreach($filelist as $a) fwrite($fp,$a);
  fclose($fp);

ここを以下のように。


function FileCache_AddEntry($fname,$date,$title,$wbaccept,$label){
  $filelist = _file(FNAME_FILECACHE);
  array_unshift($filelist,"$fname\t$date\t$title\t$wbaccept\t$label\n");  // add new entry
  $fp = _fopen_wb(FNAME_FILECACHE);
  foreach($filelist as $a) fwrite($fp,$a);
  fclose($fp);

以上で終わりです。多分。:p)

この改造によって、file.cache は以下のような構造を持つようになります。\t はタブをあらわしています。

2006/03/diary_060307a.xml\t1141720871\trNote に tag を装備したい\t\ttool site

改造に失敗しても、私にはどうしようもないので試してみられる方はしっかりバックアップをとった上で、自己責任で試してみてください。

なお、この改造の使い道については、rNote に tag を装備したい をどうぞ。そっちもまだまだいじりたいんですけどね。

ということで、タグを装備した rNote 暫定運用中です。

ちなみに、現在私が使っているエントリー用の xml ファイルのフォーマットは以下のようなものとなっています。


<?xml version="1.0" encoding="UTF-8"?>
<rNote xmlns="http://rinn.e-site.jp/rnote/" xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="ja">
<Title><!-- 記事のタイトル --></Title>
<Description><!-- 記事の概要 --></Description>
<publish><!-- 初出の日時 --></publish>
<update><!-- 更新があればその日時 --></update>
<Class><!-- いわゆるタグを空白区切りで --></Class>
<Id><!-- 記事のID --></Id>
<body xmlns="http://www.w3.org/1999/xhtml">
<!-- ここに本文 -->
</body>
</rNote>

関連
rNote の file.cache に description を埋め込む
tag ごとの RSS

「rNote の file.cache に tag を埋め込む」へコメントをつける

書き込み時の挙動について
URI らしき文字列には自動的にリンクが張られます。また "<" や、">" は実体参照化されます。
スパム対策のため、リファラを切っていると投稿できません。

この記事へのツッコミ

1: 鯖缶 (2006-03-10T19:18:47+09:00)
素晴らしい ;-)
あとは検索でキーワードとTagの組合せで絞込みとか出来たら最強かもしれませんね。
コードは後学の為の参考にさせて頂きます。
この記事の永続的 URI ならびに トラックバック ping URI
http://diary.noasobi.net/2006/03/diary_060310a.html