メニュー作成

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ステップを行います。

  1. ファイルを開き、変数に格納する fopenfread
  2. 正規表現を利用してタイトルを抽出する 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.