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

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

  • ukroficer

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

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

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

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

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

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

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

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

    на аватарке)
    adw/0
  • ivanscm

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

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

    а де слоника купить мона?
    С возвращением, Пiха!
  • ukroficer

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

    Spritz 20 августа 2010 г. 16: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 г. 16:50, спустя 1 минуту 10 секунд

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

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

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

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

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

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


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


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

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

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

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

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

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


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

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

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

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

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

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

    ды мне что в прошлое идти что ли?
    С возвращением, Пiха!
  • pasha

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

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

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

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