• User Attivo

    Ordinare elenco file per nome

    Ciao a tutti, sto utilizzando questa galleria molto carina ed utile in quanto stampa a video tutte le immagini che si sono caricate in una determinata cartella.
    Il problema è che però, le carica in maniera disordinata, anche modificando il nome del file via ftp e mi chiedevo se esiste una soluzione.
    Sapete come potrei fare?
    Il codice è
    [PHP]
    <?php

    $directory = 'agenzia-moda-milano-modelle-casting';

    $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="'.$title.'" target="_blank">'.$title.'</a>
        </div>';
        
        $i++;
    }
    

    }

    closedir($dir_handle);

    ?>

    [/PHP]

    Il sito del "plugin" è:

    demo.tutorialzine.com/2009/09/cool-jquery-gallery/demo .php

    Grazie mille a tutti.
    Ciao


  • User

    Devi ordinare l'elenco dei file in ordine alfabetico? Oppure vuoi dare un ordine personalizzato?


  • User Attivo

    Ciao Akeeron grazie inanzitutto per la risposta.
    A me per ora interessa dare un'ordine alfabetico alle immagini stampate ma per curiosità mi piacerebbe anche sapere come nel caso dargli un'ordine personalizzato...impara l'arte e mettila da parte 🙂


  • ModSenior

    Ciao,
    prova cosi:
    [php]
    <?php

    $directory = 'agenzia-moda-milano-modelle-casting';

    $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!");
    $array_file = array();
    while ($file = readdir($dir_handle))
    {
    if($file=='.' || $file == '..') continue;
    $array_file[] = $file;

    }
    closedir($dir_handle);

    sort($array_file);
    foreach($array_file AS $file)
    {
    $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="'.$title.'" target="_blank">'.$title.'</a>
        </div>';
        
        $i++;
    }
    

    }

    ?>
    [/php]


  • User Attivo

    Eau la madonna, perfetto, funziona alla grande! Grazie per la soluzion e per la risposta thdarkita. Se non è chiedere troppo, come funziona e cosa "dice" la parte aggiunta da te?
    Inoltre avevo provato ad inserire la stringa per sostituire i "-" del titolo a spazi vuoti ma non funziona...sapresti aiutarmi anche per quest'iltima cosa?
    [CODE]
    $title = str_replace("_"," ",$title);
    [CODE]

    Ciao grazie mille


  • ModSenior

    E' molto semplice:

    • Ciclando la cartella inserisce il nome del file in un array
    • Ordina l'array in ordine crescente
    • Cicla l'array per fare le tue operazioni

    Per quanto riguarda il title il codice è corretto, tranne che hai scritto l'underscore invece del trattino, ovviamente assicurati di sovrascrivere $title prima di fare l'echo della stessa.


  • User Attivo

    L'underscore, vero!
    E' molto semplice davvero. Mi piace capire un po'come funziona perchè una volta capito il meccanismo, poi la sintassi la si apprende e ci si può inventare qualcosina di bello e via via sempre più complicato.
    Io per ora vado forte solo con la funzione date, però,è già qualcosa! 🙂
    Grazie mille, ciao!


  • User Attivo

    A mio avviso c'è possibile fastidioso bug qui:

    @simo10piu said:

    [PHP]
    while ($file = readdir($dir_handle))
    [/PHP]

    Dovrebbe essere corretto così:
    [PHP]
    while (false !== ($file = readdir($dir_handle)) )
    [/PHP]

    Perché se nel corso del ciclo trovasse un file con nome 0 verrebbe interpretato come falso ed quindi verrebbe subito interrotto.
    Per approfondimenti rimando alla documentazione ufficiale ed al primo esempio in esso contenuto: php.net/manual/en/function.readdir.php

    Buon lavoro.


  • User Attivo

    Ciao mentelibera, grazie per la risposta, ho modificato il codice ed è tutto ok. Tu qua in pratica gli dici che è falso solo !== se il filesystem è vuoto? (...pardon per l'ignoranza)


  • User Attivo

    La funzione readdir() riporta false quando non ci sono più altri elementi.
    Fai attenzione che la cifra zero corrisponde a false...


  • User Attivo

    grande, ottima info grazie.


  • User

    Per stabilire un ordine personalizzato invece, l'unica secondo me è salvare tutti i nomi delle immagini su un database ( o anche un file, dipende dai casi ), così poi sarai sicuro che tutto apparirá esattamente secondo l'ordine stabilito! 😉


  • User Attivo

    @Akeeron said:

    Per stabilire un ordine personalizzato invece, l'unica secondo me è salvare tutti i nomi delle immagini su un database ( o anche un file, dipende dai casi ), così poi sarai sicuro che tutto apparirá esattamente secondo l'ordine stabilito! 😉

    Sì, vero, magari basta anche un txt.....ho fatto miracoli con dei semplici txt 😄

    Mmmmm ma credo che per ora mi andrà benissimo l'intramontabile ordine alfabetico 😉

    Grazie mille a tutti!