Математика у меня в pageMan::pageRange() неправильная, мне кажется.
Хотя там все работает верно.
Если расчитать все четко не получится, то увы. Будет как есть.
Отредактировано tipsun (2011.12.20 23:11)
#82.
Nu3oN
Off
(11)
Moderator
2011.12.21 09:09
Я с телефона, и половины темы не осилил! Код обрезает ппц! Убери для вап версии, в стиле (забыл как называеется) скроулинг
Я буду лучше голоден, но между креслом и рулем и на дороге.
Единственное, что в голову приходит - это оптимизация.
Сейчас поправки внесу и выложу.
Вот. (Этот гребаный виндовс завирусованный, после восстановления мои архивы пропали! >_<)
Код:
span style="color: #0000BB"><?php /** * pageMan::getPageRange() * Получение ближайшего отрезка номеров страниц для создания навигации вида: (10 11 [12] 13 14). * @return array */ public function getPageRange($range=null) { if (1 == $this->getPages()) return array(1); $range = (is_numeric($range) and 0 < $range) ? (int)$range : DEF_RANGE; //CONST DEF_RANGE = 3; $prev = $this->getPage() - $range; $next = $this->_page + $range; $start = $this->getPages() < $next ? $this->_pages - $next + $prev : $prev; $stop = 1 > $prev ? $next - $prev + 1 : $next; $start -= $this->_pages <= $stop ? 1 : 0; $stop += 1 >= $start ? 1 : 0; $start = 1 < $start ? $start : 1; $stop = $this->_pages > $stop ? $stop : $this->_pages; //не то! ^_^ я уже лучше придумал. if ($start == $stop) return array(1); $array = range($start, $stop); if (1 < $start) { array_unshift($array, 1); } if ($this->_pages > $stop) { $array[] = $this->_pages; } return $array; }?> |
Отредактировано tipsun (2011.12.23 20:08)
Akdmehp написал:
255, tipsun, смотрю навигацию в "живом" режиме.
Приятно, что используется
phpDoc - это плюс.
Итак, не совсем понял, зачем
делать так: $_count=null;
приравнивание переменной значению null равно её
удалению. То есть, ты
создаешь переменную, удаляя
её. Проще либо приравнивать
нулю или значениям по-
умолчанию, либо так: private $_count, $_page,
$_pages, $_start, $_tmpPage =
1, $_items = 10;
Не хватает для наглядности
примера использования.
Плохо, что нету конструктора, так было бы намного
нагляднее, советую добавить
конструктор.
Также по правилам хорошего
тона имя класса делаем с
большой. в phpDoc после * @param mixed
$count указываем что эта
переменная значит - по
правилам хорошего тона, ну и
после return указываем, что
именно возвращает. Советую использовать в
классе систему try/catch, это
будет намного логичнее, чем
генерировать ошибки.
Пример конструктора на твоем
коде, хотя я все равно бы код рефакторил:
__construct($count, $page,
$items);
Просмотрел. В принципе,
работы очень много, все можно
переделать короче и лучше, используя в два раза меньше
методов, так как это в свою
очередь запутывает код. В общем, работай дальше!
Благодаря Gemorroj'ю (насчет phpDoc) плюс заработал
Добавлено спустя 5 минут 51 секунду: Я вот уже думаю насчет рефактора кода и конструктор, в принципе, добавить не проблема.
Добавлю конструктор а переменные буду обрабатывать методами, которые принимают данные.
try/catch даже не знаю че такое, придется учить.
Насчет $var = null; даже не знал.
Отредактировано tipsun (2012.01.04 11:11)
Gemorroj написал:
phpDoc не совсем верные
@return object замени на @return pageMan
@param mixed $count на @param integer $count
и тд. так же убери pageMan::getTable() и проч, как будто ты описываешь статические методы.
а так, не вдаваясь в подробности выглядит норм.
Сделано.
Отредактировано tipsun (2012.01.04 19:07)