作成と修正を簡単にファイル操作する
「最近の記事」をアクセスすることで、最新の記事へアクセスすることは可能です。ただし、以前の記事(備忘録)を修正した場合、それは最新に投稿された記事ではないので、内容の再チェックをしようとすると何らかの方法で探り当てます。しかし、これが面倒なのです。特に、日誌をつけていて、思い出した項目を追加記入して保存すると、そのページは過去のどっかになりますよね。それを日付とかタイトルで探し出さなくてはなりません。つまり、保存すると「記事の管理」ページになりますが、次のページをめくらないと修正タイトルが見当たらなかったりするわけです。
そのため、修正した記事を常にどっかに表示さえておこうと思うようになりました。具体的な説明に入りますが、以下の二つが常に見えている状態を作ります。
- 最近に作成した記事(これは右ウィジェットに表示されているものと同等ですが、常にスクロールなしでみられる状態とします)
- 最近に修正した記事(実は、これが重要で、やはり修正不足があったなどの場合、アクセスが非常に楽になると思われます)
widget.tpl のテンプレートに以下を丸ごと追加しておきます。これによってトップページ最下段に固定した表示部分が現れるはずです。
/fp-interface/themes/leggero/widgets.tpl
<div id="footerX"> <span id="footerC"> CREATE: {foreach from=$fxs item=newerlist} {$newerlist} {/foreach} <br> </span> <span id="footerM"> MODIFY: {foreach from=$findlast_file item=lastlist} {$lastlist} {/foreach} </span> </div
CSSファイルには以下を付け加えます。これによって、一番下に表示が固定されてきます。
/flatpress.world/fp-interface/themes/leggero/leggero/res/common.css
#footerX { position: fixed; width: 760px; bottom:0; background: #eef0ee; font-size: 75%; margin-left: -6px; padding: 0.1em 0.5em 0.1em 0.5em; border: 1px solid #486A3D; } #footerM { color: #b0421d; } #footerC { color: green; }
これらを適用してみると、下の矢印のところのようになりましたので、ここに「最近の作成ファイル」と「最近の修正ファイル」を表示させることにしましょう。
次に、「最新の記事」の一覧のデータを用意してみます。もともと、「最新の記事」を表示してくれるプログラムは存在しているので、これに要件を付け加えるだけで済みました。 //FlatPress.info のコメントのところを2か所付け加えてください。ここでは8個分の最新記事を表示させているのですが理由として、まぁ、1週間分ぐらいの表示としておこう、そして8個以上ではファイル名の並びが1行ではいっぱいになってしまうと思われるからです。
/fp-plugins/lastentries/plugin.lastentries.php
$count = 0; // FlatPress.info $fxscnt = 0; while ($q->hasmore()) { list($id, $entry) = $q->getEntry(); $link = get_permalink($id); $string .='<li>'; $admin = BLOG_BASEURL . "admin.php?p=entry&entry="; if (user_loggedin()) // if loggedin prints a "edit" link $string .= "<a href=\"{$admin}{$id}\">[".$lang['plugin']['lastentries']['edit']."]</a>"; $string .= "<a href=\"{$link}\">{$entry['subject']}</a></li>\n"; // FlatPress.info if ($count < 8) { $smarty->append('fxs', "<a href=\"{$link}\">{$entry['subject']}</a>"); } $count++; }
このように変更してみますと、表示が上手にされました。(ファイル名が長いと表示部分はずっと横に広がります)
さて、残るは「修正」したファイル名を検索して一覧にする部分ですね。こちらは、少し手ごわいです。新たにプログラムを組む必要がありそうです。それを作ったとして、入れておくディレクトリも考慮が必要な感じです。なぜなら、今後のバージョンアップがあった場合、FlatPress のオリジナルのディレクトリ構成の外のおいておくべきなのかも知れません。ここでは、FlatPress/APP/findlist/ というディレクトリを新たに作成することにしました。ここにプログラムを作成(mkdir -p flatpress.world/APP/findlast/)して収容します。実際のファイルをお示しするとこのようになりました。
flatpress.world/APP/findlast/findlast.php
<?phpfunction findlast_file() {
//include_once('../../defaults.php');
include_once(ABS_PATH .'defaults.php');// FlatPress.info
$iterator = new RecursiveDirectoryIterator($dir); $iterator = new RecursiveIteratorIterator($iterator); $file_list = array(); foreach ($iterator as $fileinfo) { // $fileinfoはSplFiIeInfoオブジェクト if ($fileinfo->isFile()) { $file_list[] = $fileinfo->getPathname(); } } $file_list2 = array() ; $i = 0 ; foreach ( $file_list as $file_name ) { $file_list2[$i][0] = $file_name ; $file_list2[$i][1] = date("Y/m/d H:i", filemtime($file_name)) ; $i++ ; } usort($file_list2, "order_by_desc") ; $j = 0; $res = ""; foreach ($file_list2 as $least_file ) { // $least_file[0]) is a name of blogfile.txt $sub = $least_file[0]; $fp = fopen($sub, 'r'); if ($fp){ if (flock($fp, LOCK_SH)){ while (!feof($fp)) { //$buff = mb_convert_encoding(fgets($fp), "UTF-8"); $buff = mb_convert_encoding(fgets($fp), "UTF-8", "AUTO"); if (strstr($buff, "SUBJECT")) { $subject = explode("|", $buff); // http://sixflags.in.net/TEST/FlatPress/?x=entry:entry140702-085237 $ent = str_replace(".txt", "", explode("entry", $sub)); $URL = str_replace("/APP/findlast", "", BLOG_BASEURL); $URL .= "?x=entry:entry" . $ent[1]; $res .= "<a href=\"" . $URL . "\"> " . $subject[3] . "</a>\n"; // echo $res; continue; } } flock($fp, LOCK_UN); }else{ print('ファイルロックに失敗しました'); exit; } } $flag = fclose($fp); if ($flag){ // print('無事クローズしました'); }else{ print('クローズに失敗しました'); exit; } if ($j++ > 8) break; } return $res; } function order_by_desc($a, $b) { if ( strtotime($a[1]) > strtotime($b[1]) ) { return -1; } else if (strtotime($a[1]) < strtotime($b[1])) { return 1; } else{ return 0; } } ?>
include_once('findlast-onoff.php');
//$dirname = dirname(__FILE__);
//$dirname = str_replace("APP/findlast", "", $dirname);
//$dir = $dirname . "fp-content/content/";
$dir = ABS_PATH . 'fp-content/content/';
date_default_timezone_set('Asia/Tokyo');
上に示したこのプログラムの動作要素は、次の通りです。
- 内部時間を[Asia/Tokyo]としてセットしておく。
- [fp-content/content/]以下のディレクトリのファイルをリスト化する。
- それらのファイルをファイルの更新時間順にソートする。
- 最新のものから当該ファイルへのリンクを生成していく。
- リンク名については、記事ファイルのタイトル(Subject)を引っ張り出す。
- 上位8個にまで進んだら完了する。
それで、このプログラムを下の箇所に挿入しておきます。
/flatpress.world/fp-plugins/lastentries/plugin.lastentries.php
//FlatPress.info require ('APP/findlast/findlast.php'); $smarty->assign('findlast_file', findlast_file()); $widget = array(); $widget['subject'] = $subject; $widget['content'] = $string;
さてさて、こんな風に便利にファイルをアクセスできるようになりました。全体をスクロールしても常に画面の一番下に「最近に作成したファイル」と「最近に修正したファイル」が表示され、これをクリックすることで表示または編集ができるように改善されました。なお、この画面モードになっているのは記事を表示している状態のみで、編集画面自体や管理をする画面では表示はされません。
今回、カスタマイズしたのはこの画面の一番したに常に最近の「作成」または「編集」のファイル名が表示されるというものでした。