Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2003
    Messaggi
    297

    problema paginazione con glob

    Ciao Ragazzi,
    Sto sviluppando un sito di un'illustratore: le immagini vengono pescate da una semplice cartella tramite glob e ordinate in un elenco <ul>. Mi serviva uno script per la suddivisione in pagine, purtroppo col php sono un principiante e in rete ho trovato questo script che ho adattato alle mie esigente e all'inizio sembrava funzionare:

    Codice PHP:
    <ul>
    <?php
        $path 
    "lavori/illustrazioni/2011/preview/";

    $lista glob("$path*.jpg");  
     
    $numperpagina=16;  
    if (isset(
    $_GET['pagina']))  
        
    $pagina=$_GET['pagina'];  
    else  
        
    $pagina=1;  
    $inizio=($pagina-1)*$numperpagina;  
    $fine=$inizio+$numperpagina;  
    if (
    $fine>count($lista))  
        
    $fine=count($lista);  

    $i 0
    foreach (
    $lista as $v

       if (
    $i >= $fine
          break; 
       if (
    $i >= $inizio
            
      
    /* Questo mi serve per illustrare il titolo correttamente con Lightbox e caricare le immagini grandi nella cartella main */
            
    $title substr($v37, -4);  
            
    $pre 'preview'
            
    $main 'main'
            
            
    $src str_replace($pre$main$v);     
          
          echo 
    '[*][url="' .$src'"][img]' .$v '[/img][/url]';       
          
    $i++; 

    ?>[/list]

    <?php
    echo "<ul id='prevnext'>";  
    if (
    $pagina!=1)  
        echo 
    "<li class=\"prev\"><a href=\"?pagina=".($pagina-1)."\" title=\"Vai alla pagina precedente\">back</a>";  
    if (
    $inizio+$numperpagina<count($lista))  
        echo 
    "<li class=\"next\"><a href=\"?pagina=".($pagina+1)."\" title=\"Vai alla pagina successiva\">next</a>";  

    echo 
    "[/list]"
    ?>
    Purtroppo se nella prima pagina visualizza i 16 'record' come desiderato, alla seconda ne aggiunge altri 16 lasciando i primi, quindi 32 elementi per pagina, e così via. Dove sto sbagliando?

  2. #2
    Utente di HTML.it L'avatar di garakkio
    Registrato dal
    Dec 2011
    residenza
    Roma
    Messaggi
    480
    Prova con il Pager di PEAR, sicuramente non ha questi problemi: http://pear.php.net/package/Pager

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2003
    Messaggi
    297
    Originariamente inviato da garakkio
    Prova con il Pager di PEAR, sicuramente non ha questi problemi: http://pear.php.net/package/Pager
    Ti ringrazio ma penso il problema sia risolvibile senza stravolgere il codice o installare pager, non credi? Si parla di uno script relativamente semplice, almeno per chi ne sa ben più di me!

  4. #4
    Utente di HTML.it L'avatar di garakkio
    Registrato dal
    Dec 2011
    residenza
    Roma
    Messaggi
    480
    La paginazione non è una questione poi così semplice.
    Se qualcuno l'ha risolta prima di te e ti mette a disposizione un codice già testato e funzionante, che puoi prendere e applicare dovunque, perché non approfittarne?

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2003
    Messaggi
    297
    Originariamente inviato da garakkio
    La paginazione non è una questione poi così semplice.
    Se qualcuno l'ha risolta prima di te e ti mette a disposizione un codice già testato e funzionante, che puoi prendere e applicare dovunque, perché non approfittarne?
    Hai ragione Garakkio, e ti ringrazio per la dritta. Ma se fosse possibile comprendere la natura del problema attuale preferirei sicuramente questa strada. Può essere una buona occasione per imparare!

  6. #6
    Utente di HTML.it L'avatar di Secta
    Registrato dal
    May 2002
    Messaggi
    365
    Scritta al volo... modificala secondo le tue esigenze... tra un po torno, se hai bisogno d'ulteriore aiuto chiedi pure

    Codice PHP:
        $images  glob('*.jpg');
        
    $nImages count($images);
        
    $xPagina 16;
        
    $nPagine ceil($nImages/$xPagina);
        
    $page    1;
            
        if (isset(
    $_GET['page']))
        {
            
    $page $_GET['page'] <= || !is_numeric($_GET['page']) ? $_GET['page'];
            
    $page $nPagine $page $nPagine $page;
        }

        
    $out '<ul>';
        
        foreach (
    array_slice($images, ($xPagina $page) - $xPagina$xPagina) as $image)
        {
            
    $out .= sprintf('[*][url="#"]%s[/url]'$image);
        }

        
    $out.= '[/list]';
            
        for (
    $i 0$i $nPagine$i++)
        {
            if (
    $page == $i 1)
            {
                
    $out .= sprintf('[url="%s?page=%d"][b]%d[/b][/url] '$_SERVER['PHP_SELF'], $i+1$i+1);
            }
            else
            {
                
    $out.= sprintf('[url="%s?page=%d"]%d[/url] '$_SERVER['PHP_SELF'], $i+1$i+1);
            }
        }
        
        echo 
    $out
    "Dai diamanti non nasce niente, dal letame nascon fiori."
    Fabrizio De Andrè

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2003
    Messaggi
    297
    Originariamente inviato da Secta
    Scritta al volo... modificala secondo le tue esigenze... tra un po torno, se hai bisogno d'ulteriore aiuto chiedi pure
    Accidenti, ci sarà un giorno in cui anch'io arriverò a scrivere queste cose al volo?
    Grazie mille Secta, lo proverò tra poco e vi faccio sapere!

  8. #8
    Utente di HTML.it
    Registrato dal
    May 2003
    Messaggi
    297
    Ciao Secta,
    L'ho provato poco fa e funziona alla grande, complimenti! Ho fatto qualche modifica per cercare di adattarlo, per esempio mi veniva scomodo usare sprintf nel primo ciclo foreach e l'ho tolto:

    Codice PHP:
    foreach (array_slice($images, ($xPagina $page) - $xPagina$xPagina) as $image
        {
            
    $title substr($image37, -4);  
            
    $pre 'preview'
            
    $main 'main'
            
            
    $src str_replace($pre$main$image);        
            
            
    $out .= '[*][url="' .$src'"][img]' .$image '[/img][/url]'
    Per quanto riguarda i link per cambiare pagina come potrei fare per usare semplicemente dei bottoni per andare avanti e indietro nelle pagine? Avevo predisposto delle immagini opacizzate per dare l'idea di bottone 'non più cliccabile'. Allego una piccola screenshot!
    Immagini allegate Immagini allegate

  9. #9
    Utente di HTML.it L'avatar di Secta
    Registrato dal
    May 2002
    Messaggi
    365
    Non avendo nulla fare

    Codice PHP:
    class Pagination
    {
        protected
            
    $currentPage null,
            
    $maxItems    10,
            
    $data        = array(),
            
    $totalPages  null;
            

        public function 
    setData(array $data)
        {
            
    $this->data $data;
            
            return 
    $this;
        }
        
        public function 
    getData()
        {
            return 
    $this->data;
        }
        
        public function 
    setMaxItems($value)
        {
            
    $this->maxItems $value;
            
            return 
    $this;
        }
        
        public function 
    getMaxItems()
        {
            return 
    $this->maxItems;
        }
        
        public function 
    setCurrentPage($value)
        {
            if (
    $value $total $this->getTotalPages())
            {
                
    $value $total;
            }
            
            
    $this->currentPage $value;
            
            return 
    $this;
        }
        
        public function 
    getCurrentPage()
        {
            return 
    $this->currentPage;
        }

        public function 
    getTotalPages()
        {
            if (!
    $this->totalPages)
            {
                if (!
    $data $this->getData())
                {
                    
    $this->totalPages 1;
                }
                else 
                {
                    
    $this->totalPages ceil(count($data)/$this->getMaxItems());
                }
            }
            
            return 
    $this->totalPages;
        }
        
        public function 
    getPrevPage()
        {
            return 
    $this->getCurrentPage() == null $this->getCurrentPage() - 1;
        }
        
        public function 
    getNextPage()
        {
            return 
    $this->getCurrentPage() >= $this->getTotalPages() ? null $this->getCurrentPage() + 1;
        }
            
        public function 
    execute()
        {
            return 
    array_slice($this->getData(), ($this->getMaxItems() * $this->getCurrentPage()) - $this->getMaxItems(), $this->getMaxItems());    
        }    
    }

    class 
    PaginationWrapper extends Pagination
    {
        public function 
    __construct($pattern$maxItems)
        {
            
    $this->setData(glob($pattern));
            
    $this->setMaxItems($maxItems);
        }
        
        public function 
    getCurrentPage()
        {
            if (!
    $this->currentPage)
            {
                
    $page 1;
                
                if (isset(
    $_GET['page']))
                {
                    
    $page $_GET['page'] <= || !is_numeric($_GET['page']) ? $_GET['page'];        
                }
                
                
    $this->setCurrentPage($page);
            }
            
            return 
    parent::getCurrentPage();
        }
        
        public function 
    getPagination()
        {
            if (!
    $result $this->execute())
            {
                
    $out null;
            }
            else 
            {
                
    $out '<ul>';
            
                foreach (
    $this->execute() as $item)
                {         
                    
    $out .= '[*][url="' str_replace('preview''main'$item) . '"][img]' $item'[/img][/url]';                
                }
                    
                
    $out .= '[/list]';            
            }
                    
            return 
    $out;
        }
        
        public function 
    getNavigation()
        {
            
    $out  '<ul>';
            
    $out .= $this->getPrevPage() ? '<li class="prev">[url="?page=' $this->getPrevPage() . '"]back[/url]' '';
            
    $out .= $this->getNextPage() ? '<li class="next">[url="?page=' $this->getNextPage() . '"]next[/url]' '';
            
    $out .= '[/list]';
            
            return 
    $out;        
        }
        
        public function 
    getAllAsString()
        {
            if (!
    $this->getPagination())
            {
                return 
    'Nessun dato da impaginare';            
            }
            
            return 
    $out $this->getPagination() . $this->getNavigation();
        }
    }


        
    $pagination = new PaginationWrapper('*.jpg'16);
        echo 
    $pagination->getAllAsString(); 
    altrimenti se vuoi usare la soluzione precedente

    Codice PHP:
        if (!$images  glob('*.jpg'))
        {
            
    $out 'Nessun dato da impaginare';
        }
        else 
        {
            
    $nImages count($images);
            
    $xPagina 16;
            
    $nPagine ceil($nImages/$xPagina);
            
    $page    1;
                
            if (isset(
    $_GET['page']))
            {
                
    $page $_GET['page'] <= || !is_numeric($_GET['page']) ? $_GET['page'];
                
    $page $nPagine $page $nPagine $page;
            }
        
            
    $out '<ul>';
            
            foreach (
    array_slice($images, ($xPagina $page) - $xPagina$xPagina) as $image)
            {        
                
    $out .= '[*][url="' str_replace('preview''main'$image) . '"][img]' .$image '[/img][/url]';
            }
        
            
    $out.= '[/list]';
            
    $out .= '<ul id="prevnext">';    
            
    $out .= $page == '' '<li class="prev">[url="' $_SERVER['PHP_SELF'] .'?page=' . ($page 1) . '"]INDIETRO[/url]';
            
    $out .= $page >= $nPagine '' '<li class="next">[url="' $_SERVER['PHP_SELF'] .'?page=' . ($page 1) . '"]AVANTI[/url]';
            
    $out .= '[/list]';
                
        }
        
        echo 
    $out
    Usa quella che preferisci e ovviamente modificale e migliorale come ritieni più opportuno
    "Dai diamanti non nasce niente, dal letame nascon fiori."
    Fabrizio De Andrè

  10. #10
    Utente di HTML.it
    Registrato dal
    May 2003
    Messaggi
    297
    Cosa posso dire? Grazie, davvero! Interessante e professionale la prima opzione, anche se un po' complicatina per il mio livello! Rimarrei sulla seconda, ora sperimento e ti dico!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.