254 Zeilen
		
	
	
	
		
			8,5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			254 Zeilen
		
	
	
	
		
			8,5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
/**
 | 
						|
 * This file is part of MySQLDumper released under the GNU/GPL 2 license
 | 
						|
 * http://www.mysqldumper.net
 | 
						|
 *
 | 
						|
 * @package         MySQLDumper
 | 
						|
 * @subpackage      View_Helpers
 | 
						|
 * @version         SVN: $Rev$
 | 
						|
 * @author          $Author$
 | 
						|
 */
 | 
						|
 | 
						|
/**
 | 
						|
 * Build a paginator.
 | 
						|
 *
 | 
						|
 * @package         MySQLDumper
 | 
						|
 * @subpackage      View_Helpers
 | 
						|
 */
 | 
						|
class Msd_View_Helper_Paginator extends Zend_View_Helper_Abstract
 | 
						|
{
 | 
						|
    /**
 | 
						|
     * Types for the buttons in the view script.
 | 
						|
     * The type depends on the current mode.
 | 
						|
     *
 | 
						|
     * @var array
 | 
						|
     */
 | 
						|
    protected $_buttonTypes = array(
 | 
						|
        'form' => 'submit',
 | 
						|
        'js' => 'button',
 | 
						|
        'url' => 'button',
 | 
						|
    );
 | 
						|
 | 
						|
    /**
 | 
						|
     * Defaults for the options. This array is used to fill missing options.
 | 
						|
     *
 | 
						|
     * @var array
 | 
						|
     */
 | 
						|
    protected $_defaults = array(
 | 
						|
        'currentPage' => 1,
 | 
						|
        'pageCount' => 1,
 | 
						|
        'urlParam' => 'pageNr',
 | 
						|
        'baseUrl' => '',
 | 
						|
        'mode' => 'form',
 | 
						|
        'actions' => array(
 | 
						|
            'first' => '',
 | 
						|
            'prev' => '',
 | 
						|
            'next' => '',
 | 
						|
            'last' => '',
 | 
						|
            'change' => '',
 | 
						|
        ),
 | 
						|
        'method' => 'post',
 | 
						|
        'enctype' => 'multipart/form-data',
 | 
						|
    );
 | 
						|
 | 
						|
    /**
 | 
						|
     * Builds a paginator depending on the given options.
 | 
						|
     *
 | 
						|
     * <code>
 | 
						|
     * <?php
 | 
						|
     * $options = array(
 | 
						|
     *     'currentPage',       // Number of the currently selected page.
 | 
						|
     *     'pageCount',         // Number of total pages.
 | 
						|
     *     'urlParam',          // Name of the url parameter which gets the new selected page number.
 | 
						|
     *     'baseUrl',           // Base URL for form action and buttons. urlParam and new page number will be appended.
 | 
						|
     *     'mode',              // Mode, in which the paginator operates (can be "form", "url" or "js")
 | 
						|
     *     'actions' => array(  // JS code for the buttons in "js" mode and JS code for the text input field.
 | 
						|
     *         'first',         // The string ":PAGE:" will be replaced with the target page number.
 | 
						|
     *         'prev',
 | 
						|
     *         'next',
 | 
						|
     *         'last',
 | 
						|
     *         'change',        // If you want to call a JS function with the new page number as parameter
 | 
						|
     *     ),                   // use "myFunc(this.value);".
 | 
						|
     *     'method',            // Value for "method" HTML attribute of the "form" tag.
 | 
						|
     *     'enctype',           // Value for "enctype" HTML attribute of the "form" tag.
 | 
						|
     * );
 | 
						|
     * ?>
 | 
						|
     * <code>
 | 
						|
     *
 | 
						|
     * @param array $options Options for the paginator
 | 
						|
     *
 | 
						|
     * @return string HTML code for view script inclusion
 | 
						|
     */
 | 
						|
    public function paginator(array $options)
 | 
						|
    {
 | 
						|
        $view = clone $this->view;
 | 
						|
        $view->clearVars();
 | 
						|
 | 
						|
        $options = array_merge($this->_defaults, $options);
 | 
						|
 | 
						|
        $buttons = $this->_getButtons($options);
 | 
						|
        $onChange = $this->_getOnChange($options['mode'], $options['baseUrl'], $options['urlParam']);
 | 
						|
        if ($options['mode'] == 'js') {
 | 
						|
            $onChange = $this->_getOnChange($options['mode'], $options['actions']['change'], $options['urlParam']);
 | 
						|
        }
 | 
						|
 | 
						|
        $viewData = array(
 | 
						|
            'currentPage' => $options['currentPage'],
 | 
						|
            'pageCount' => $options['pageCount'],
 | 
						|
            'urlParam' => $options['urlParam'],
 | 
						|
            'onChange' => $onChange,
 | 
						|
            'buttonType' => $this->_buttonTypes[$options['mode']],
 | 
						|
            'first' => $buttons['first'],
 | 
						|
            'prev' => $buttons['prev'],
 | 
						|
            'next' => $buttons['next'],
 | 
						|
            'last' => $buttons['last'],
 | 
						|
            'formEncType' => $options['enctype'],
 | 
						|
            'formAction' => $options['baseUrl'],
 | 
						|
            'formMethod' => $options['method'],
 | 
						|
        );
 | 
						|
        
 | 
						|
        $view->assign($viewData);
 | 
						|
        return $view->render('helper/paginator.phtml');
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Builds the information for the buttons (first page, previous page, next page and last page).
 | 
						|
     *
 | 
						|
     * @param array $options Button options
 | 
						|
     *
 | 
						|
     * @return array Information for the view script
 | 
						|
     */
 | 
						|
    protected function _getButtons(array $options)
 | 
						|
    {
 | 
						|
        $buttons = array();
 | 
						|
        $buttons['first'] = $this->_getButtonInfo(
 | 
						|
            (bool) ($options['currentPage'] <= 1)
 | 
						|
        );
 | 
						|
        $buttons['first']['icon'] = 'First' . $buttons['first']['icon'];
 | 
						|
        $buttons['first']['click'] = $this->_getButtonClick(
 | 
						|
            $options['mode'],
 | 
						|
            array(
 | 
						|
                'targetPage' => 1,
 | 
						|
                'onClick'    => $options['actions']['first'],
 | 
						|
                'baseUrl'    => $options['baseUrl'],
 | 
						|
                'urlParam'   => $options['urlParam'],
 | 
						|
            )
 | 
						|
        );
 | 
						|
 | 
						|
        $buttons['prev'] = $this->_getButtonInfo(
 | 
						|
            (bool) ($options['currentPage'] <= 1)
 | 
						|
        );
 | 
						|
        $buttons['prev']['icon'] = 'Back' . $buttons['prev']['icon'];
 | 
						|
        $buttons['prev']['click'] = $this->_getButtonClick(
 | 
						|
            $options['mode'],
 | 
						|
            array(
 | 
						|
                'targetPage' => $options['currentPage'] - 1,
 | 
						|
                'onClick'    => $options['actions']['prev'],
 | 
						|
                'baseUrl'    => $options['baseUrl'],
 | 
						|
                'urlParam'   => $options['urlParam'],
 | 
						|
            )
 | 
						|
        );
 | 
						|
 | 
						|
        $buttons['next'] = $this->_getButtonInfo(
 | 
						|
            (bool) ($options['currentPage'] >= $options['pageCount'])
 | 
						|
        );
 | 
						|
        $buttons['next']['icon'] = 'Forward' . $buttons['next']['icon'];
 | 
						|
        $buttons['next']['click'] = $this->_getButtonClick(
 | 
						|
            $options['mode'],
 | 
						|
            array(
 | 
						|
                'targetPage' => $options['currentPage'] + 1,
 | 
						|
                'onClick'    => $options['actions']['next'],
 | 
						|
                'baseUrl'    => $options['baseUrl'],
 | 
						|
                'urlParam'   => $options['urlParam'],
 | 
						|
            )
 | 
						|
        );
 | 
						|
 | 
						|
        $buttons['last'] = $this->_getButtonInfo(
 | 
						|
            (bool) ($options['currentPage'] >= $options['pageCount'])
 | 
						|
        );
 | 
						|
        $buttons['last']['icon'] = 'Last' . $buttons['last']['icon'];
 | 
						|
        $buttons['last']['click'] = $this->_getButtonClick(
 | 
						|
            $options['mode'],
 | 
						|
            array(
 | 
						|
                'targetPage' => $options['pageCount'],
 | 
						|
                'onClick'    => $options['actions']['last'],
 | 
						|
                'baseUrl'    => $options['baseUrl'],
 | 
						|
                'urlParam'   => $options['urlParam'],
 | 
						|
            )
 | 
						|
        );
 | 
						|
 | 
						|
        return $buttons;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Builds the basic info for a button (disabled status and disabled suffix for buttons icon)
 | 
						|
     *
 | 
						|
     * @param bool $disabled Status of the button
 | 
						|
     *
 | 
						|
     * @return array Basic info about the button
 | 
						|
     */
 | 
						|
    protected function _getButtonInfo($disabled)
 | 
						|
    {
 | 
						|
        return array(
 | 
						|
            'disabled' => $disabled ? ' disabled="disabled"' : '',
 | 
						|
            'icon' => $disabled ? 'Disabled' : '',
 | 
						|
        );
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Builds the javascript code for the HTML attribute "onclick".
 | 
						|
     *
 | 
						|
     * @param string $mode    Current paginator mode (can be "form", "url" or "js")
 | 
						|
     * @param array  $options Options for the "onclick" attribute
 | 
						|
     *
 | 
						|
     * @return string JS-Code for the "onclick" attribute
 | 
						|
     */
 | 
						|
    protected function _getButtonClick($mode, array $options)
 | 
						|
    {
 | 
						|
        $onClick = '';
 | 
						|
 | 
						|
        if ($mode == 'form') {
 | 
						|
            $onClick = "$(this).parent().children('select').val(" . $options['targetPage'] . "); "
 | 
						|
                . "$(this).parent().parent()[0].submit();";
 | 
						|
        }
 | 
						|
 | 
						|
        if ($mode == 'url') {
 | 
						|
            $onClick = "window.location.href = '" . rtrim($options['baseUrl'], '/')
 | 
						|
                . "/{$options['urlParam']}/{$options['targetPage']}/';";
 | 
						|
        }
 | 
						|
 | 
						|
        if ($mode == 'js') {
 | 
						|
            $onClick = str_replace(':PAGE:', $options['targetPage'], $options['onClick']);
 | 
						|
        }
 | 
						|
 | 
						|
        return $onClick;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Builds the Javascript code for "onchange" HTML attribute.
 | 
						|
     * This code is used for the combobox.
 | 
						|
     *
 | 
						|
     * @param string $mode     Current paginator mode (can be "form", "url" or "js")
 | 
						|
     * @param string $baseUrl  Base URL or Javascript code for the event.
 | 
						|
     * @param string $urlParam Name of the URL param. Its value will set to the entered page.
 | 
						|
     *
 | 
						|
     * @return string JS-Code for the "onchange" HTML attribute.
 | 
						|
     */
 | 
						|
    protected function _getOnChange($mode, $baseUrl = '', $urlParam = '')
 | 
						|
    {
 | 
						|
        $onChange = "";
 | 
						|
        if ($mode == 'form') {
 | 
						|
            $onChange = "$(this).parent().parent()[0].submit();";
 | 
						|
        }
 | 
						|
 | 
						|
        if ($mode == 'url') {
 | 
						|
            $onChange = "window.location.href = '" . rtrim($baseUrl, '/') . "/$urlParam/' + this.value + '/';";
 | 
						|
        }
 | 
						|
 | 
						|
        if ($mode == 'js') {
 | 
						|
            $onChange = "$baseUrl";
 | 
						|
        }
 | 
						|
 | 
						|
        return $onChange;
 | 
						|
    }
 | 
						|
}
 |