Зацените плиз кусок фотогалереи, отвечающий за чтение и вывод. PHP: <?php include 'mysql.php'; $folder = 'gallery'; $max = 5; if (is_dir($folder)) { if ($dir = opendir($folder)) { while ($file = readdir($dir)) { if ($file !="." && $file !="..") { $images[] = $file; } } closedir($dir); } else echo 'Cant open directory'; } else echo 'This is not directory'; $amount = count($images); $pages = ceil($amount/$max); $p = $_GET['page']; if (!$p OR $p=='') { $nmin = 0; $nmax = $max - 1; } else { $nmin = ($p * $max) - $max; $nmax = ($max * $p) - 1; } ?> <h1>FotoGallery</h1> <?php # Вывод фотографий for ($i = $nmin; $i <= $nmax; $i++) { if ($images[$i]) { echo '<a href="'.$folder.'/'.$images[$i].'">'; echo '<img style="border:0px blue dashed; width:160px; height:120px;" src="'.$folder.'/'.$images[$i].'"/>'; echo '</a> '; } } # Навигация echo "</br></br>"; for ($n=1; $n<=$pages; $n++) { if ($p != $n) {echo '<a href="index.php?page='.$n.'">['.$n.']</a>';} elseif ($p !== $n) {echo '['.$n.']';} } Прошу советов. Есть ли недостатки(проверку существования $_GET['page'] можно не упоминать)), может стоит применить другой подход? Может пару советов по оптимизации? Заранее спасибо.
Костян Попроси знакомых, кто знает английский, поправить ошибки у тебя на сайте. Ей богу, грамматика просто никакая. ПыСы: без обид.
Костян, эт понятно. А сам метод чтения, вывода, уменьшения размера картинок? Может будет быстрее использовать какие-нибудь функции GDLib?
Подскажите как осуществить вывод без $nmin и $nmax, а то получается что в цикле PHP: # for ($i = $nmin; $i <= $nmax; $i++) # { # if ($images[$i]) выводятся ошибки, если на странице меньше пяти фоток. Как сделать чтобы итераций было столько же, сколько фоток?
Simpliest, нет конечно, просто изначально задача состояла в том, чтобы убить нотайсы, появляющиеся из-за лишних итераций. Вообще наверное стОит привязать кол-во итераций к кол-ву изображений, чтоб красивее было)
Запомни простую вещь. Надо не убивать нотайсы. А устранять причину их появления. Чтобы потом не было мучительно больно за бесцельно прожитую жизнь и написанный код.
Уже устал искать!!! Насколько я понимаю етот скрипт выводит все файлы из каталога, тоесть если в нем лежат еще и текстовые файлы и другие скрипты то он их выведет, но чето я не могу понять как к примеру вывести только картинки GIF или JPG... Мой скрипт похож на етот... Как правильно сформировать условие отбора(маски) скажем по GIF-файлам... Зарание спасибо.
а вот если массив с именами изображений асоциированный, тобиш ключ - имя изображения, а значение - дата создания изображения, как в етом случае организовать постраничный вывод? Подсчитать количество страниц не проблема, а вот вывести чето не получается... типа так пробую: PHP: ... while ($file = readdir($dir)) { if ($file !="." && $file !="..") { $im[$file] =filemtime( $dir."/".$file ); } } closedir($dir); } else echo 'Cant open directory'; } else echo 'This is not directory'; $amount = count($im); $pages = ceil($amount/$max); $p = $_GET['page']; if (!$p OR $p=='') { $nmin = 0; $nmax = $max - 1; } else { $nmin = ($p * $max) - $max; $nmax = ($max * $p) - 1; } ?> <h1>FotoGallery</h1> <?php # Вывод фотографий for ($i = $nmin; $i <= $nmax; $i++) { .... а как продолжить? Пробовал по разному, скрипт ошибку не выдает, но выводит то дублированные файлы (все) и все на каждой из страниц, то выдает все сразу на первой странице, то все файлы на каждой странице... Нид хелп а то запарился..
Romik_Maden Вы не можете отследить какие изображения уже показыались. Нет какого-нибудь индекса для картинок, ага. Можете как вариант переименовать картинки в 1.jpg, 2.jpg… и выводить основываясь на этих номерах (первые 20 на первой, следующие на второй и т.д. и т.п.) Или пернести информацию в бд и сделать классический пагинатор Или при обновлении картинок создавать какой-нибудь кэш-файлик, содержащий массив PHP: <?php $images = array ( '1' => array('date' => 'дата', 'name' => 'имя'), '2' => array('date' => 'дата2', 'name' => 'имя2'), ); выводить на основе индексов этого массива, заодно и от постоянного сканирования папки избавитесь. По-всякому, вобщем, сделать можно. Было бы желание.
переименовывать ето не вариант...нужны уникальные названия.... а что если при создании асоциированого создать так же простой массив... тобиш: PHP: ... $img=array(); while ($file = readdir($dir)) { if ($file !="." && $file !="..") { [u] $im[$file] =filemtime( $dir."/".$file );[/u] [b]$img[]=$file;[/b] .... и уже по нему выводить картинки? Илиже както попробовать выводить отсчитывая даты создания, тоесь за день - 1стр, 2дня - 2стр? Нид хелп!!!!! ЗЫПотребность создания асоциированого массива тогда когда нужно выводить картинки сначала новые а затем старые, не парясь с нумерацией, вот.