За последние 24 часа нас посетили 62974 программиста и 1747 роботов. Сейчас ищут 806 программистов ...

пагинация по кол-ву символов

Тема в разделе "PHP для новичков", создана пользователем lualva, 18 янв 2009.

  1. lualva

    lualva Активный пользователь

    С нами с:
    21 ноя 2008
    Сообщения:
    19
    Симпатии:
    0
    Приветствую всех гуру PHP.
    Вопрос в следующем: имеется таблица в БД, в ней есть текстовое поле, которое содержит текст статьи с примерным количеством символов 5000-30000 или больше-меньше, текст разбит на несколько параграфов.
    Саму пагинацию я делать научился по кол-ву записей в таблице, а вот какой функцией воспользоваться для определения длины извлеченной строки из таблицы - не знаю.
    И другой вопрос, допустим я хочу разбить текст по 5000 символов на страницу, как сделать так, чтоб если этот пятитысячный символ заканчивается в середине параграфа, этот параграф печатался полностью на 1 странице, а 2 страница начиналась со следующего параграфа.
     
  2. lexa

    lexa Активный пользователь

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
  3. lualva

    lualva Активный пользователь

    С нами с:
    21 ноя 2008
    Сообщения:
    19
    Симпатии:
    0
    продолжу тему, вот тут немного накалякал:
    PHP:
    1. <?php
    2.     include ("blocks/bd.php");
    3.     $result = mysql_query ("SELECT str FROM options WHERE id = '2'", $db);
    4.     $myrow = mysql_fetch_array ($result);
    5.     $num = $myrow["str"]; //получили число (1000)
    6.     // Извлекаем из URL текущую страницу
    7.         @$page = $_GET['page'];
    8.        
    9.     $result1 = mysql_query ("SELECT text FROM glavnaya WHERE id = '1'", $db);
    10.     $myrow1 = mysql_fetch_array ($result1);
    11.     $posts = strlen($myrow1['text']); //посчитали символы в тексте
    12.     $total = (($posts - 1) / $num) + 1;
    13.     $total =  intval($total);
    14.     $page = intval($page);
    15.         if(empty($page) or $page < 0) $page = 1;
    16.           if($page > $total) $page = $total;
    17.     $start = $page * $num - $num;
    18.     $result = mysql_query("SELECT text FROM glavnaya ORDER BY id LIMIT $start, $num" , $db);   
    19.             if (!$result)
    20.                 {
    21.                     echo "<p>К сожалению статьи нет.<br></p>";              
    22.                 }
    23.             while (@$myrow = mysql_fetch_array ($result))            
    24.                 {
    25.                     printf("<p>%s</p>", $myrow['text']);
    26.                 }
    27.     // Проверяем нужны ли стрелки назад
    28.     if ($page != 1) $pervpage = '<a href=un-1.php?page=1>Первая</a> | <a href=un-1.php?page='. ($page - 1) .'>Предыдущая</a> | ';
    29.     // Проверяем нужны ли стрелки вперед
    30.     if ($page != $total) $nextpage = ' | <a href=un-1.php?page='. ($page + 1) .'>Следующая</a> | <a href=un-1.php?page=' .$total. '>Последняя</a>';          
    31.     // Находим две ближайшие станицы с обоих краев, если они есть
    32.     if($page - 5 > 0) $page5left = ' <a href=un-1.php?page='. ($page - 5) .'>'. ($page - 5) .'</a> | ';
    33.     if($page - 4 > 0) $page4left = ' <a href=un-1.php?page='. ($page - 4) .'>'. ($page - 4) .'</a> | ';
    34.     if($page - 3 > 0) $page3left = ' <a href=un-1.php?page='. ($page - 3) .'>'. ($page - 3) .'</a> | ';
    35.     if($page - 2 > 0) $page2left = ' <a href=un-1.php?page='. ($page - 2) .'>'. ($page - 2) .'</a> | ';
    36.     if($page - 1 > 0) $page1left = ' <a href=un-1.php?page='. ($page - 1) .'>'. ($page - 1) .'</a> | ';        
    37.     if($page + 5 <= $total) $page5right = ' | <a href=un-1.php?page='. ($page + 5) .'>'. ($page + 5) .'</a>';
    38.     if($page + 4 <= $total) $page4right = ' | <a href=un-1.php?page='. ($page + 4) .'>'. ($page + 4) .'</a>';
    39.     if($page + 3 <= $total) $page3right = ' | <a href=un-1.php?page='. ($page + 3) .'>'. ($page + 3) .'</a>';
    40.     if($page + 2 <= $total) $page2right = ' | <a href=un-1.php?page='. ($page + 2) .'>'. ($page + 2) .'</a>';
    41.     if($page + 1 <= $total) $page1right = ' | <a href=un-1.php?page='. ($page + 1) .'>'. ($page + 1) .'</a>';          
    42.     // Вывод меню если страниц больше одной         
    43.     if ($total > 1)
    44.         {
    45.             Error_Reporting(E_ALL & ~E_NOTICE);
    46.             echo "<div class=\"pstrnav\" align = \"center\">";
    47.             echo $pervpage.$page5left.$page4left.$page3left.$page2left.$page1left.'<b>'.$page.'</b>'.$page1right.$page2right.$page3right.$page4right.$page5right.$nextpage;
    48.             echo "</div>";
    49.             }  
    50. ?>
    в пробном тексте примерно 17500 знаков, пагинатор выводит 18 страниц
    но загвоздка в том, что весь текст выводит на 1 странице, а остальные страницы пустые :(
    помогите добрым советом
     
  4. ATI

    ATI Активный пользователь

    С нами с:
    3 янв 2008
    Сообщения:
    254
    Симпатии:
    0
    Адрес:
    Москва
    $num чему равна?
    Чую опять поповским кодом и уроками пахнет..
     
  5. lualva

    lualva Активный пользователь

    С нами с:
    21 ноя 2008
    Сообщения:
    19
    Симпатии:
    0
    $num = $myrow["str"]; //получили число (1000)
     
  6. ATI

    ATI Активный пользователь

    С нами с:
    3 янв 2008
    Сообщения:
    254
    Симпатии:
    0
    Адрес:
    Москва
    Это я и так вижу в коде, ты можешь посмотреть чему численно равна эта переменная у тебя?
     
  7. lualva

    lualva Активный пользователь

    С нами с:
    21 ноя 2008
    Сообщения:
    19
    Симпатии:
    0
    $num = $myrow["str"] - тоже самое, что и $num = 1000;

    ты про это? или я чёто не допенькиваю
     
  8. ATI

    ATI Активный пользователь

    С нами с:
    3 янв 2008
    Сообщения:
    254
    Симпатии:
    0
    Адрес:
    Москва
    Проверь именно, чему равна $num.
    PHP:
    1. <?php
    2. echo $num; exit();
    3. ?>
     
  9. lualva

    lualva Активный пользователь

    С нами с:
    21 ноя 2008
    Сообщения:
    19
    Симпатии:
    0
    проверил, в браузер вывелось 1000