ФорумПрограммированиеPHP для идиотов → Постраничный вывод из базы( Pagination)

Постраничный вывод из базы( Pagination)

  • ukroficer

    Сообщения: 66 Репутация: N Группа: Кто попало

    Spritz 20 августа 2010 г. 13:37

    Господа пыхтящие вывожу на Ваш обозрение класс постраничного вывода думаю новичкам будет полезно,профи будь те добры оцените,мой труд!
  • technobulka

    Сообщения: 4540 Репутация: N Группа: Джедаи

    Spritz 20 августа 2010 г. 13:38, спустя 1 минуту 21 секунду

    эм… где?
    Высокоуровневое абстрактное говно
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 20 августа 2010 г. 13:39, спустя 33 секунды

    на аватарке)
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • ivanscm

    Сообщения: 1251 Репутация: N Группа: Джедаи

    Spritz 20 августа 2010 г. 13:44, спустя 5 минут 19 секунд

    а де слоника купить мона?
    С возвращением, Пiха! hyperoff.ru - качественный хостинг php
  • ukroficer

    Сообщения: 66 Репутация: N Группа: Кто попало

    Spritz 20 августа 2010 г. 13:49, спустя 4 минуты 21 секунду

    <?php
    
    include_once ('mysql.class.php');
    
    
    class MyclassPage extends MyBD
    {
    
    
        public $tabl_pages, //Таблица с которой работает класс
            $count_block, //По Сколько выводить елементов с базы на страницы
            $query_sel_page, //query запрос с базы даных
            $both_number = 2, // Количество  страниц справа и слева
            $link_left = "", //Что выводить с лева от параметоров вывода класса в URI
            $link_right = "", //Что выводить с права от параметоров вывода класса в URI
            $conect_page = "", //Паременная соединения с базой
            $set_podlist, //Переменая которая получает даную страницу
            $link = "", //"Это ссылка впреди ссылки на страницы"
            $id_get = 'get', //"Это параметр указывает в каком формате выводить ссылки настраницы        если get(по умолчанию то вид силки ?name=value…… если не get то вид name/value)) //    ""
            $view_get = ""; //возвращает вид формата вывода
        //Запрос к базе данных вида WHERE id = 1; и сортировка
        protected $where, $order, $one = 1;
    
    
        //——————————————————————————
        // Это метод определения вида URI
        function viwsget()
        {
            if ($this->id_get != 'get')
            {
                $this->set_podlist = "";
                $this->view_get = "/$this->set_podlist";
            } else
            {
    
                $this->view_get = "$this->set_podlist=";
                $this->set_podlist = $_GET[$this->set_podlist];
            }
        }
    
    
        //——————————————————————————
    
        function all_page()
        {
    
            $this->viwsget();
    
            //Запрос который определяет количество записей в базе;
            $sql = "SELECT count(*)FROM $this->tabl_pages{$this->where}{$this->order}";
            $query_pages = $this->query($sql, $this->conect_page);
            $all_pages = $this->get($query_pages);
            $all_pages = $all_pages[0];
            //
    
    
            //Вычесляет полное количество на которых будут розмещаться блоки с БД
            $blockpage = ceil($all_pages / $this->count_block);
            //
    
            //Проверяет был ли передан параметр set_podlist(страница)
            if (($this->set_podlist != 0) and ($this->set_podlist <= $blockpage))
            {
                $podlist = intval($this->set_podlist);
            } elseif (empty($set_podlist))
            {
                $podlist = 1;
            } else
                $podlist = 1;
    
            //
    
            //Вычисляем с какой записе выводить страинцу
            $first = ($podlist - 1) * ($this->count_block);
            //
    
            //Даёт query запрос  в БД по заданым параметрам
            //Обработчик пишется отдельно уже в контролере
            $sql1 = "SELECT * FROM $this->tabl_pages{$this->where}{$this->order} LIMIT $first,{$this->count_block}";
            $this->query_sel_page = $this->query($sql1, $this->conect_page);
            //
            // Готовит к выводу $pages
            $pages = "";
            //
    
    
            //$both_number равна количеству элементов с права и лева
            $both_number = $this->both_number;
            //
    
            //Выводим первую страинцу если это не первая
            if ($podlist != 1)
            {
                $pages .= "<a href='$this->link$this->view_get$this->one$this->link_right'>1</a> ";
            }
            //
    
            //Выводим … если страинца больше на 1 от количества элементов по бокам
            if ($podlist > $this->both_number + 2)
            {
    
                $pages .= "…";
            }
            //
    
            //Выводим боковые элементы с лева от выводимлй записи
            if ($podlist > $this->both_number + 1)
            {
                for ($i = $podlist - $both_number; $i < $podlist; $i++)
                {
    
                    $pages .= "<a href='$this->link$this->link_left$this->view_get$i$this->link_right'>$i</a> ";
                }
    
    
            } else
            {
                for ($i = 2; $i < $podlist; $i++)
                {
                    $pages .= "<a href='$this->link$this->link_left$this->view_get$i$this->link_right'>$i</a> ";
                }
            }
            //
    
            //Выводим текущую страницу
            if ($podlist >= 1)
            {
    
    
                $pages .= "<a href='$this->link$this->link_left$this->view_get$podlist$this->link_right ' class = 'link_page_activ'>$podlist</a> ";
    
            }
            //
    
            //Выводим боковые элементы с права от выводимой записи
            if ($podlist + $this->both_number < $blockpage)
            {
                for ($i = $podlist + 1; $i <= $podlist + $this->both_number; $i++)
                {
                    $pages .= "<a href='$this->link$this->link_left$this->view_get$i$this->link_right'>$i</a> ";
                }
            } else
            {
                for ($i = $podlist + 1; $i < $blockpage; $i++)
                {
                    $pages .= "<a href='$this->link$this->link_left$this->view_get$i$this->link_right'>$i</a> ";
    
                }
            }
            //Выводим … если общее количество страниц больше текущей страницы + элементы с права +1
    
            if ($blockpage > $podlist + $both_number + 1)
            {
                $pages .= "…";
            }
            //
    
            //Выводим последнюю страницу
            if ($podlist != $blockpage)
            {
                $pages .= "<a href='$this->link$this->link_left$this->view_get$blockpage$this->link_right'>$blockpage</a> ";
            }
    
            return $pages;
            //
        }
    
    
    }
    
    ?>
    Спустя 120 сек.
    А Вот упрощённый вариант класса работы с БД(От моего товарища Ильи )

    
    
    <p>
    <?php 
    
    
    
    
    
    class MyBD
    {
    
        public $host="";
        public $login = "";
        public $password = "";
        public $db="";
    
    
        function connect()
        {
            mysql_connect($this->host, $this->login, $this->password);
            mysql_select_db($this->db);
            mysql_query("set names utf8") or die("set names utf8 failed");
            //mysql_query("SET NAMES CP1251");
        }
    
        function query($sql)
        {
            $this->connect();
            if (!$result = mysql_query($sql)) {
                echo mysql_error() . "<br>";
                echo ("ERROR BASE");
            }
    
            return $result;
        }
    
        function get($sql)
        {
            return mysql_fetch_array($sql);
        }
    
        function checkpass()
        {
            $this->connect();
    
        }
        function query_num_rows($sql)
        {
            return mysql_num_rows($this->query($sql));
        }
    
    
        function is_num_rows($sql)
        {
            return mysql_num_rows($sql);
        }
    
    
        function close()
        {
            @mysql_close();
        }
    
    }
    
    
    
    ?></p>
    
    
  • truth4oll

    Сообщения: 463 Репутация: N Группа: Адекваты

    Spritz 20 августа 2010 г. 13:50, спустя 1 минуту 10 секунд

    http://tinyurl.com/2wh5tvz во нашел, за 15$
  • Givi

    Сообщения: 2284 Репутация: N Группа: Адекваты

    Spritz 20 августа 2010 г. 14:05, спустя 15 минут 3 секунды

    ukroficer, не буду много объяснять, но по сути, уже глядя на стиль написания понятно что класс говененький. И если он таки будет работать, то я рад. Но в целом он ппц как мне не нравится.
    Ну и это: нужно чтоб методы отдавали на вьюшку либо массив с параметрами для построения списка страниц либо же уже готовый, но СПИСОК, а не простое перечисление ссылок. Со списком легче визуальные фишки CSS'кой намутить. Но это ИМХО.
  • ukroficer

    Сообщения: 66 Репутация: N Группа: Кто попало

    Spritz 20 августа 2010 г. 14:09, спустя 3 минуты 49 секунд


    ukroficer, не буду много объяснять, но по сути, уже глядя на стиль написания понятно что класс говененький. И если он таки будет работать, то я рад. Но в целом он ппц как мне не нравится.
    Ну и это: нужно чтоб методы отдавали на вьюшку либо массив с параметрами для построения списка страниц либо же уже готовый, но СПИСОК, а не простое перечисление ссылок. Со списком легче визуальные фишки CSS'кой намутить. Но это ИМХО.


    Пока жи что бы ты поменял..?Пример?
    Спустя 20 сек.
    А работает он нормально…
  • krasun

    Сообщения: 1370 Репутация: N Группа: Джедаи

    Spritz 20 августа 2010 г. 14:15, спустя 5 минут 49 секунд

    ukroficer, http://zendframework.com/manual/ru/zend.paginator.html сравни со своим и поймешь, что Givi имел ввиду
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 20 августа 2010 г. 14:18, спустя 3 минуты 31 секунду


    а де слоника купить мона?
    помню таких рахдавали на phpconf 2008
    Спустя 64 сек.
    http://blgo.ru/blog/2009/07/14/gopaginator/ этим мы всегда пользуемся….
    а для джанги свой юзается - http://code.google.com/p/django-pagination/
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • Faster

    Сообщения: 1159 Репутация: N Группа: Кто попало

    Spritz 20 августа 2010 г. 14:29, спустя 10 минут 31 секунду

    скажем так он хардкорный
  • ivanscm

    Сообщения: 1251 Репутация: N Группа: Джедаи

    Spritz 20 августа 2010 г. 14:41, спустя 12 минут 49 секунд

    ды мне что в прошлое идти что ли?
    С возвращением, Пiха! hyperoff.ru - качественный хостинг php
  • pasha

    Сообщения: 1048 Репутация: N Группа: Адекваты

    Spritz 20 августа 2010 г. 15:06, спустя 24 минуты 15 секунд

    а накой хрен? Может еще учимся делать ленту новостей?

Пожалуйста, авторизуйтесь, чтобы написать комментарий!