View Source

/hsphere/local/home/c251266/sunsetvines.com/www.sunsetvines.com/sunsetvines/current/vendor/creovel/classes/pager.php (8.808 KB)

#0001  
#0002  
#0003  
#0004  
#0005  
#0006  
#0007  
#0008  
#0009  
#0010  
#0011  
#0012  
#0013  
#0014  
#0015  
#0016  
#0017  
#0018  
#0019  
#0020  
#0021  
#0022  
#0023  
#0024  
#0025  
#0026  
#0027  
#0028  
#0029  
#0030  
#0031  
#0032  
#0033  
#0034  
#0035  
#0036  
#0037  
#0038  
#0039  
#0040  
#0041  
#0042  
#0043  
#0044  
#0045  
#0046  
#0047  
#0048  
#0049  
#0050  
#0051  
#0052  
#0053  
#0054  
#0055  
#0056  
#0057  
#0058  
#0059  
#0060  
#0061  
#0062  
#0063  
#0064  
#0065  
#0066  
#0067  
#0068  
#0069  
#0070  
#0071  
#0072  
#0073  
#0074  
#0075  
#0076  
#0077  
#0078  
#0079  
#0080  
#0081  
#0082  
#0083  
#0084  
#0085  
#0086  
#0087  
#0088  
#0089  
#0090  
#0091  
#0092  
#0093  
#0094  
#0095  
#0096  
#0097  
#0098  
#0099  
#0100  
#0101  
#0102  
#0103  
#0104  
#0105  
#0106  
#0107  
#0108  
#0109  
#0110  
#0111  
#0112  
#0113  
#0114  
#0115  
#0116  
#0117  
#0118  
#0119  
#0120  
#0121  
#0122  
#0123  
#0124  
#0125  
#0126  
#0127  
#0128  
#0129  
#0130  
#0131  
#0132  
#0133  
#0134  
#0135  
#0136  
#0137  
#0138  
#0139  
#0140  
#0141  
#0142  
#0143  
#0144  
#0145  
#0146  
#0147  
#0148  
#0149  
#0150  
#0151  
#0152  
#0153  
#0154  
#0155  
#0156  
#0157  
#0158  
#0159  
#0160  
#0161  
#0162  
#0163  
#0164  
#0165  
#0166  
#0167  
#0168  
#0169  
#0170  
#0171  
#0172  
#0173  
#0174  
#0175  
#0176  
#0177  
#0178  
#0179  
#0180  
#0181  
#0182  
#0183  
#0184  
#0185  
#0186  
#0187  
#0188  
#0189  
#0190  
#0191  
#0192  
#0193  
#0194  
#0195  
#0196  
#0197  
#0198  
#0199  
#0200  
#0201  
#0202  
#0203  
#0204  
#0205  
#0206  
#0207  
#0208  
#0209  
#0210  
#0211  
#0212  
#0213  
#0214  
#0215  
#0216  
#0217  
#0218  
#0219  
#0220  
#0221  
#0222  
#0223  
#0224  
#0225  
#0226  
#0227  
#0228  
#0229  
#0230  
#0231  
#0232  
#0233  
#0234  
#0235  
#0236  
#0237  
#0238  
#0239  
#0240  
#0241  
#0242  
#0243  
#0244  
#0245  
#0246  
#0247  
#0248  
#0249  
#0250  
#0251  
#0252  
#0253  
#0254  
#0255  
#0256  
#0257  
#0258  
#0259  
#0260  
#0261  
#0262  
#0263  
#0264  
#0265  
#0266  
#0267  
#0268  
#0269  
#0270  
#0271  
#0272  
#0273  
#0274  
#0275  
#0276  
#0277  
#0278  
#0279  
#0280  
#0281  
#0282  
#0283  
#0284  
#0285  
#0286  
#0287  
#0288  
#0289  
#0290  
#0291  
#0292  
#0293  
#0294  
#0295  
#0296  
#0297  
#0298  
#0299  
#0300  
#0301  
#0302  
#0303  
#0304  
#0305  
#0306  
#0307  
#0308  
#0309  
#0310  
#0311  
#0312  
<?php
/*
 * Paging class. Can be used to page a model or an array
 *
 * @author Nesbert Hidalgo
 */
class pager {

    public 
$total_records;        // total number of records to page
    
public $total_pages;        // total number of pages
    
    
public $current;            // current page number
    
public $next;                // next page number
    
public $prev;                // previous page number
    
public $first;                // first page number
    
public $last;                // last page number

    
public $offset;                // pointer offest
    
public $limit;                // limit of records per page
    
    
public $url;                // host url
    
    
public function __construct($data null)
    {
        
$this->set_properties($data);
    }
    
    
/**
     * Set class properties
     *
     * @author Nesbert Hidalgo
     * @access public
     * @param array $data required
     * @param int $page optional
     * @param int $limit optional
     */
    
public function set_properties($data$page null$limit null) {

        
// set vars by type
        
$page = ( $page $page : ( $_GET['page'] ? $_GET['page'] : ) );
        
$limit = ( $limit $limit : ( $_GET['limit'] ? $_GET['limit'] : 10 ) );

        switch ( 
true ) {
        
            case ( 
is_object($data) ):
                
$total_records $data->total_records;
                
$page = ( isset($data->page) ? $data->page $page );
                
$limit = ( isset($data->limit) ? $data->limit $limit );
            break;
            
            case ( 
is_array($data) ):
                
$total_records count($data);
            break;
            
            case ( 
is_numeric($data) ):
                
$total_records $data;
            break;
            
        }            
    
        
// set total_records, limit, total_pages
        
$this->total_records    = (int) $total_records;
        
$this->limit             max((int) $limit1);
        
$this->total_pages        ceil($this->total_records $this->limit);
        
        
// set current page
        
$this->current         = (int) $page;
        
$this->current         max($this->current1);  
        
$this->current         min($this->current$this->total_pages);
        
        
// set offest
        
$this->offset         max(($this->current 1) * $this->limit0);
        
        
// set next & previous pages
        
$this->next         min($this->current 1$this->total_pages);
        
$this->prev            max($this->current 11);
        
$this->first        1;
        
$this->last            $this->total_pages;
        
        
// set url path
        
$url = @explode('?'$_SERVER['REQUEST_URI']);
        
$this->url $url[0];

    }
    
    
/**
     * Page an array
     *
     * @author Nesbert Hidalgo
     * @access public
     * @param array $data required
     * @param bool $preserve_keys optional
     * @param bool $limit optional
     * @return mixed
     */
    
public function page_array($data$preserve_keys true$limit false)
    {
        if ( !
$this->total_records $this->set_properties($datanull$limit);
        return 
array_slice($data$this->offset$this->limit$preserve_keys);
    }    
    
    
/**
     * Clean/create extra params links
     *
     * @author Nesbert Hidalgo
     * @access public
     * @param mixed $data required
     * @return mixed
     */
    
public function params_to_str($data)
    {
        
$data is_array($data) ? array_merge($_GET$data) : $_GET;
        
$str '';
        foreach ( 
$data as $key => $val ) {
            if ( 
$key == 'page' || $key == 'limit') continue;
            
$str .="&".$key."=".urlencode($val);
        }
        return 
$str;
    }
    
    
/**
     * Create link to page
     *
     * @author Nesbert Hidalgo
     * @access private
     * @param string $label required
     * @param int $page required
     * @param array $extra_params optional
     * @param array $html_options optional
     * @return string
     */
    
private function link_to($label$page$extra_params null$html_options null)
    {
        
$extra_params = ( isset($_GET['limit']) ? "&limit={$this->limit}" '' ).$this->params_to_str($extra_params);
        
$html_options = ( is_array($html_options) ? array_merge(array('href' => $this->url.'?page='.$page.$extra_params), $html_options) : array('href' => $this->url.'?page='.$page.$extra_params) );
        return 
link_to($labelnullnullnull$html_options);
    }
    
    
/**
     * Create link to the mext page
     *
     * @author Nesbert Hidalgo
     * @access public
     * @param string $label optional
     * @param array $extra_params optional
     * @param array $html_options optional
     * @return string
     */
    
public function link_to_next($label 'Next'$extra_params null$html_options null)
    {
        return ( 
$this->current $this->last $this->link_to($label$this->next$extra_params$html_options) : '' );
    }

    
/**
     * Create link to the previous page
     *
     * @author Nesbert Hidalgo
     * @access public
     * @param string $label optional
     * @param array $extra_params optional
     * @param array $html_options optional
     * @return string
     */
    
public function link_to_prev($label 'Prev'$extra_params null$html_options null)
    {
        return ( 
$this->current $this->first $this->link_to($label$this->prev$extra_params$html_options) : '' );
    }

    
/**
     * Create link to the first page
     *
     * @author Nesbert Hidalgo
     * @access public
     * @param string $label optional
     * @param array $extra_params optional
     * @param array $html_options optional
     * @return string
     */
    
public function link_to_first($label 'First'$extra_params null$html_options null)
    {
        return ( 
$this->current $this->first $this->link_to($label$this->first$extra_params$html_options) : '' );
    }
    
    
/**
     * Create link to the last page
     *
     * @author Nesbert Hidalgo
     * @access public
     * @param string $label optional
     * @param array $extra_params optional
     * @param array $html_options optional
     * @return string
     */
    
public function link_to_last($label 'Last'$extra_params null$html_options null)
    {
        return ( 
$this->current $this->last $this->link_to($label$this->last$extra_params$html_options) : '' );
    }

    
/**
     * Create paging links eg. << Prev 1 ... 13 14 15 16 17 ... 25 Next >>
     *
     * @author Nesbert Hidalgo
     * @access public
     * @param array $extra_params optional
     * @return string
     */
    
public function paging_links($extra_params null$show_label false)
    {
    
        
$extra_params = ( isset($_GET['limit']) ? "&limit={$this->limit}" '' ).$this->params_to_str($extra_params);
        
$start_page max($this->current 21);
        
        if ( 
$this->total_pages ) {
        
            
$str '<div class="page-links">';
            
            if ( 
$show_label $str .= $this->paging_label();
        
            if ( 
$this->current ) {
                
$str .= '<a class="prev" href="'.$this->url.'?page='.$this->prev.$extra_params.'">&laquo; Prev</a>';
            }
    
            if ( (
$this->current 3) >= ) {
                
$str .= '<a class="page-1" href="'.$this->url.'?page=1'.$extra_params.'">1</a>';
                if ( (
$this->current 3) > $str .= '<span="dots">...</span>';
            }
        
            for ( 
$i $start_page$i <= $this->current 2$i++ ) {
            
                if ( 
$i $this->total_pages ) break;
            
                if ( 
$this->current <> $i ) {
                    
$str .= '<a class="page-'.$i.'" href="'.$this->url.'?page='.$i.$extra_params.'">'.$i.'</a>';
                } else {
                    
$str .= '<a class="page-'.$i.' current">'.$i.'</a>';
                }
                
            }
            
            if ( (
$this->current 3) <= $this->total_pages ) {            
                if ( (
$this->current 3) < $this->total_pages $str .= '<span="dots">...</span>';
                
$str .= '<a class="page-'.$this->total_pages.'" href="'.$this->url.'?page='.$this->total_pages.$extra_params.'">'.$this->total_pages.'</a>';
            }
            
            if ( 
$this->current $this->total_pages ) {
                
$str .= '<a class="next" href="'.$this->url.'?page='.$this->next.$extra_params.'">Next &raquo;</a>';
            }
            
            
$str .= '</div>';
            
        } else {
            
            
$str '';
            
        }
        
        return 
$str;
    
    }
    
    
/**
     * Create page limiting selectbox
     *
     * @author Nesbert Hidalgo
     * @access public
     * @param array $extra_params optional
     * @param array $default_limit optional
     * @return string
     */
    
public function paging_limit($extra_params null$default_limit 10)
    {    
        
$extra_params $this->params_to_str($extra_params);
        
$default_limit = (int) ( $default_limit $default_limit $this->limit );
        
        
$str '<select OnChange="location.href=this.options[this.selectedIndex].value">'."\n";
        
        
// if default_limit not a default value(20,50,100) create option for limit
        
switch ( $default_limit ) {
        
            case 
20:
            case 
50:
            case 
100:
                break;
                
            default:
                
$str .= '<option value="'.$this->url.'?page='.$this->current.'&limit='.$default_limit.$extra_params.'"'.( $this->limit == $default_limit " selected" "" ).'>'.$default_limit.'</option>'."\n";
            break;
            
        }
        
        
$str .= '<option value="'.$this->url.'?page='.$this->current.'&limit=20'.$extra_params.'"'.( $this->limit == 20 ' selected="selected"' '' ).'>20</option>'."\n";
        
$str .= '<option value="'.$this->url.'?page='.$this->current.'&limit=50'.$extra_params.'"'.( $this->limit == 50 ' selected="selected"' '' ).'>50</option>'."\n";
        
$str .= '<option value="'.$this->url.'?page='.$this->current.'&limit=100'.$extra_params.'"'.( $this->limit == 100 ' selected="selected"' '' ).'>100</option>'."\n";
        
$str .= "</select>\n";
        
        return 
$str;        
    }
    
    
/**
     * Create paging label: Page 1 of 10
     *
     * @author Nesbert Hidalgo
     * @access public
     * @return string
     */
    
public function paging_label()
    {
        return 
'<span class="page-label">Page '.$this->current.' of '.$this->total_pages.'</span>';
    }

}
?>