Visualizzazione dei risultati da 1 a 7 su 7

Discussione: Zned_Paginator

  1. #1

    Zend_Paginator

    Sto creando (con Zend Framework) una galleria video tramite YouTube APIs.
    Mi servo di Zend_Gdata_YouTube e Zend_Paginator, ecco cosa ho fatto:
    Codice PHP:
    $yt = new Zend_Gdata_YouTube();
           
    $query $yt->newVideoQuery();
    $query->author 'mioCanale';
    $query->orderBy 'published';
           
    $videoFeed $yt->getVideoFeed($query);

    //Paginazione
    $page=$this->_getParam('page',1);
    $paginator Zend_Paginator::factory($videoFeed);
    $paginator->setItemCountPerPage(6);
    $paginator->setCurrentPageNumber($page);

    $this->view->paginator $paginator
    Allora... funziona tutto perfettamente, ma non mi torna tanto, in questo modo non è performante perchè recupero tutti i video da YouTube e poi vado a paginare, nel caso avessi centinaia di video non credo sia una buona soluzione.
    Volevo sfruttare Zend_Paginator senza stare a crearmi io la paginazione, ma forse sbaglio ad usarlo?
    --- [color= darkorange]L'uomo è il computer più straordinario di tutti [/color]----

    http://www.simogrima.com

    Grifone

  2. #2
    Utente di HTML.it L'avatar di _debo
    Registrato dal
    Mar 2012
    residenza
    London, UK
    Messaggi
    858
    Zend_Gdata_YouTube ha le seguenti proprietà per limitare i valori di ritorno e spostare il cursore nella posizione desiderata:

    - startIndex
    - maxResults

  3. #3
    grazie _debo,
    conosco i parametri, ma volevo utilizzare Zend_Paginator per gestire la paginazione,
    questa discussione su stack overflow mi ha schiarito le idee su come farlo, anche se dopo i primi test risulta decisamente più lenta della mia soluzione. Soprattutto è il metodo count() che mi rallenta.
    --- [color= darkorange]L'uomo è il computer più straordinario di tutti [/color]----

    http://www.simogrima.com

    Grifone

  4. #4
    Utente di HTML.it L'avatar di _debo
    Registrato dal
    Mar 2012
    residenza
    London, UK
    Messaggi
    858
    Se guardi quella discussione utilizza proprio il parametro che ti ho detto sotto forma di query string

    Il motivo per cui è lento è che usa solo lo start index ma non il max result

  5. #5
    Ecco cosa ho fatto,
    Codice PHP:
    <?php 
    class My_Paginator_Adapter_YoutubeQuery implements Zend_Paginator_Adapter_Interface 
    {
        
    /**
         * @var Zend_Gdata_YouTube 
         */
        
    protected $_yt;
        
        
    /**
         * @var Zend_Gdata_YouTube_VideoQuery
         */
        
    protected $_query;
        
        protected 
    $_results
        
        public function 
    __construct($filters = array())     
        {         
            
    $this->_yt = new Zend_Gdata_YouTube();     
            
    $this->_query $this->_yt->newVideoQuery();
            
            foreach (
    $filters as $key => $value) {
                
    $this->_query->$key $value;
            }
        }        

        public function 
    getItems($offset$itemCountPerPage)     
        {
            try {
                
    $this->_query->startIndex $offset;
                
    $this->_query->maxResults $itemCountPerPage

                
    $this->_results $this->_yt->getVideoFeed($this->_query);        
                
    //echo $this->_query->queryUrl;

                
    return $this->_results;  
                
                } catch (
    Exception $ex) {             
                    echo 
    $ex->getMessage();             
                    exit;         
                }     
                    
                    }      
        public function 
    count()     
        {
            try          
            {
              return 
    $this->_yt->getVideoFeed($this->_query)->count();
            } catch (
    Exception $ex) {
                echo 
    $ex->getMessage();
                exit;
            }           
        }      
    }
    Quello che non mi torna è che per creare la paginazione devo (per forza) avere anche il numero totale dei risultati oltre a start index e max result.
    Ma se per ottenere questo dato devo rieseguire una query per riottenere tutto il feed tanto vale che lo ottengo solo una volta e poi lo passo a Zend_Paginator, come avevo fatto all'inizio.
    Possibile che non ci sia un modo per ottenere il numero dei risultati senza ottenere tutto il feed?
    --- [color= darkorange]L'uomo è il computer più straordinario di tutti [/color]----

    http://www.simogrima.com

    Grifone

  6. #6
    a chi servisse, in questo modo ottengo il numero totale dei records molto più velocemente:
    Codice PHP:
            $sxml simplexml_load_file('http://gdata.youtube.com/feeds/api/videos?author=BritainsGotTalent09&orderby=published');
            
    $counts $sxml->children('openSearch'true);
            return 
    $counts->totalResults
    --- [color= darkorange]L'uomo è il computer più straordinario di tutti [/color]----

    http://www.simogrima.com

    Grifone

  7. #7
    Utente di HTML.it L'avatar di _debo
    Registrato dal
    Mar 2012
    residenza
    London, UK
    Messaggi
    858
    Non ti serve, puoi tranquillamente usare il componente e mantenere tutto pulito come segue:
    Codice PHP:
    $yt = new Zend_Gdata_YouTube();
    $query = new Zend_Gdata_Query($url);
    $query->startIndex $offset
    $query->maxResults $itemCountPerPage;  
    $feed $yt->getVideoFeed($query);
    $total $feed->getTotalResults()->getText(); 

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.