Модераторы: Aliance, skyboy, MoLeX, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> пагинатор, класс постраничной навигации 
:(
    Опции темы
niaz
Дата 26.11.2008, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 22.7.2006

Репутация: нет
Всего: нет



А есть ли универсальный класс постраничной навигации? Фреймворки не предлагать!
PM MAIL ICQ   Вверх
skyboy
Дата 26.11.2008, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: нет
Всего: 260



Цитата(niaz @  26.11.2008,  11:48 Найти цитируемый пост)
А есть ли универсальный класс постраничной навигации?

универсальный - это чтоб принял произвольной структуры данные и сам догадался, как разбить на страницы? и сам догадался, как должны выглядеть запросы к БД на получение новых N элементов, начиная с М-ного?

Добавлено через 9 секунд
такой не существует.
PM MAIL   Вверх
niaz
Дата 26.11.2008, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 22.7.2006

Репутация: нет
Всего: нет



так давайте создадим. я уже начал писать. скоро выложу на ваш суд.
PM MAIL ICQ   Вверх
MoLeX
Дата 26.11.2008, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: нет
Всего: 140



Цитата(niaz @  26.11.2008,  13:13 Найти цитируемый пост)
так давайте создадим. я уже начал писать. скоро выложу на ваш суд. 

ОО. и он будет уметь

Цитата(skyboy @  26.11.2008,  13:01 Найти цитируемый пост)
универсальный - это чтоб принял произвольной структуры данные и сам догадался, как разбить на страницы? и сам догадался, как должны выглядеть запросы к БД на получение новых N элементов, начиная с М-ного?


???


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
Валерия
Дата 26.11.2008, 15:13 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 10.3.2007

Репутация: 1
Всего: 8



Я сделала универсальный)
Он адресную строку парсит на наличие page=
Ну там не класс, а пару функций, не люблю ооп...
И потом сам делает LIMIT нужный, его только в запрос подставляй и всё))
PM MAIL   Вверх
vasac
Дата 26.11.2008, 15:30 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1060
Регистрация: 4.5.2006

Репутация: нет
Всего: 36



Цитата(Валерия @  26.11.2008,  15:13 Найти цитируемый пост)
Он адресную строку парсит на наличие page=

Уже не универсальный smile
PM WWW   Вверх
Валерия
Дата 26.11.2008, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 10.3.2007

Репутация: 1
Всего: 8



Всё универсальное очень много весит, и очень долго работает...
PM MAIL   Вверх
niaz
Дата 26.11.2008, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 22.7.2006

Репутация: нет
Всего: нет



Ну я бы не сказал что много будет весить и тяжело работать! Поэтому и предлагаю вместе сорудить класс легкий и универсальный. Надеюсь вместе оптимизируем и все будет ок!
PM MAIL ICQ   Вверх
Валерия
Дата 27.11.2008, 03:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 10.3.2007

Репутация: 1
Всего: 8



Немного оффтоп, но я заметила, что когда кто-то делает что-то универсальное, потом выходит куча универсальных классов.
Но когда это всё объеденяется для одного сайта, то получается ужас)))
Или это у меня так )))
PM MAIL   Вверх
niaz
Дата 1.12.2008, 09:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 22.7.2006

Репутация: нет
Всего: нет



Блин я зашел в тупик! Пока что незнаю как реализовать шаблон!  smile 
PM MAIL ICQ   Вверх
bars80080
Дата 1.12.2008, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: нет
Всего: 315



 smile не вот, пока не попробуешь не узнаешь. универсальный класс постраничной навигации невозможен. слишком много придётся в него вариаций включить и всё равно найдётся ситуация, когда он не подойдёт. максимум что можно сделать - создать несколько наиболее употребительных вариантов. либо не заморачиваться и написать просто навигационную панельку, которая будет подключаться к выбираемому шаблону страниц
PM MAIL WWW   Вверх
niaz
Дата 1.12.2008, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 22.7.2006

Репутация: нет
Всего: нет



Да ты прав! Универсальным думаю этот класс нельзя сделать! Можно сделатьь наиболее употребляемые. Вот сделаю тот которым я пользуюсь обязательно выложу. smile 
PM MAIL ICQ   Вверх
nerezus
Дата 2.1.2009, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: нет
Всего: 43



Цитата

Всё универсальное очень много весит, и очень долго работает...
 Советую почитать что-то по оптимизации, тебе надо.

http://rsdn.ru/article/philosophy/Optimization.xml



--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
niaz
Дата 9.2.2009, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 22.7.2006

Репутация: нет
Всего: нет



Написал я полуниверсальный пагинатор:

Код

<?php

class Page{
    
    /**
     * - totalitems : общее количество записей
     * - page : текущая страница
     * - items : количество записей на странице
     * - perpage : количество номеров страниц перед и после текущей страницы
     * - nplinks:
     * - mode : 0-next (default) , 1 - back
     * - start: для mysql базы
     * - link: ссылка
     */
    

    public $param;
        
///////////////////////////////////////////////////////////////////////////////////////////////////////////////    
    public function init($options = array()){ // подготовка данных
        
        $param = $options;
        
        $param['totalpages'] = ceil($options['totalitems'] / $options['items']);  // количество страниц
        
        //------------------------------------------------------------
        
        if (isset($options['page'])) {
                
            preg_match("/[\d]+/", $options['page'], $matches);
            
            $param['page'] = $matches[0];
                
            if($param['page'] > $param['totalpages'] || $param['page'] <= 0) { // проверяется валидность страницы
        
                if ($options['mode'] == 1) {
            
                    $param['page'] = $param['totalpages'];
        
                } else {
                    
                    $param['page'] = 1;
        
                }
    
            }
                
        } else {
                
            if ($options['mode'] == 1) {
            
                $param['page'] = $param['totalpages'];
        
            } else {
                    
                $param['page'] = 1;
        
            }
        }
        
        //------------------------------------------------------------
        
        $param['start'] = $options['items'] * ($param['page'] - 1); // вычисляем с какой выводить обьявление
        
        $this->param = $param;
        
        return $param;

    }
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
    public function getlinks(){
        
        $param = $this->param;
        
        if ($param['mode'] == 1) {

            $prevPage = $param['page']+1;
            $nextPage = $param['page']-1;
            
            $startPage = $param['page'] + $param['perpage'];
            $endPage = $param['page'] - $param['perpage'];
            
            //------------------------------------------------------------
            if ($startPage > $param['totalpages']) {
                $startPage = $param['totalpages'];    
            }
            //------------------------------------------------------------    
            if ($endPage < 1) {
                $endPage =    1;
            }
            //------------------------------------------------------------            
            if ($startPage < $param['totalpages']) {
                
                $link .= "<a class=\"pglink\" href=".$param['link'].$param['totalpages']."><<</a>\n";    
            }
            //------------------------------------------------------------
            if ($startPage < $param['totalpages']) {
                
                $link .= "<a class=\"pglink\" href=".$param['link'].$prevPage."><<</a>\n";
                    
            }
            //------------------------------------------------------------
            for($i = $startPage; $i >= $endPage; $i--) { // вывод ссылок страниц
                if ($i == $param['page']) {
                    $link .= "<span class=\"pglink\">".$i."</a>\n";
                } 
                else 
                {
                 $link .= "<a class=\"pglink\" href=".$param['link'].$i.">".$i."</a>\n";
              }
            }
            //------------------------------------------------------------
            
            if ($endPage > 1) {
                
                $link .= "<a class=\"pglink\" href=".$param['link'].$nextPage.">>></a>\n";    
            }
            //------------------------------------------------------------
            if ($endPage > 1) {
                
                $link .= "<a class=\"pglink\" href=".$param['link'].'1'.">></a>\n";
                    
            }        
            
        } else {

            $prevPage = $param['page']-1;
            $nextPage = $param['page']+1;
            
            $startPage = $param['page'] - $param['perpage'];
            $endPage = $param['page'] + $param['perpage'];
            
            //------------------------------------------------------------
            if ($startPage<1) {
                $startPage = 1;    
            }
            //------------------------------------------------------------    
            if ($endPage>$param['totalpages']) {
                $endPage =    $param['totalpages'];
            }
            //------------------------------------------------------------            
            if ($startPage > 1) {
                
                $link .= "<a class=\"pglink\" href=".$param['link']."1"."><<</a>\n";    
            }
            //------------------------------------------------------------
            if ($startPage > 1) {
                
                $link .= "<a class=\"pglink\" href=".$param['link'].$prevPage."><<</a>\n";
                    
            }
            //------------------------------------------------------------
            for($i = $startPage;$i<=$endPage;$i++) { // вывод ссылок страниц
                if ($i == $param['page']) {
                    $link.= "<a class=\"pglink\" href=".$param['link'].$i.">cant</a>\n";
                } 
                else 
                {
                 $link.= "<a class=\"pglink\" href=".$param['link'].$i.">".$i."</a>\n";
              }
            }
            //------------------------------------------------------------
            
            if ($endPage < $param['totalpages']) {
                
                $link .= "<a class=\"pglink\" href=".$param['link'].$nextPage.">>></a>\n";    
            }
            //------------------------------------------------------------
            if ($endPage < $param['totalpages']) {
                
                $link .= "<a class=\"pglink\" href=".$param['link'].$param['totalpages'].">></a>\n";
                    
            }
            //------------------------------------------------------------            
        }
        //------------------------------------------------------------
        return $link;
    }

///////////////////////////////////////////////////////////////////////////////////////////////////////////////    
}

?>



пример использования:

Код

<?php

require_once ("paginator.php");

$params = array(
    'totalitems' => 356,
    'items' => 7,
    'page' => $_GET['page'],
    'mode' => 0,
    'perpage' => 8,
    'link' => '?page=',
);
$pg = new Page;

$pg->init($params);

echo $pg->getlinks();

?>



ссылки можно выводить в последовательном 2 3 4 5 и в обратном порядке 5 4 3 2 для этого надо менять значение mode

Добавлено через 2 минуты и 51 секунду
Жду исправлений и предложений!
PM MAIL ICQ   Вверх
enof
Дата 9.2.2009, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 837
Регистрация: 23.1.2009
Где: Санкт-Петербург

Репутация: нет
Всего: 35



Что такое контруктор и свойства, знаете? smile 
Цитата(niaz @  9.2.2009,  15:06 Найти цитируемый пост)
preg_match

wtf?
Цитата(niaz @  9.2.2009,  15:06 Найти цитируемый пост)
    
Код

            if ($options['mode'] == 1) {
            
                $param['page'] = $param['totalpages'];
        
            } else {
                    
                $param['page'] = 1;
        
            }

? мб, проще так написать?
Код

$param['page'] = $options['mode'] ? $param['totalpages'] : 1;


 smile 
Только щас дошло, что этот класс только для вывода ссылок.
А я тут ищу, где работа с бд.

Сможете ответить на вопрос:
Собственно где может пригодиться этот класс?

Добавлено через 5 минут и 15 секунд
Яркий пример того, как одним примером можно послать на*** всю идеологию ООП. smile 
PM MAIL ICQ Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Libraries | Следующая тема »


 




[ Время генерации скрипта: 0.0642 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.