За последние 24 часа нас посетили 18135 программистов и 1651 робот. Сейчас ищут 1665 программистов ...

Фотогалерея. Вывод изображений

Тема в разделе "Решения, алгоритмы", создана пользователем amen, 12 дек 2009.

  1. amen

    amen Активный пользователь

    С нами с:
    18 сен 2009
    Сообщения:
    298
    Симпатии:
    0
    Адрес:
    Узбекистан
    Зацените плиз кусок фотогалереи, отвечающий за чтение и вывод.

    PHP:
    1. <?php
    2. include 'mysql.php';
    3. $folder = 'gallery';
    4. $max = 5;
    5.  
    6. if (is_dir($folder))
    7. {
    8.     if ($dir = opendir($folder))
    9.     {
    10.         while ($file = readdir($dir))
    11.         {
    12.             if ($file !="." && $file !="..")
    13.             {
    14.                 $images[] = $file;
    15.             }
    16.         }
    17.         closedir($dir);
    18.     }
    19.     else echo 'Cant open directory';
    20. }
    21. else echo 'This is not directory';
    22.  
    23.    
    24.    
    25.    
    26. $amount = count($images);
    27. $pages = ceil($amount/$max);
    28.  
    29. $p = $_GET['page'];
    30.  
    31. if (!$p OR $p=='')
    32. {
    33.     $nmin = 0;
    34.     $nmax = $max - 1;
    35. }
    36. else
    37. {
    38.     $nmin = ($p * $max) - $max;
    39.     $nmax = ($max * $p) - 1;
    40. }
    41. ?>
    42. <h1>FotoGallery</h1>
    43. <?php
    44.  
    45. # Вывод фотографий
    46. for ($i = $nmin; $i <= $nmax; $i++)
    47. {
    48.     if ($images[$i])
    49.     {
    50.         echo '<a href="'.$folder.'/'.$images[$i].'">';
    51.         echo '<img style="border:0px blue dashed; width:160px; height:120px;"
    52.                   src="'.$folder.'/'.$images[$i].'"/>';
    53.         echo '</a>&nbsp;&nbsp;';
    54.     }
    55. }
    56.  
    57. # Навигация
    58. echo "</br></br>";
    59. for ($n=1; $n<=$pages; $n++)
    60. {
    61.     if ($p != $n)
    62.         {echo '<a href="index.php?page='.$n.'">['.$n.']</a>';}
    63.     elseif ($p !== $n)
    64.         {echo '['.$n.']';}
    65. }
    Прошу советов. Есть ли недостатки(проверку существования $_GET['page'] можно не упоминать)), может стоит применить другой подход? Может пару советов по оптимизации?

    Заранее спасибо.
     
  2. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
  3. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Костян
    Попроси знакомых, кто знает английский, поправить ошибки у тебя на сайте.
    Ей богу, грамматика просто никакая.
    ПыСы: без обид.
     
  4. amen

    amen Активный пользователь

    С нами с:
    18 сен 2009
    Сообщения:
    298
    Симпатии:
    0
    Адрес:
    Узбекистан
    Костян, эт понятно. А сам метод чтения, вывода, уменьшения размера картинок? Может будет быстрее использовать какие-нибудь функции GDLib?
     
  5. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    Apple
    Знаю, есть фигня, только вот знакомых нет )). Буду рад помощи!!!
     
  6. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
  7. amen

    amen Активный пользователь

    С нами с:
    18 сен 2009
    Сообщения:
    298
    Симпатии:
    0
    Адрес:
    Узбекистан
    Подскажите как осуществить вывод без $nmin и $nmax, а то получается что в цикле
    PHP:
    1. #  for ($i = $nmin; $i <= $nmax; $i++)
    2. #  {
    3. #      if ($images[$i])
    выводятся ошибки, если на странице меньше пяти фоток. Как сделать чтобы итераций было столько же, сколько фоток?
     
  8. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Посчитать количество фото?
    или
    Использовать foreach()?
     
  9. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    это не обязательно
    amen
    почитай про scandir()
     
  10. amen

    amen Активный пользователь

    С нами с:
    18 сен 2009
    Сообщения:
    298
    Симпатии:
    0
    Адрес:
    Узбекистан
    Хм, оказалось проще:

    PHP:
    1.  
    2. <?
    3. if (isset($images[$i]))
     
  11. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Ты считаешь что это
    Влияет на число итераций?
     
  12. amen

    amen Активный пользователь

    С нами с:
    18 сен 2009
    Сообщения:
    298
    Симпатии:
    0
    Адрес:
    Узбекистан
    Simpliest, нет конечно, просто изначально задача состояла в том, чтобы убить нотайсы, появляющиеся из-за лишних итераций.
    Вообще наверное стОит привязать кол-во итераций к кол-ву изображений, чтоб красивее было)
     
  13. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Запомни простую вещь. Надо не убивать нотайсы. А устранять причину их появления.

    Чтобы потом не было мучительно больно за бесцельно прожитую жизнь и написанный код.
     
  14. Romik_Maden

    Romik_Maden Активный пользователь

    С нами с:
    31 янв 2010
    Сообщения:
    25
    Симпатии:
    0
    Адрес:
    Украина, Львов
    Уже устал искать!!!
    Насколько я понимаю етот скрипт выводит все файлы из каталога, тоесть если в нем лежат еще и текстовые файлы и другие скрипты то он их выведет, но
    чето я не могу понять как к примеру вывести только картинки GIF или JPG...
    Мой скрипт похож на етот...
    Как правильно сформировать условие отбора(маски) скажем по GIF-файлам...
    Зарание спасибо.
     
  15. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
    Костян
    что у тебя все время пишет "не верный код защиты" при комментировании.
     
  16. Romik_Maden

    Romik_Maden Активный пользователь

    С нами с:
    31 янв 2010
    Сообщения:
    25
    Симпатии:
    0
    Адрес:
    Украина, Львов
    а вот если массив с именами изображений асоциированный, тобиш ключ - имя изображения, а значение - дата создания изображения, как в етом случае организовать постраничный вывод?
    Подсчитать количество страниц не проблема, а вот вывести чето не получается...

    типа так пробую:
    PHP:
    1.  
    2. ...
    3. while ($file = readdir($dir))
    4.          {
    5.              if ($file !="." && $file !="..")
    6.              {
    7.                  $im[$file] =filemtime( $dir."/".$file );
    8.              }
    9.          }
    10.          closedir($dir);
    11.      }
    12.      else echo 'Cant open directory';
    13.  }
    14.  else echo 'This is not directory';
    15.  
    16.      
    17.      
    18.      
    19.  $amount = count($im);
    20.  $pages = ceil($amount/$max);
    21.  
    22.  $p = $_GET['page'];
    23.  
    24.  if (!$p OR $p=='')
    25.  {
    26.      $nmin = 0;
    27.      $nmax = $max - 1;
    28.  }
    29.  else
    30.  {
    31.      $nmin = ($p * $max) - $max;
    32.      $nmax = ($max * $p) - 1;
    33.  }
    34.  ?>
    35.  <h1>FotoGallery</h1>
    36.  <?php
    37.  
    38.  # Вывод фотографий
    39. for ($i = $nmin; $i <= $nmax; $i++)
    40.  {
    41. ....
    42.  
    а как продолжить?
    Пробовал по разному, скрипт ошибку не выдает, но выводит то дублированные файлы (все) и все на каждой из страниц, то выдает все сразу на первой странице, то все файлы на каждой странице...

    Нид хелп а то запарился..
     
  17. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    Romik_Maden
    Вы не можете отследить какие изображения уже показыались. Нет какого-нибудь индекса для картинок, ага.
    Можете как вариант переименовать картинки в 1.jpg, 2.jpg… и выводить основываясь на этих номерах (первые 20 на первой, следующие на второй и т.д. и т.п.)
    Или пернести информацию в бд и сделать классический пагинатор
    Или при обновлении картинок создавать какой-нибудь кэш-файлик, содержащий массив
    PHP:
    1. <?php
    2. $images = array (
    3.             '1' => array('date' => 'дата', 'name' => 'имя'),
    4.             '2' => array('date' => 'дата2', 'name' => 'имя2'),
    5.            );
    6.  
    выводить на основе индексов этого массива, заодно и от постоянного сканирования папки избавитесь.

    По-всякому, вобщем, сделать можно. Было бы желание.
     
  18. Romik_Maden

    Romik_Maden Активный пользователь

    С нами с:
    31 янв 2010
    Сообщения:
    25
    Симпатии:
    0
    Адрес:
    Украина, Львов
    переименовывать ето не вариант...нужны уникальные названия....
    а что если при создании асоциированого создать так же простой массив...
    тобиш:
    PHP:
    1.  
    2. ...
    3. $img=array();
    4.  while ($file = readdir($dir))
    5.          {
    6.              if ($file !="." && $file !="..")
    7.              {
    8.                 [u] $im[$file] =filemtime( $dir."/".$file );[/u]
    9.                  [b]$img[]=$file;[/b]
    10. ....
    11.  
    и уже по нему выводить картинки?
    Илиже както попробовать выводить отсчитывая даты создания, тоесь за день - 1стр, 2дня - 2стр?

    Нид хелп!!!!!

    ЗЫПотребность создания асоциированого массива тогда когда нужно выводить картинки сначала новые а затем старые, не парясь с нумерацией, вот.
     
  19. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    как угодно, мозгоправством тут другие занимаются.