Рейтинг темы:
  • 1 Голос(ов) - 5 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
Уважаемые программисты!
#21
PHP код:
<?php 
if ($_GET['st']<>"") {$sql_start=$_GET['st']-1;}
Кто же так проверяет. Вообще, код ужасен, очень. Что-то разобрать здесь мне лень Smile
Ответ
#22
PROGRAMMATOR Написал:Кто же так проверяет. Вообще, код ужасен, очень. Что-то разобрать здесь мне лень
ну ето не моя проверка, я писал что код в поисковике достул ( писал наверно =))
А то что лень ет канешн=) ти ведь Програматор =) Все таки ето моя первая CMS.
Ответ
#23
Первая это хорошо, если бы не первая, то было бы намного хуже. Могу пример дать пагинатора в MZZ. Wink

PHP код:
<?php 
/**
* pager: класс генерации списка страниц для постраничного вывода информации
*
* @package modules
* @subpackage pager
* @version 0.2.3
*/
class pager
{
/**
* базовый URL, к которому добавляется переменная page с соответствующим номером страницы
*
* @var string
*/
private $baseurl;

/**
* номер текущей страницы
*
* @var integer
*/
private $page;

/**
* число объектов на страницу
*
* @var integer
*/
private $perPage;

/**
* общее число объектов
*
* @var integer
*/
private $itemsCount;

/**
* число номеров страниц, которые будут выводиться возле текущего
* в случае, если между текущей и первой (или последней) страницей слишком много страниц
* выглядит это примерно так:
* 1 ... 2 <b>3</b> 4 ... 20
* (текущая страница выделена жирным)
* в данном случае $roundItems = 1
*
* @var integer
*/
private $roundItems;

/**
* рассчитанное значение общего числа страниц
*
* @var integer
*/
private $pagesTotal;

/**
* Флаг, изменяющий порядок страниц на противоположный (от больших к меньшим)
*
* @var boolean
*/
private $reverse;

/**
* переменная для хранения сгенерированного результата
* для предотвращения ненужной повторной обработки
*
* @var array
*/
private $result;

/**
* конструктор
*
* @param string $baseurl базовый урл
* @param integer $page номер текущей страницы
* @param integer $perPage число объектов на одну страницу
* @param integer $roundItems число номеров страниц возле текущей
* @param boolean $reverse обратный порядок страниц
*/
public function __construct($baseurl, $page, $perPage, $roundItems = 2, $reverse = false)
{
$baseurl = preg_replace('/([&?])page=.*?($|&)/i', '$1', $baseurl);

if (((
$end = strrpos($baseurl, '&')) || ($end = strrpos($baseurl, '?'))) && $end === strlen($baseurl) - 1) {
$baseurl = substr($baseurl, 0, -1);
}

$this->baseurl = $baseurl;
$this->page = (int)$page;
$this->setPerPage($perPage);
$this->itemsCount = 0;
$this->roundItems = (int)$roundItems;
$this->reverse = $reverse;
}

/**
* метод установки числа объектов на 1 страницу
*
* @param integer $value
*/
private function setPerPage($value)
{
$this->perPage = ($value < 1) ? 10 : (int)$value;
}

/**
* метод получения числа объектов на 1 страницу
*
* @return integer
*/
public function getPerPage()
{
return
$this->perPage;
}

/**
* Возвращает фактический номер страницы
*
* @return integer
*/
public function getRealPage()
{
return
$this->reverse ? $this->getPagesTotal() - $this->page + 1 : $this->page;
}

/**
* Получение номера текущей страницы
*
* @return integer
*/
public function getPage()
{
return
$this->page;
}

/**
* Возвращает ссылку или номер следующей страницы
*
* @param boolean $withUrl если false, то возвращает только номер страницы
* @return string|null ссылка на предыдущую страницу либо null, в случае если текущая страница последняя
*/
public function getNext($withUrl = true)
{
if (
$this->reverse && $this->page > 1) {
$page = $this->page - 1;
} elseif (!
$this->reverse && $this->page < $this->getPagesTotal()) {
$page = $this->page + 1;
}

return isset(
$page) ? ($withUrl ? $this->appendPageToUrl($page) : $page): null;
}

/**
* Возвращает ссылку или номер предыдущей страницы
*
* @param boolean $withUrl если false, то возвращает только номер страницы
* @return string|null ссылка на предыдущую страницу либо null, в случае если текущая страница первая
*/
public function getPrev($withUrl = true)
{
if (
$this->reverse && $this->page < $this->getPagesTotal()) {
$page = $this->page + 1;
} elseif (!
$this->reverse && $this->page > 1) {
$page = $this->page - 1;
}

return isset(
$page) ? ($withUrl ? $this->appendPageToUrl($page) : $page): null;
}

public function
getLast($withUrl = true)
{
$page = ($this->reverse ? 1 : $this->getPagesTotal());
if (
$withUrl) {
return
$this->appendPageToUrl($page);
}
return
$page;
}

public function
getFirst($withUrl = true)
{
$page = ($this->reverse ? $this->getPagesTotal() : 1);
if (
$withUrl) {
return
$this->appendPageToUrl($page);
}
return
$page;
}


/**
* Возвращает общее количество объектов
*
* @return integer
*/
public function getItemsCount()
{
return
$this->itemsCount;
}

/**
* Возвращает количество уже пролистанных объектов
*
* @return integer
*/
public function getOffset()
{
if (
$this->page > 0) {
$firstPage = $this->reverse ? $this->getPagesTotal() : 1;
$offset = abs($this->page - $firstPage) * $this->perPage;
} else {
$offset = 0;
}

return
$offset;
}

/**
* метод установки общего числа объектов
*
* @param integer $count
*/
public function setCount($count)
{
$this->itemsCount = (int)$count;

if (
$this->page <= 0) {
$this->page = $this->reverse ? $this->getPagesTotal() : 1;
} elseif (
$this->page > $this->getPagesTotal()) {
$this->page = $this->getPagesTotal();
}
}

/**
* метод получения чила страниц
*
* @return integer
*/
public function getPagesTotal()
{
if (empty(
$this->pagesTotal)) {
$this->pagesTotal = ceil($this->itemsCount / $this->getPerPage());
}
return
$this->pagesTotal;
}

/**
* метод получения части запроса, обеспечивающей выборку нужного числа объектов с нужным смещением
*
* @return object
*/
public function getLimitQuery()
{
$criteria = new criteria();

$offset = $this->getOffset();

return
$criteria->setLimit($this->perPage)->setOffset($offset);
}

/**
* метод получения сгенерированного "пейджинга" в массив
* во избежание повторного проведения аналогичных вычислений результаты кешируются в памяти
*
* @return array
*/
public function toArray()
{
if (empty(
$this->result)) {
$sign = $this->reverse ? -1 : 1;

$result = array();

$pagesTotal = $this->getPagesTotal();

if (
$this->itemsCount > 0) {
$firstPage = $this->reverse ? $pagesTotal : 1;
$result[$firstPage] = array('page' => $firstPage, 'url' => $this->appendPageToUrl($firstPage));

$leftSkip = ($this->reverse ? $pagesTotal - $this->page - 1 : $this->page - 2) > $this->roundItems;
$rightSkip = ($this->reverse ? $this->page - 2 : $pagesTotal - $this->page - 1) > $this->roundItems;

if (
$leftSkip) {
$result[] = array('skip' => true);
$left = $this->page - $sign * $this->roundItems;
} else {
$left = $firstPage + $sign;
}

if (
$rightSkip) {
$right = $this->page + $sign * $this->roundItems;
} else {
$right = $this->reverse ? 1 : $pagesTotal;
}


while (
$sign * ($right - $left) >= 0) {
$result[$left] = array('page' => $left, 'url' => $this->appendPageToUrl($left));
$left += $sign;
}

if (
$rightSkip) {
$result[] = array('skip' => true);
$lastPage = abs($firstPage - $pagesTotal) + 1;
$result[$lastPage] = array('page' => $lastPage, 'url' => $this->appendPageToUrl($lastPage));
}

if (isset(
$result[$this->page])) {
$result[$this->page]['current'] = true;
}
}

$this->result = $result;
}
return
$this->result;
}

/**
* метод получения отформатированного "пейджинга"
* для форматирования используется smarty и специальный шаблон
*
* @param string $tpl имя шаблона отображения страниц
* @return string
*/
public function toString($tpl = 'pager/pager.tpl')
{
$toolkit = systemToolkit::getInstance();
$smarty = $toolkit->getSmarty();
$smarty->assign('pages', $this->toArray());
return
$smarty->fetch($tpl);
}

protected function
appendPageToUrl($page)
{
if ((int)
$page === (int)$this->getFirst(false)) {
return
$this->baseurl;
}
return
$this->baseurl . (strpos($this->baseurl, '?') ? '&' : '?') . 'page=' . $page;
}
}
Ответ
#24
PROGRAMMATOR Написал:Первая это хорошо, если бы не первая, то было бы намного хуже. Могу пример дать пагинатора в MZZ.

Ну да=)

щас буду пробовать интегрировать в свой двиг...
Ответ
#25
Не для интеграции давал. Почитайте код, чтобы понять как оно работает. Да и не все из этого класса вам необходимо, большую часть можно удалить за ненадобностью.
Ответ
#26
Вот так. У меня родился интелект XD и я придумал для себя простенький вивод новостей на страничку, конечно содрал сами кнопки переключения между ними, но думаю что не поленился би в будущем и написал би свойRolleyes.
Так вот, если Програматор позволиш, пусть модери создадут для меня ( или я сам, руки вроде не кривие XD ) отдельную тему, ведь Я собрался создать ету CMS и написать для нее модули под все MMORPG игри ( WoW, la2, PW... ).. Или буду рад даже в етой теме все вилаживать.
PHP код:
<?php 
$nums
= 5;
Количество новостей на страничку...
PHP код:
<?php 
if (isset($_GET['page']))
{
$page = intval($_GET['page']);
}
else
{
$page = 1;
}

$query = "SELECT COUNT(*) AS `counter`
FROM `SE_news`"
;
$sql = mysql_query($query) or die(mysql_error());
$row = mysql_fetch_assoc($sql);

$elements = $row['counter'];

$pages = ceil($elements/$nums);

if (
$page < 1)
{
$page = 1;
}
elseif (
$page > $pages)
{
$page = $pages;
}

$start = ($page-1)*$nums;
Ну я думаю что ето понятно, для новичком советую прочитать пару книг по переменних, и т.п.
PHP код:
<?php 
LIMIT
{$start}, {$nums}
ето то что нуно вставить в Ваш запрос!
PHP код:
<?php 
if ($page > 1)
{
$res = ' <a href="?page=1">начало</a> ... <a href="?page=' . ($page-1) . '"><сюда</a> ';
}

for (
$i=$left_neighbour; $i<=$right_neighbour; $i++)
{
if (
$i != $page)
{
$res = (' <a href="?page=' . $i . '">' . $i . '</a> ');
}
else
{
// выбранная страница
$res = (' <b>' . $i . '</b> ');
}
}

if (
$page < $pages)
{
$res = (' <a href="?page=' . ($page-1) . '"><< Предущая</a> | <a href="?page=' . ($page+1) . '">Следующая >></a> | <a href="?page=' . $pages . '">конец</a> ... ');

} else {
$res = (' <a href="?page=' . ($page-1) . '"><< Предущая</a> | конец ... ');
}
А ето сам вивод кнопок на страничку, конечно все можно изменить даже сказал би нужно изменить но для начала подойдет.
Ответ


Перейти к форуму:


Пользователи, просматривающие эту тему: 1 Гость(ей)