Ben alfabetik php jquery galerisi komut dosyası sıralamak gerekir

4 Cevap php

php hakkında hiçbir şey bilmiyor, ama ben bir klasör okur ve bir küçük resim galerisi görüntüleyen bu script var, sorun alfabetik dosent ekran. Net arandı ve bu tür yapar ancak herhangi bir yardım çok takdir başlamak için hiçbir fikrim yok gördük.

heres komut

$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 Cevap

glob yerine opendir arasında, gibi bir şey kullanmayı deneyin:

$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 dosyaların sıralı bir listesini dönmelidir.

EDIT: Doug Neiner sayesinde bir ipucu için ;)

aşağıda verilen sıralama satırı ekleyin

$file_parts = explode('.',$file);
sort($file_parts) or die("sorting failed");
$ext = strtolower(array_pop($file_parts));

Bu bir diziye dosyalarından değerleri koymak için muhtemelen en kolay, daha sonra sayfaya çıktısı önce diziyi sıralamak.

@ Habicht Kod çalışıyor, ama minik dizin referansı kaldırılır beri doğru minik artık çalışmıyor:

Yani bu gibi çalıştı:

$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++;
  }
}

Minyatür çalışıyor, ancak referans görüntü herhangi bir küçük resme için her zaman aynıdır - $ dizininde ilk görüntü dosyası. Ben bir kez tüm düzeltmek için bu foreach ifadeleri birleştirmek için başka bir yolu yoktur eminim.