1

私は PHP を初めて使用するので、ディレクトリに含まれるファイルからメニューを作成する方法を教えてください。ファイルを追加すると、メニューに項目が自動的に追加されます。

ディレクトリ内のファイルは .htm ファイルで、命名規則は年と月をアンダースコアで区切ったものです。つまり、2013_6.htm (2013 年 6 月)

ファイルを読み取って、それらからメニューを作成できるようにしたいと思います。

次のように、ファイルの並べ替えられた配列を作成することができました (正常に動作します)。

$dir = "$cal_path";
$dh  = opendir($dir);
while (false !== ($filename = readdir($dh))) {
    if ($filename != "." && $filename != ".."){
    $files[] = $filename;
    }
}
sort($files);

このファイルの配列をメニュー項目リストに取得して、CSS でスタイルを設定できるようにするにはどうすればよいでしょうか。xxxx はファイル名の年、yy はファイル名の月です。

$cal_menu = 

<ul>
 <li><a href="$base_url/calendar_view?year=xxxx&month=yy">June 2013</a></li>
 <li>etc</li>
 <li>etc</li>
</ul>

月と対応する月の名前の配列を作成しました

$CalendarMonth = array("1"=>"January","2"=>"February","3"=>"March","4"=>"April","5"=>"May","6"=>"June","7"=>"July","8"=>"August","9"=>"September","10"=>"October","11"=>"November","12"=>"December");

問題を適切に説明できたことを願っています。よろしくお願いします。

4

5 に答える 5

1

このコードを試すことができます:

編集:その出力を変数に保存したいので。

rsort($files);
$cal_menu = '<ul>';

foreach($files as $file){ 
    preg_match('/(\d{4})_(\d.*).htm/i', $file, $date);
    $mont_name = $CalendarMonth[$date[2]];

    $cal_menu .= '<li><a href="$base_url/calendar_view?year='.$date[1].'&month='.$date[2].'">'.$mont_name.' '.$date[1].'</a></li>';
}
$cal_menu .= '</ul>';

このコードは、必要な形式ですべてのli項目の出力を設定します: ?year=xxxx&month=yy

ここで動作することを確認してください。

于 2013-05-16T18:19:10.803 に答える
0

この例を試してください。それはあなたにアイデアを与えるはずです。

于 2013-05-16T18:19:17.303 に答える
0

これを試して

foreach ($files as $file) {
// pathinfo will return an array containing
// dirname,basename,extension,filename then use extract
// to convert the array into variables
extract(pathinfo($file)); 
echo "<li><a href="$file">$filename</a></li>"
}
</ul>

pathinfo の詳細を読むhttp://php.net/manual/en/function.pathinfo.php 抽出の詳細を読むhttp://us2.php.net/manual/en/function.extract.php

于 2013-05-16T18:06:05.203 に答える
0
foreach ($files as $file) {
    preg_match('/^(\d{4})_(\d{1,2}}/', $file, $match); // Parse filename into YYYY_MM
    $year = $match[1];
    $month = $match[2];
    $monthname = $CalendarMonth[$month];
    // Interpolate these into HTML output
    echo "<ul>
          <li><a href='$base_url/calendar_view?year=$year&month=$month'>$monthname $year</a></li>
          <li>etc</li>
          </ul>\n";
}
于 2013-05-16T18:06:55.757 に答える
0

で各ファイル名からデータを抽出するループを使用しますpathinfo。既存のループ内でこれを行うことができますが、ここでは次のようになりforeachます。

echo '<ul>';

foreach($files as $filename) {
     $f_info = pathinfo($dir . '/' . $filename);
     $extension_length = strlen('.' . $f_info['extension']);

     $f_parts = substr($f_info['filename'], 0, -$extension_length);
     $year = $f_parts[0];
     $month = $f_parts[1];

     echo '<li><a href="' . $base_url . '/calendar_view?year=' . $year .
          '&month=' . $month . 'yy">' . $CalendarMonth[$month] . ' ' .
          $year . '</a></li>';
}

echo '</ul>';

を使用する前に、 が実際に に存在するarray_key_existsことを確認するためにを使用することをお勧めします。$month$CalendarMonth$CalendarMonth[$month]

于 2013-05-16T18:12:43.473 に答える