Movable TypeなどCMS、ブログシステムを使っていると、記事の更新に集中できますね。
でも、中にはCMSを使っていない場合、手動でやんなきゃいけない作業が結構めんどうくさかったりします。
たとえば、コンテンツのリンク一覧からメニュー表示部分を作るような場合。
今日、あるディレクトリのリンク一覧を作ろうとして、面倒くさかったので、ディレクトリからファイルを拾ってリンク一覧メニューを作るようにしてみました。
マピー・ラボに、公開していた勉強中のAPIプログラム。
このディレクトリ構造は、”http://www.mapee.jp/labo/●●/index.php”、となっていてlaboディレクトリの中に、さらにディレクトリが入っている構造です。
PHPで、laboディレクトリ直下の「●●/index.php」を探索して、「index.php」が存在するディレクトリのみリンクを表示するスクリプトです。
探索したファイルからは、「<title>hogehoge</title>」のhogehoge部分も抜き取って、リンク表示用の文字にする。
<?php
$dir = dir('.');
while (($entry = $dir->read()) !== FALSE) {
if ($entry == "." || $entry == "..") { continue; }
// index.phpファイルを取得
$file = @file_get_contents($entry . "/index.php");
if (!$file) { continue; }
// titleを取得
$match = preg_match('/<title>(.*?)<\/title>/i', $file, $matches);
// リンク表示
echo '<div class="style6"><a href="' . htmlentities($entry, ENT_QUOTES, "UTF-8") . '/">' . htmlentities($matches[1], ENT_QUOTES, "UTF-8") . "</a></div>";
}
?>
短いソースですが、ディレクトリ(●●/index.php)をいくつ作っても、メニューを自動表示してくれるので、これで楽になりました。
if ($entry == "." || $entry == "..") { continue; }
で、自分自身のディレクトリと親ディレクトリは飛ばす。
file_get_contents に、@で制御するのは、あんま良くない使い方だと、どっかで読んだような気がする・・・が、使っちゃいます。
リンク表示部分は、念のためにhtmlentitiesでエスケープ。
ディレクトリやファイルが入り混じってたり、ディープな階層まで探索したい場合でも、応用利かせれば、なんとかなると思います。
再帰とか使う場合は、無限ループに注意ですね。
■この記事のトラックバックURL:
http://www.mapee.jp/mpe334/mt-tb.cgi/441