0

ギャラリーに独自のカレンダーを作成しようとしていますが、希望どおりに機能させることができません。SQL クエリを追加して、写真がいつ撮影されたかを取得し、日付をリンクできるようにしました。ここでは、すべての写真の正しい日付をリンクすることは問題ありません。これは、毎月の日をループする方法です。

これが私が今使っているコードです:

echo '<table width="100%" cellpadding="0" cellspacing="0">';

$months = Array(1 => 'Januari',
                2 => 'Februari',
                3 => 'Mars',
                4 => 'April',
                5 => 'Maj',
                6 => 'Juni',
                7 => 'Juli',
                8 => 'Augusti',
                9 => 'September',
                10 => 'Oktober',
                11 => 'November',
                12 => 'December');

foreach($months AS $month_n => $month) {

    # DATABAS: photos (hämta)
    $get_photosdate = "SELECT photo_exif_taken FROM photos";


    echo '<tr>';
        echo '<td align="right" class="calendar-month" width="50">';
            echo '<a href="'.url('sortby/date/2012/'.($month_n < 10 ? '0'.$month_n : $month_n)).'" title="Sortera fotografierna efter den här månaden">';
                echo '<b>'.$month.'</b>';
            echo '</a>';
        echo '</td>';

        echo '<td align="left" class="calendar-day">';
            foreach($sql->query($get_photosdate) AS $date) {
                for($i = 1; $i < 32; $i++) {
                    if(date('Y-m-d', strtotime($date['photo_exif_taken'])) == '2012-'.$month_n.'-'.$i) {
                        echo '<a href="'.url('sortby/date/2012/'.($month_n < 10 ? '0'.$month_n : $month_n).'/'.($i < 10 ? '0'.$i : $i)).'" class="calendar-link" title="Sortera fotografierna efter den här dagen">';
                            echo $i < 10 ? '<span style="color: #a16e74;">0</span>'.$i : $i;
                        echo '</a>';
                    } else {
                        echo '<span style="padding: 2px 3px;">';
                            echo $i < 10 ? '<span style="color: #a2a1a1;">0</span>'.$i : $i;
                        echo '</span>';
                    }

                    if($i == 11 OR $i == 22) {
                        echo '<br>';
                    }
                }
            }
        echo '</td>';
    echo '</tr>';

}

echo '</table>';

次のように日を出力する必要があります01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16。しかし、月が変わるまでに、印刷01 02 03 04 05 06 ... 25 26 27 28 29 30 31 01 02 03 04 05 06などを50回ほど行います。

どうしたの?

前もって感謝します。

4

2 に答える 2

3

最も外側のforeachは月をループし、2番目のforeachはクエリの結果をループし、最も内側のforeachは1から31までループします。

したがって、クエリで5つの結果が得られた場合は、ループします。

12(月)* 5(結果の数)*31回。

あなたはおそらく、あなたが望むものを段階的に考えて、日付を処理する方法を再構築する必要があります。例:カレンダーに画像を表示する場合は、カレンダーを多次元配列として作成し、画像を正しいインデックスに配置できます。

編集:実際のカレンダーを作成する場合は、php組み込み機能の使用も検討する必要があります。これにより、1か月の正しい日数を取得できます。mktime(http://php.net/manual/de/function.mktime.php)またはphp DateTime(http://php.net/manual/de/class.datetime.php)オブジェクトはおそらくあなたに役立つでしょう。

于 2012-12-11T16:24:32.030 に答える
0

写真配列の要素ごとに日リストを繰り返しています。データベースに50枚ほどの写真があり、それらが余分なループを引き起こしていると思います。

写真の数に基づいて機能しないように、クエリループを作り直します。

于 2012-12-11T16:24:02.713 に答える