Мне нужно отсортировать скрипт галереи php jquery по алфавиту
Ничего не знаю о php, но у меня есть этот скрипт, который читает папку и отображает галерею миниатюр, проблема в том, что он не отображается в алфавитном порядке. Я искал в сети и видел, что это делает, но не знаю, с чего начать.
вот сценарий
$sitename = $row_wigsites['id'];
$directory = 'sites/'.$sitename.'/pans';
$allowed_types=array('jpg','jpeg','gif','png');
$file_parts=array();
$ext='';
$title='';
$i=0;
$dir_handle = @opendir($directory) or die("There is an error with your image directory!");
while ($file = readdir($dir_handle))
{
if($file=='.' || $file == '..') continue;
$file_parts = explode('.',$file);
$ext = strtolower(array_pop($file_parts));
$title = implode('.',$file_parts);
$title = htmlspecialchars($title);
$nomargin='';
if(in_array($ext,$allowed_types))
{
if(($i+1)%4==0) $nomargin='nomargin';
echo '
<div class="pic '.$nomargin.'" style="background:url('.$directory.'/'.$file.') no-repeat 50% 50%;">
<a href="'.$directory.'/'.$file.'" title="Panoramic Stills taken at '.$title.'°" rel="pan1" target="_blank">'.$title.'</a>
</div>';
$i++;
}
}
closedir($dir_handle);
4 ответа
Попробуйте использовать glob вместо opendir, что-то вроде:
$i=0;
foreach (glob($directory.'/*.{jpg,jpeg,png,gif}', GLOB_BRACE) as $file){
if($file=='.' || $file == '..') continue;
$file_parts = explode('.',$file);
$ext = strtolower(array_pop($file_parts));
$title = basename($file);
$title = htmlspecialchars($title);
$nomargin='';
if(($i+1)%4==0) $nomargin='nomargin';
echo '
<div class="pic '.$nomargin.'" style="background:url('.$file.') no-repeat 50% 50%;">
<a href="'.$file.'" title="Panoramic Stills taken at '.$title.'°" rel="pan1" target="_blank">'.$title.'</a>
</div>';
$i++;
}
Glob должен вернуть отсортированный список файлов.
РЕДАКТИРОВАТЬ: Спасибо Дуг Нейнер за чаевые;)
Вероятно, проще всего поместить значения из файлов в массив, а затем отсортировать массив перед выводом его на страницу.
Добавить строку сортировки, как указано ниже
$file_parts = explode('.',$file);
sort($file_parts) or die("sorting failed");
$ext = strtolower(array_pop($file_parts));
@Habicht Код работает нормально, но правильные миниатюры больше не работают, так как удалена ссылка на каталог миниатюр:
Итак, я попытался так:
$i=0;
foreach (glob($directory.'/*.{jpg,jpeg,png,gif}', GLOB_BRACE) as $file)
{
foreach (glob($thumbs_directory.'/*.{jpg,jpeg,png,gif}', GLOB_BRACE) as $file2)
{
if($file=='.' || $file == '..') continue;
$file_parts = explode('.',$file);
$ext = strtolower(array_pop($file_parts));
$title = basename($file);
$title = htmlspecialchars($title);
$title = str_replace("_"," ",$title);
$nomargin='';
if(($i+1)%4==0) $nomargin='nomargin';
echo '<div class="pic '.$nomargin.'" style="background:url('.$file2.') no-repeat 50% 50%;">
<a href="'.$file.'" title="'.$title.'" target="_blank">'.$title.'</a>
</div>';
$i++;
}
}
Эскизы работают нормально, но эталонное изображение всегда одинаково для любого эскиза - первого файла изображения в каталоге $. Я уверен, что есть другой способ объединить эти операторы foreach, чтобы исправить все сразу.