IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Веб-программирование (http://www.imho.ws/forumdisplay.php?f=29)
-   -   Пагинация - или деление по приблизительному количеству символов (http://www.imho.ws/showthread.php?t=27610)

Marchello 22.04.2003 10:46

Пагинация - или деление по приблизительному количеству символов
 
Пример на асп: здесь

Это самое надо решить на уровне пхп. Надо, что бы текст из БД или файло брали бы по кускам 250 слов (если такое возможно) или 1500 знаков. Но тогда возникает проблема - надо отставить неразорванные преддожения, как это сделать, хотя бы читсо на уровне теории, если скрипт работает по принципу количества символов?

PHP код:

$str "bla bla nla. asdfasd. fdsfd fafsasf. asasdwe fdscz asdvc. afasffas. afafs vcxrqw cvea."
$arr explode('.',$str); 
$c count($arr); 
$k 0
$j 0
$str = array(""); 
for (
$i=0;$i<$c;$i++) { 
  if (
$k 20) { 
    
$k 0
    
$j++; 
    
$str[$j] = ""
  } 
  
$str[$j] .= $arr[$i]."."
  
$k += strlen($arr[$i]); 

$str[$j] = substr($str[$j],0,-1); 
print_r($str); 

???

Aeon 22.04.2003 11:49

гм. мне приходит в голову нечто вроде:
PHP код:

$str "bla bla nla. asdfasd. fdsfd fafsasf. asasdwe fdscz asdvc. afasffas. afafs vcxrqw cvea."
$arr explode('.',$str); 

$pagetext = array();
$char_limit 250;
foreach(
$arr as $sentence
{
    
$i 0;
    if(
strlen($pagetext[$i]) + strlen($sentence) > $char_limit
    {
        
$i++;
    }
    
$pagetext[$i] .= $sentence;
}

foreach(
$pagetext as $page) {
    echo 
$page;


правда это, во первых, лимитирует только по числу букв - не считает количества слов, и во вторых, задохнётся если ему попадётся предложение длиннее лимита страницы (250 букв в этом примере).

Marchello 22.04.2003 21:45

Aeon
PHP код:

echo substr($str,$_GET['pos'],strpos($str,". ",$_GET['pos']+1500)); 

А как тебе такое?

Aeon 22.04.2003 22:23

класс... только, граница страницы пройдёт не на, скажем, 1500ой букве, а на следующей точке найденной после этой буквы, т.е., если попадётся длинное предложение, вполне может растянуть одну страницу до двух или больше.

Marchello 23.04.2003 21:17

final
 
А вот так?

PHP код:

$str "bla bla nla. asdfasd. fdsfd fafsasf. asasdwe fdscz asdvc. afasffas. afafs vcxrqw cvea."

preg_match_all("/.{15,}?\./s",$str,$out,PREG_PATTERN_ORDER); 
list(
$out) = $out

print_r($out);



for (
$i=0$i<count($out); $i++) { 
$pgnum $i+1
echo 
"<option value=$pgnum>$pgnum</option>"



Marchello 24.04.2003 21:42

Стас, что ты думашь по этому поводу. Аэон - где ты?

Aeon 25.04.2003 04:03

Marchello
хм, по regex я не эксперт, я бы поспрашивал на irc... по моему правда list($out) = $out; там совершенно не нужно.

Marchello 25.04.2003 09:25

Я тоже не эксперт, потому и спросил - может знаешь или как...


Часовой пояс GMT +4, время: 09:32.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.