Разбитие по страницам

Тема в разделе "PHP", создана пользователем shmitacc, 21 сен 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. shmitacc

    shmitacc Постоялец

    Регистр.:
    31 авг 2009
    Сообщения:
    76
    Симпатии:
    6
    Помогите реализовать функцию разбиения контента на страницы...
    что бы эт функция была универсальной (что б в разные места сайта подставлять и она работала)

    пока что мало что есть... вот

    name - имя
    kolZap - количество записей
    kolZapInPage - количество записей на странице
    item - текущая страница

    PHP:
    function setMorePages($Name$kolZap$kolZapInPage$item)
    {

    }
    а что в самой фенки делать не имею понятия :nezn:
     
  2. axevs

    axevs Создатель

    Регистр.:
    13 янв 2008
    Сообщения:
    37
    Симпатии:
    45
    shmitacc нравится это.
  3. SergXP

    SergXP Постоялец

    Регистр.:
    8 мар 2008
    Сообщения:
    66
    Симпатии:
    11
    переменная "$Name" это случайно не массив?
    как вы себе представляете результат вызова этой ф-ции?
    PHP:
    setMorePages("Новость1"20101
    получаем:
    Код:
    Новость1
    Новость1
    Новость1
    ...
    Новость1
    
    Страница [B]>1<[/B] 2
    
     
  4. Arqin

    Arqin

    Регистр.:
    17 мар 2009
    Сообщения:
    185
    Симпатии:
    37
    В зависимости от области и предмета выборки будет разниться и функция. Конкретизируйте вопрос.
     
  5. verissimo

    verissimo

    Регистр.:
    26 сен 2006
    Сообщения:
    438
    Симпатии:
    139
    Писал месяц назад гостевую книгу для тренировки. Оттуда функция

    PHP:
    function vyvod_iz_faila()

    {

    global 
    $zapisi_v_gb$messages_per_page$totlines$line$pagini$page;



    @
    $data=array_reverse(file("messages.txt"));
    //@$data=file("messages.txt");
    $totlines=count($data);


    if (!isset(
    $totlines))
    {
    $totlines=0;
    }


    $int=ceil($totlines/$messages_per_page); // вычисляем количество страниц 

    // Проверяем значение параметра page 
    if(empty($_GET['page'] ))
      {
     
    $page $int
      }

    else 
    $page abs($_GET['page']); 



    // Вывод ссылок



    if ($int*$messages_per_page $totlines): $pages=$int+1; else:
    $pages=$int; endif; if(@$page || @$page $pages) {$page=1;}




    for (
    $link=$pages;$link >=1;$link--) // Выводим ссылки на другие страницы

     
    {

       if (
    $link!=$page)
         {
         @
    $line.="<a href='".$_SERVER["SCRIPT_NAME"]."?page=$link'>[$link]</a>"
         }
        if (
    $link==$page
         {
          @
    $line.=$link ";
         }

          if (!isset(
    $line))
             {
             
    $line=1;
             }

    }


    $pagini "<p>Всего записей $totlines, Страницы <b>$line</b></p>";


    if (!isset(
    $page)) {$page=1;} 
    if (!isset(
    $line)) {$line=1;}

    $to=$totlines+(1-$page)*$messages_per_page


    $from=$to-$messages_per_page


    if (
    $from 0) {$from=0;} 

    ob_start();


    for(
    $j=$from$j <= $to-1$j++)

    {
    list(
    $name1,$time1,$date1,$message1)=split(":::","$data[$j]"4);
    $number1=$totlines-$j;
    include (
    'zapisi.tpl'); 
    }
     
    shmitacc нравится это.
  6. SergXP

    SergXP Постоялец

    Регистр.:
    8 мар 2008
    Сообщения:
    66
    Симпатии:
    11
    Поправьте ваше сообщение, вставьте код в теги PHP

    П.С. ужасно написан код, видно неопытность и к тому же глобальные переменные лучше не использовать, думаю не самый лучший пример для показа вывода постраничной навигации.
     
  7. juggernaut13

    juggernaut13 Постоялец

    Регистр.:
    23 авг 2009
    Сообщения:
    59
    Симпатии:
    16
  8. shmitacc

    shmitacc Постоялец

    Регистр.:
    31 авг 2009
    Сообщения:
    76
    Симпатии:
    6
    вообще то он именно в ПХП тегах
    а какие еще использовать переменные? или функция сама должна придумать переданные переменные?
    твоего примера я вообще не вижу...

    Повторяю, функция должна быть универсальной

    juggernaut13,verissimo,axevs, спасибо...
     
    verissimo нравится это.
  9. SergXP

    SergXP Постоялец

    Регистр.:
    8 мар 2008
    Сообщения:
    66
    Симпатии:
    11
    Специально для Вас написал практически универсальную ф-цию.
    Возможно есть и недочеты, но она работает с любой таблицей и с любыми полями. Их необходимо указывать самому.
    PHP:
    <?php
    $conn 
    mysql_connect ("localhost""root""")
            or die (
    "Соединение не установлено!");
      
    // print ("Соединение установлено!");
    @MYSQL_SELECT_DB("countclick") or die("Error connection base!");   
    function 
    nav($table,$per_page,$page,$order,$type$field = array()) {
        
    //$table - название таблицы
        //$per_page - кол-во выводимых записей на странице
        //$page - текущая страница
        //$order - сортировать по полю...
        //$type - вид сортировки
        //$field - массив с полями БД и выводом нужного текста, т.е. 
        //например, 'title'=>'Заголовок:'... "title" - название поля в таблице, "заголовок" - значение этого поля
        
    $per_page intval($per_page);
        
    $page intval($page);
        
    $limit $item $numrec;
        
    $sql "SELECT * FROM `".$table."`";
        
    $result mysql_query($sql);
        
    $num_rows mysql_num_rows($result);
        
    $start=abs($page*$per_page);
        if (
    sizeof($field) <= 0)
            
    $sql "SELECT * FROM `".$table."` ORDER BY `".$order."` ".$type." LIMIT ".$start.",".$per_page."";
        
    $sql "";
        
    $index array_keys($field);
        
    $count count($index);
        if (
    sizeof($field) > 0) {
            for (
    $i=0;sizeof($index)-1>=$i;$i++) {
                
    $sql $sql."`".$index[$i]."`";
                if (
    $i == $count-1$sql $sql." "; else $sql $sql.", ";
            }
            
    $sql "SELECT ".$sql." FROM `".$table."` ORDER BY `".$order."` ".$type." LIMIT ".$start.",".$per_page."";
            
    $result mysql_query($sql);
            
    $i 0;
            while(
    $row=mysql_fetch_array($result)) {
                for (
    $j 1$count-1>=$j$j++) {
                      echo 
    $field[$index[$j]]." ".$row[$index[$j]]."<BR>";
                }
                  
    $i++;
            };
            
    mysql_free_result($result);
            
    $num_pages ceil($num_rows/$per_page);
            echo 
    "Страницы: ";
            for(
    $i=0;$i<=$num_pages-1;$i++) {
                if (
    $i == $page) {
                    echo 
    $i." ";
                } else {
                    echo 
    '<a href="'.$_SERVER['PHP_SELF'].'?page='.$i.'">'.$i."</a> ";
                }
            }
        }
    }
    $page $_GET['page'];
    // Вызов ф-ции
    nav("news",2,$page,"time","DESC",array('id_new'=>'№','title'=>'Заголовок:','body'=>'Новость:','time'=>'Дата:'));
    ?>
    SQL DUMP для теста:
    Код:
    CREATE TABLE `news` (
      `id_new` int(11) NOT NULL auto_increment,
      `title` tinytext,
      `body` text,
      `time` datetime default NULL,
      PRIMARY KEY  (`id_new`)
    ) ENGINE=MyISAM AUTO_INCREMENT=11 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=11 ;
    INSERT INTO `news` VALUES (1, 'Новость первая', 'Текст новости', '2008-06-18 20:12:38');
    INSERT INTO `news` VALUES (2, 'Новость вторая', 'Текст новости 2', '2008-06-30 20:12:38');
    INSERT INTO `news` VALUES (3, 'Новость третья', 'Текст новости 3', '2008-07-18 20:12:38');
    INSERT INTO `news` VALUES (4, 'Новость четвертая', 'Текст новости 4', '2008-07-30 20:12:38');
    INSERT INTO `news` VALUES (5, 'Новость пятая', 'Текст новости 5', '2008-08-18 20:12:38');
    INSERT INTO `news` VALUES (6, 'Новость шестая', 'Текст новости 6', '2008-08-30 20:12:38');
    INSERT INTO `news` VALUES (7, 'Новость седьмая', 'Текст новости 7', '2008-09-18 20:12:38');
    INSERT INTO `news` VALUES (8, 'Новость восьмая', 'Текст новости 8', '2008-09-30 20:12:38');
    INSERT INTO `news` VALUES (9, 'Новость девятая', 'Текст новости 9', '2008-10-18 20:12:38');
    INSERT INTO `news` VALUES (10, 'Новость десятая', 'Текст новости 10', '2008-10-30 20:12:38');
     
    shmitacc нравится это.
Статус темы:
Закрыта.