Холиварка пыхыпешников (общая)

7.12K
.
Более подходящей темы не нашел, вот наваял класс просьба оценить.
А за одно и спросить как лучше организовать подключение шаблона для ссылок.
Ведь что бы в шаблон устанавливались переменные приходится его инклудить каждый раз, а если страниц слишком много?
А как использовать буфферизацию для этих целей у меня пока башка не догоняет
/**
 * Pagination
 * @author Screamer <nwotnbm@gmail.com>
 */

class Pagination 
{

	/**
	 * @var (array) Parameters
	 */
	protected $_parameters = array(
		// Current page
		'current_page' => 1,
		// Deal of items on page
		'per_page'     => 1,
		// Base URL
		'base_url'     => '',
		// Deal of all items
		'total_rows'   => 0,
	);
	/**
	 * @var (int) First page
	 */
	protected $_base_page = 1;
	/**
	 * @var (int) Deal of pages
	 */
	protected $_num_pages = 0;

	/**
	 * Constructor
	 * @return (void)
	 */
	public function __construct()
	{
	}

	/**
	 * Prepare parameters for links
	 * @param (array) $parameters array with parameters
	 * @return (array) Start and end values
	 */
	public function prepare(array $parameters)
	{
		$allowed_keys = $this->_parameters;
		if (!empty($parameters)) {
			foreach ($parameters as $key => $value) {
				if (in_array($key, $allowed_keys) && !empty($value)) {
					$this->_parameters[$key] = $value;
					unset($allowed_keys[$key]);
				}
			}
			if (isset($allowed_keys['per_page'])) {
				unset($allowed_keys['per_page']);
			}
		}
		if (!empty($allowed_keys)) {
			throw new Exception(__CLASS__ . ":Unable to prepare parameters");
		}
		// Detect base url
		$this->_parameters['base_url'] = rtrim($this->_parameters['base_url'], '/') .'/';
		// Detect current page
		$this->_parameters['current_page'] = intval($this->_parameters['current_page']);
		// Set current page to base page
        if ($this->_parameters['current_page'] == 0) {
            $this->_parameters['current_page'] = $this->_base_page;
        }
        // Calculate the deal of pages
        $this->_num_pages = ceil($this->_parameters['total_rows'] / $this->_parameters['per_page']);
		// If the page number beyond the result range the show last page
        if ($this->_parameters['current_page'] > $this->_num_pages) {
            $this->_parameters['current_page'] = $this->_num_pages;
        }
        // Return start and end values
		return array(
			'start' => ($this->_parameters['current_page'] * $this->_parameters['per_page'] - $this->_parameters['per_page']),
			'end'   => intval($this->_parameters['per_page']),
		);
	}

	/**
	 * Create links
	 * @return (string)
	 */
	public function create_links()
	{
        if ($this->_parameters['total_rows'] == 0 || $this->_parameters['per_page'] == 0 || $this->_num_pages == 1) {
            return '';
        }
        $output = array();
        for ($i = 1; $i <= $this->_num_pages; $i++) {
            if ($i >= $this->_base_page) {
                if ($this->_parameters['current_page'] == $i) {
                	// Current page
                    $output[] = $i;
                } else {
                    $output[] = '<a href="' . $this->_parameters['base_url'] . $i . '">' . $i . '</a>';
                    
                }
            }
        }
        return implode(' | ', $output);
	}

}
.
Koenig (19.10.2012 / 04:20)
И как бы интересно обсудить реализацию хранения счетчиков например, а именно рациональность таблицы для счетчиков, предположим есть огромный форум, куча тем и вывод чего сколько где имеется
таблица н
Статически, в файле, записывая в деструкторе небольшого класса.
.
Screamer, во блин, я прочитал уже 3 учебника но то что ты написал я не могу понять, что это и для чего? Где и что учить чтоб я тоже смог так писать?
.
valik619 (20.10.2012 / 17:31)
Screamer, во блин, я прочитал уже 3 учебника но то что ты написал я не могу понять, что это и для чего? Где и что учить чтоб я тоже смог так писать?
Я например тут php.su/learnphp/phpoo/ все прекрасно понял
.
valik619, http://www.php.net/manual/ru/l ... 5.php
.
Screamer, Спасибо поучу на досуге
.
Screamer,
А за одно и спросить как лучше организовать подключение шаблона для ссылок.
Ведь что бы в шаблон устанавливались переменные приходится его инклудить каждый раз, а если страниц слишком много?


Всмысле шаблон и где он у тебя в коде?
Ничего не вижу
.
L!MP, в том то и дело что его там нет, уже разобрался, и сделал традиционно
массив с номерами страниц передаем в шаблон, в шаблоне циклом выводим.
.
Screamer, понятно. Один вопрос: а зачем ты гоняешь парамметры в массиве? Какое в этом удобство?
.
L!MP, Ну мне так удобнее, и как мне кажется менее громоздко. Хоть и менее понятно.
Всего: 308