Разбиение на страницы (pagination)

Тема в разделе "PHP", создана пользователем D@nil, 3 мар 2008.

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

    D@nil

    Регистр.:
    1 окт 2006
    Сообщения:
    338
    Симпатии:
    122
    Зачача: Разбить текст на страницы, с учетом конца предложения.

    те выбираем кусок длинной ~2000, доходим до точки, разбиваем.

    если у кого есть подобный код скиньте.


    вот от друпала кусок:
    PHP:
    // -- content --
            // explode the body on the <!--pagebreak--> tag
            
    $pages explode('<!--pagebreak-->'$content);

            
    // if more than one page, generate the links on the bottom
            
    if (count($pages) > 1) {

                
    // process only if the user doesn't want all the pages
                
    $pageNo $_GET['pageNo'];

                
    $totalPages count($pages);

                
    // check we're not too far or too few
                
    if (!isset($pageNo) || empty($pageNo)) {
                    
    $pageNo 1;
                }

                if (
    $pageNo $totalPages) {
                    
    $pageNo $totalPages;
                }

                if (
    $pageNo != 'ALL') {

                    
    $basepage $_GET['q'];

                    for(
    $i 1$i <= $totalPages$i++) {
                        if (
    $pageNo != $i) {
                            
    $links .= l($i$basepage, array(), 'pageNo=' $i) . ' ';
                        } else {
                            
    $links .= $i ' ';
                        }
                    }

                    
    $prev = (($pageNo 1) < 1) ? : ($pageNo 1);
                    
    $next = (($pageNo 1) > $totalPages) ? $totalPages : ($pageNo 1);

                    if (
    $pageNo 1) {
                        
    $x variable_get('pagination_prev''previous');
                        if (
    $x != '') {
                            
    $links l($x$basepage, array(), 'pageNo=' $prev ' ') . ' | ' $links;
                        }
                    }

                    if (
    $pageNo $totalPages) {
                        
    $x variable_get('pagination_next''next');
                        if (
    $x != '') {
                            
    $links .= ' | ' l($x$basepage, array(), 'pageNo=' $next ' ');
                        }
                    }

                    
    $content $pages[($pageNo 1)] . '<p />' variable_get('pagination_pre''Go to page:') . $links ' | ' l(variable_get('pagination_single''Single page'), $basepage, array(), 'pageNo=ALL' ' ');

                } 
    // end check for ALL param

            
    // end check for > 1 page to display
    Лолько надо разбиение по концу предложения, а не по разделютелю ( <!--pagebreak--> )
     
  2. puika

    puika

    Регистр.:
    25 ноя 2006
    Сообщения:
    262
    Симпатии:
    277
    Тоже интересует данная тема,может у кого есть решение,поделитесь.
     
  3. FaLL3N

    FaLL3N Постоялец

    Регистр.:
    4 дек 2006
    Сообщения:
    100
    Симпатии:
    17
    навскидку, если лимит 2000 символов, то проходиться вперед по кажому символу и сравнивать его с точкой, если нашли - разбиваем, нет - ищем в другую сторону
     
  4. D@nil

    D@nil

    Регистр.:
    1 окт 2006
    Сообщения:
    338
    Симпатии:
    122
    нашел, подобное решение есть в коде WordPress
     
  5. puika

    puika

    Регистр.:
    25 ноя 2006
    Сообщения:
    262
    Симпатии:
    277
    приведи код или подскажи где копать если нетрудно;)
     
  6. lolshik

    lolshik

    Регистр.:
    21 фев 2008
    Сообщения:
    316
    Симпатии:
    127
  7. D@nil

    D@nil

    Регистр.:
    1 окт 2006
    Сообщения:
    338
    Симпатии:
    122
    криво но для моих нужд пойдет

    пользуемся:
    PHP:
    $text '';

    $lines wordwrap($text2000"<!--break-->");
    $lines explode ("<!--break-->"$lines);


    $num count($lines);  // Число записей всего.
    $perpage 7// Кол-во, показываемых записей на странице.
    $pages_count = @ceil($num/$perpage);
    $pages 'Страницы:';
    for(
    $j=1;$j<=$pages_count;$j++)
    {

        if (
    $_GET['page'] != $j)
        {
            
    $pages .= ' <a href="?page='.$j.'"><b>'.$j.'</b></a> ';
        }
        else
        {
            
    $pages .= ' <b>'.$j.'</b> ';
        }
        echo 
    $pages;
    }
    2000 - число символов на странице.
     
  8. ar4ik

    ar4ik

    Регистр.:
    26 ноя 2007
    Сообщения:
    331
    Симпатии:
    95
    Я только учусь использовать регулярки, так что не пинайте :)))
    PHP:
    preg_match_all("/([\s\S]{1900,2100}\.)|([\s\S]{1,}$)/is"$text,$resultPREG_PATTERN_ORDER);
    $result[0] - массив с результатами
     
  9. bumer3

    bumer3

    Регистр.:
    10 янв 2008
    Сообщения:
    291
    Симпатии:
    154
    На сколько я понимаю, то это разбиение даже без учета слов.
     
  10. D@nil

    D@nil

    Регистр.:
    1 окт 2006
    Сообщения:
    338
    Симпатии:
    122
    Разбивает с учетом конца слова.
    http://ru2.php.net/wordwrap

    успел хорошенько потестить, корректно работает.
     
Статус темы:
Закрыта.