Forum Webscript.Ru

Программирование => PHP => Тема начата: AlexanderLV от 05 Марта 2005, 23:10:20

Название: Как ограничить длину вывода
Отправлено: AlexanderLV от 05 Марта 2005, 23:10:20
На этот раз мне пришлось попотеть не один час, решая эту задачу, но, к сожалению, ничего путёвого не вышло :)

Требуется сделать постраничный вывод текста.

    Цель:  Текст должен быть ограничен $maxkol символов, с сохранением разделения на абзацы.
 
 С нумерацией я и сам разобрался, а вот с УМНЫМ делением страницы пришлось туговато ...

Номер страницы передаётся браузеру через адресную строку.
Мы имеем переменную $text с текстом всей статьи.

План действий такой:

1. Разбиваем текст по параграфам
$par = explode ("((((",  $text);

(((( — любой набор символов перед



2. Ограничиваем кол-во параграфов ($max), учитывая № страницы($page), загоняем результат в $text2
$nom=$page*$max;
for ($i=($page-1)*$max; $i<$nom; $i++){
$text2 =$text2." ".$par["$i"];}

3. Проверяем на кол-во символов
$slova = explode (" ",  $text2);
$ctr=count($slova);
if ($ctr<$maxkol)

4. И увеличиваем $max на 1, если кол-во символов меньше заданного
{$max++;}


5. Как теперь прогнать всё это с новым значением $max с сохранением нового значения, для последующего использования при обращении к «другой странице»?

Я пытался использовать «while», но, скорее всего, у меня маловато опыта (на последней странице происходит зацикливание(при большом $maxkol) + новое значение $max игнорируется при обработке другой страницей):

$maxkol=200;
$ctr=0;
$par = explode ("((((",  $text);
$max=0;
while ($ctr<$maxkol2) {  $max++; $text2=\'\';
$nom=$page*$max;
for ($i=($page-1)*$max; $i<$nom; $i++){
$text2 =$text2." ".$par["$i"];}
$slova = explode (" ",  $text2);
$ctr=count($slova);
}
echo "$text2";
.................


 Читал кое-что про «do» , но возникли проблемы с синтаксисом.

В результате должен получиться текст немного больше заданного, но с сохранением форматирования по абзацам + новая страница должна начинаться с того места, где закончилась предидущая.

 Помогите, пожалуйста, т.к. идея есть, а осуществить её не получается.

 Возможно, кто-то предложит свой вариант решения «Цели» — буду очень благодарен.

Название: Как ограничить длину вывода
Отправлено: Меняздесьдавнонет от 06 Марта 2005, 09:21:32
я хренею.
чувак, скажи честно - НА СКОЛЬКИ форумах ты нафлудил свой вопрос?
На 20? 100?

Ты не считаешь ли, случайно, что время, потраченное на флуд, лучше было бы потратить на решение своей проблемы самостоятельно?

или тебе своего времени ОЧЕНЬ жалко?
Настолько жалко своего сопливого ламерского времени, что не жалко времени сотен специалистов, которые будут, ничего не зная о том, что тебе давно ответили, тратить время на ответ?
Название: Как ограничить длину вывода
Отправлено: AlexanderLV от 06 Марта 2005, 21:43:56
Цитировать
НА СКОЛЬКИ форумах ты нафлудил свой вопрос?


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

Вопрос я задал на Protoplex.ru, но, к сожалению, никто не смог мне помочь, тогда я решил написать на другие форумы (php5.ru, webscript.ru, phpclub.ru), на мой взгляд, самые лучшие, в надежде, что хоть кто-то мне поможет.

Алгоритм уже выработан, большая часть технической части завершена, осталось только кое-что подредаткировать, но, к сожалению ни у кого, кроме «НА СКОЛЬКИ форумах ты нафлудил свой вопрос?» решимости не хватило! Вот такие вы, МАСТЕРА Рунета! как что — так сразу! А как помочь — от вас месяц не дождёшься! (Возможно я немного погорячился, но в основном так оно и есть) .

Но этот форум не для этого, так что если хотите выразить свои эмоции, напишите мне письмо — разберёмся что к чему.
Название: Как ограничить длину вывода
Отправлено: Lutik от 09 Марта 2005, 11:00:38
AlexanderLV, я за 10 минут нашел то что ты пытаешься сделать битый час! Попробуй воспользоватся гуглом! там есть хороший пример вывода постранично текста!
Вот мой пример того что ты хотишь сделать:

function postr_text($text, $n){
$simbol = "\\n";
$open = "[";
$close = "]";
$onpage = $n;
$s=$text;
$ar=explode("\\n",$s);
for($x=0;$x    $t=count($ar);
    }

if(empty($_GET[\'page\'])){$_GET[\'page\'] = 0;}
$begin = $_GET[\'page\'] * $onpage;
$end = $begin + $onpage;
$pages = $t / $onpage;

for($i=$begin;$i<$end;$i++){
if($ar[$i]){$ex = explode($simbol,$ar[$i]);
for($b=0;$b echo $ex[$b];}
echo "
";
}
}
?>

Страницы: 
for($p=0;$p<$pages;$p++){
$pg = $p+1;
    if($_GET[\'page\']==$p){echo $open.$pg.$close;
    }else{
echo $open."".$pg."".$close;}}
}
Название: Как ограничить длину вывода
Отправлено: AlexanderLV от 11 Марта 2005, 00:13:41
Да, Google действительно помог! Твой вариант подошёл не очень, но этот — ИМЕННО то, что надо(ограничен $pagesize символов, с сохранением разделения на абзацы):

Предположим, что текст статьи у вас "загнан" в переменную $article, а "критический размер" - в $pagesize, тогда для PHP кусок скрипта может выглядеть примерно так:



if (strlen($article) > $pagesize and $_GET[\'page\'] != \'nopages\') {
$page = (isset($_GET[\'page\']) and (int)$_GET[\'page\'] > 0) ? ((int)$_GET[\'page\']) - 1 : 0;
$offset = $pagesize*$page;
$start = ($offset) ? strpos($article, \'

\', $offset)+3 : 0;
$end = (strpos($article, \'

\', $offset+$pagesize)) ? strpos($article, \'

\', $offset+$pagesize) : strlen($article);
if (strlen($article) - $end < $pagesize/2) $end = strlen($article);
$data = substr($article, $start, $end-$start);
if ($page) $pages .= "предыдущая страница ";
if ($page or $end < strlen($article)) $pages .= "вывести все ".(round(strlen($article)/1024))." Kb ";
if ($end < strlen($article)) $pages .= "следующая страница ";
$data .= "

$pages
";
} else
$data = $article;


Спасибо всем за внимание, я думаю тема исчерпана