メニュー作成
HTMLリンクとタイトルの自動作成
メニュー自動作成で、リンク切れやミスを防ぎましょう。
メニュー自動作成のメリット
WEB作成では、メニュー作成は意外と手間がかかります。 ページ数が増えると、手作業では大変ですし、間違いを起こしかねません。 メニュー作成を自動化することで、退屈な作業やミスの可能性を回避しましょう。
ここで紹介するスクリプトは、特定のディレクトリ内にあるファイルの一覧を取得し、各ファイルのタイトル(<title>タグで囲まれた部分)を取り出し、リンクを作成するように設計されています。
ディレクトリの内容を表示する関数readdir
ディレクトリの内容を表示するには、関数readdir を使用します。 ディレクトリ内のファイルを、ファイルシステムに格納されている順に返します。
while (false !== ($filename = readdir($dirdata))) { if (substr($filename,0,1) != ".") { print $filename; } }
whileの条件判定は、型も含めて false と一致しない場合にします。 そうしないと、0 のようなファイルまたはディレクトリがある場合、そこでループが終了してしまいます。
また、関数readdir は、.(現在のディレクトリを示す)や..(上位ディレクトリを示す)、また.htaccess のような . で始まるファイルも返します。 これらを表示しないようにするために、2行目のif文で、. で始まるものを除外しています。
自身へのハイパーリンクを張らない
スクリプトを使ってメニューを作成すると、自分自身へのハイパーリンクは張らない、というように、ファイル毎に異なるメニューを自動作成することができます。
if ($filename == $_SERVER['SCRIPT_NAME']) {
スクリプト名は$_SERVER['SCRIPT_NAME']で取得できます。 include等で呼び出す場合、呼び出し元のファイル名になります。 ファイル名をチェックすることで、同じディレクトリのファイルへはハイパーリンクを張り、自分自身の場合はハイパーリンク作成をスキップすることができます。
ファイルからタイトルを抽出する
ファイルからタイトルを抽出するには、以下の2ステップを行います。
- ファイルを開き、変数に格納する fopen、fread
- 正規表現を利用してタイトルを抽出する eregi
fopen 関数でファイルを開き、fread 関数でファイルの中身を変数に格納します。 fread は読み込む量をバイト数で指定します。 HTML ファイルの始めのほうにある <title> を取り出したいので、ここでは 1000 にしています。 数字を大きくし過ぎるとサーバーに負荷がかかるので注意しましょう。
$fp = fopen($file,"r"); $ref_str = fread($fp, 1000);
次に、正規表現を利用して、ページタイトル(<title>タグで囲まれた部分)を抽出します。 関数 eregi は正規表現を用いて検索するための関数です。 詳細は 正規表現 を参照してください。 ソースは以下のようになります。
if (eregi("<title>(.*)</title>", $ref_str, $out)) { $title = strip_tags ($out[1]); }
サンプルは、makemenu.php.txt をダウンロードしてください。 ディレクトリの設定などはソースのコメントを参考にしてください。
Copyright (C) 2003-2018. PHP で WEB 作成 All rights reserved.