2012-02-14 6 views
0

Je ne suis pas familier avec PHP, donc j'apprends toujours les bases, mais j'essaie de créer une galerie d'images. Après d'innombrables recherches sur Google plus tard, j'ai trouvé un script PHP qui fait ce que je veux qu'il fasse, et après avoir regardé le code et le manipuler légèrement, il fonctionnait parfaitement avec mon site; sauf que les images n'étaient pas dans l'ordre alphabétique.Trier par ordre alphabétique avec opendir()

Ce code

$max_width = 100; 
$max_height = 100; 
$imagedir = 'gifs/animals/'; //Remember trailing slash 


function getPictureType($ext) { 
    if (preg_match('/jpg|jpeg/i', $ext)) { 
     return 'jpg'; 
    } else if (preg_match('/png/i', $ext)) { 
     return 'png'; 
    } else if (preg_match('/gif/i', $ext)) { 
     return 'gif'; 
    } else { 
     return ''; 
    } 
} 

function getPictures() { 
    global $max_width, $max_height, $imagedir; 
    if ($handle = opendir($imagedir)) { 
     $lightbox = rand(); 
     echo '<ul id="pictures">'; 
     while (($file = readdir($handle)) !== false) { 
      if (!is_dir($file)) { 
       $split = explode($imagedir, $file); 
       $ext = $split[count($split) - 1]; 
       if (($type = getPictureType($ext)) == '') { 
        continue; 
       } 

       $name = substr($file, 0, -4); 
       $title = str_replace("_"," ",$name); 
       echo '<li><a href="'.$name.'">'; 
       echo '<img src="thumbs/'.$file.'" class="pictures" alt="'.$file.'" />'; 
       echo '</a>'; 
       echo ''.$title.''; 
       echo '</li>'; 
      } 
     } 
     echo '</ul>'; 

    } 
} 

Je l'ai utilisé la fonction scandir() qui fonctionne dans les trier par ordre alphabétique, mais je suis resté avec un tableau. J'ai ensuite utilisé la fonction implode pour rejoindre le tableau ensemble, mais après cela, j'étais coincé avec quoi faire.

Toute aide serait grandement appréciée!

Cheers.

Répondre

1

Quel est le problème avec les tableaux? Aussi, il serait préférable que vous utilisiez pathinfo pour obtenir le nom de fichier et l'extension.

$max_width = 100; 
$max_height = 100; 
$imagedir = 'gifs/animals/'; //Remember trailing slash 


function getPictureType($ext) { 
    if (preg_match('/jpg|jpeg/i', $ext)) { 
     return 'jpg'; 
    } else if (preg_match('/png/i', $ext)) { 
     return 'png'; 
    } else if (preg_match('/gif/i', $ext)) { 
     return 'gif'; 
    } else { 
     return ''; 
    } 
} 

function getPictures() { 
    global $max_width, $max_height, $imagedir; 
    if ($files = scandir($imagedir)) { 
     $lightbox = rand(); 
     echo '<ul id="pictures">'; 
     foreach ($files as $file) { 
      $full_path = $imagedir.'/'.$file; 
      if (!is_dir($file)) { 
       $finfo = pathinfo($full_path); 
       $ext = $finfo['extension']; 
       if (($type = getPictureType($ext)) == '') { 
        continue; 
       } 

       $name = $finfo['filename']; 
       $title = str_replace("_"," ",$name); 
       echo '<li><a href="'.$name.'">'; 
       echo '<img src="thumbs/'.$file.'" class="pictures" alt="'.$file.'" />'; 
       echo '</a>'; 
       echo ''.$title.''; 
       echo '</li>'; 
      } 
     } 
     echo '</ul>'; 

    } 
} 
+0

Merci, cela a fonctionné. – Polar

2

Vous pouvez utiliser glob() pour obtenir les fichiers d'un répertoire, triés par ordre alphabétique

$files = glob('gifs/animals/*.{gif,jpg,png}', GLOB_BRACE); 

itérer sur vos fichiers, utilisez une boucle foreach:

foreach($files as $file){ 
    $title = str_replace("_"," ",$file); 
    echo '<li><a href="'.$name.'">'; 
    echo '<img src="thumbs/'.basename($file).'" class="pictures" alt="'.basename($file).'" />'; 
    echo '</a>'; 
    echo ''.$title.''; 
    echo '</li>'; 
} 
+0

Cela fonctionne avec le tri alphabétique, et j'apprécie beaucoup votre réponse. Cependant, comme $ file sort maintenant /gifs/animals/image.gif, je suis incapable de faire le lien correct vers les pouces qui se trouvent à gifs/animals/thumbs – Polar

+0

@Polar: Utilisez 'basename()' pour supprimer le chemin, J'ai mis à jour ma réponse en conséquence. – konsolenfreddy

Questions connexes