朝顔日記

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

2006-03-22

rNote の file.cache に tag を埋め込む で、rNote 本体を改造したんですが、さらに改造して、file.cache に個別記事の概要も埋め込むようにしました。これまでは、tag で絞り込みした際に、記事の概要を個別のファイルから引っ張ってきていたため、ヒットする記事が多いとそれだけ多数のファイルにアクセスする必要があったのですが、概要を file.cache に埋め込んでおくことで、faile.cache にだけアクセスして概要を表示することが可能になりました。

また改造箇所を示すのはダルいのですが、備忘録を兼ねて書いておきましょう。前回と重複する部分もありますが、関係箇所をすべて書いておきます。

まず、設定ファイル rnote_config.php に以下を追加。これは前回と同じです。


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

次に、本体 rnote.php です。最初のほうにある、$g_filelist; のところです。diff ぽく書いておきます。行頭に + がある分が追加分で、! は変更のした部分です。


  define(FILELIST_DATE,0);
  define(FILELIST_TITLE,1);
  define(FILELIST_WBACCEPT,2);
+ define(FILELIST_LABEL,3);
+ define(FILELIST_DESCRIPTION,4);
  
  $g_dirlist;
  define(DIRLIST_NUMITEM,0);

次は、GetFileList 関数のあたり。


        }
        $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));
+       $description = get_XMLTAG(TAG_DESCRIPTION,$datafile);
+       $description = preg_replace("/[\t\n\x0b\x0c\r]/",'',strip_tags($description));
        $titlelist[$dir.$file][FILELIST_TITLE]    = $title;
        $titlelist[$dir.$file][FILELIST_WBACCEPT] = get_XMLTag(TAG_WBACCEPT,$datafile);
+       $titlelist[$dir.$file][FILELIST_LABEL]    = $label;
+       $titlelist[$dir.$file][FILELIST_DESCRIPTION]    = $description;
        $num++;
      }
    }

次は、CreateFileCache 関数のところ。


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

次は、ReadFileCache 関数の終わりのほう。


        $g_filelist[$fname][FILELIST_DATE] = $date;
        $g_filelist[$fname][FILELIST_TITLE] = $title;
        $g_filelist[$fname][FILELIST_WBACCEPT] = $wbaccept;
+       $g_filelist[$fname][FILELIST_LABEL] = $label;
+       $g_filelist[$fname][FILELIST_DESCRIPTION] = $description;
      }
    }
  }
  
! function FileCache_AddEntry($fname,$date,$title,$wbaccept,$label,$description){
    $filelist = _file(FNAME_FILECACHE);
!   array_unshift($filelist,"$fname\t$date\t$title\t$wbaccept\t$label\t$description\n");  // add new entry
    $fp = _fopen_wb(FNAME_FILECACHE);
    foreach($filelist as $a) fwrite($fp,$a);
    fclose($fp);

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

xml ファイル\t時刻情報(unixタイム)\t記事のタイトル\tツッコミ及びトラックバックの受け付けフラグ\tいわゆる tag\t記事の概要

で、こういう file.cache の構造に変更したので、tag 閲覧兼 rss 出力用の php スクリプト、labelview.php は file.cache だけを読んで仕事ができるようになりました。

記事数が多いとページめくり機能(何)があるといいんでしょうが、1ページで全部表示されるのも、一覧性が高いのと、ページ内検索する場合に便利なんですよねぇ。ということで、今のところページめくり機能は装備していません。というか、全部 DB にツッコんだ方が便利な気もす。:p)

一応、主だった tag にリンクしておきましょう。

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

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

この記事の永続的 URI ならびに トラックバック ping URI
http://diary.noasobi.net/2006/03/diary_060322a.html