 |
 |
Форум сетевых администраторов » Программирование » PHP » Пагинация - или деление по приблизительному количеству символов
| Автор |
| Тема |
 |
|
 |
|
|
|
Сибиряк
|
Пагинация - или деление по приблизительному количеству символов |
[сооб. #41390]
19-04-2003 10:40 |
|
Сибиряк


Зарегистрирован: Sep 2002
Место проживания: Новосибирск
Публикаций: 1255
Статус:  |
Пагинация - или деление по приблизительному количеству символов
| [сообщение #41390] |
Пример на асп: здесь
Ð_то самое надо решить на уровне пхп. Надо, что бы текст из БД или файло брали бы по кускам 250 слов (если такое возможно) или 1500 знаков. Но тогда возникает проблема - надо отставить неразорванные преддожения, как это сделать, хотя бы читсо на уровне теории, если скрипт работает по принципу количества символов?
__________________
Международное брачное агенство в Сибири.
Сообщить модератору об этом сообщении | Предупреждение | IP: определен
|
19-04-2003 10:40 |
|
|
Участник+
|
| Может для начала использовать в качестве... |
[сооб. #41398]
19-04-2003 11:37 |
|
Участник+


Зарегистрирован: Aug 2002
Место проживания: Питер
Публикаций: 69
Статус:  |
Может для начала использовать в качестве разделителя точку, т.е. чтобы в каждом элементе массива были целиковые предложения, ну и потом отсматривать каждое, т.е. если текущее и соседние предложения в сумме меньше 1500 символов, то группировать их вместе....
Сообщить модератору об этом сообщении | Предупреждение | IP: определен
|
19-04-2003 11:37 |
|
|
Сибиряк
|
| А функции какие можешь посоветовать, как с... |
[сооб. #41414]
19-04-2003 15:03 |
|
Сибиряк


Зарегистрирован: Sep 2002
Место проживания: Новосибирск
Публикаций: 1255
Статус:  |
А функции какие можешь посоветовать, как с трудом себе это представляю. Если поможешь, помогу и я. Я то дизайнер, куча добра всякого, это все, что я могу. Са-то это написать не смогу, надо будет другому обяснить, что и примерно как должно быть. Согласен?
__________________
Международное брачное агенство в Сибири.
Сообщить модератору об этом сообщении | Предупреждение | IP: определен
|
19-04-2003 15:03 |
|
|
Участник+
|
Функции все стандартные,
split() - для разделения
strlen()... |
[сооб. #41416]
19-04-2003 15:15 |
|
|
Сибиряк
|
$strVar{$offset}
substr()
while(){
}
??? |
[сооб. #41419]
19-04-2003 15:56 |
|
|
Участник+
|
| Хмм. Ð_то ведь пхп, имхо $strVar{$offset} выглядит немного... |
[сооб. #41440]
19-04-2003 19:31 |
|
Участник+


Зарегистрирован: May 2002
Место проживания: Владимирская обл.|Москва
Публикаций: 165
Статус:  |
Хмм. Ð_то ведь пхп, имхо $strVar{$offset} выглядит немного странно ..
Хорошо. Допустим у тебя в $str лежит весь текст целиком. Нужно выдрать первый 1500 знаков с учетом предложений (если то же нужно сделать не получая весь текст в переменную - это немного другой разговор).
Посмотри на код - он делает то, что тебе надо только для 50 символов, а не 1500. Думаю преобразовать его не проблема =))
PHP:
$str = "bla bla nla. asdfasd. fdsfd fafsasf. asasdwe fdscz asdvc. afasffas. afafs vcxrqw cvea.";
$arr = explode('.',$str);
$c = count($arr);
$k = 0;
$str = "";
for ($i=0;$i<$c;$i++){
if ($k < 50)
$str .= $arr[$i].".";
$k += strlen($arr[$i]);
}
print $str;
Сообщить модератору об этом сообщении | Предупреждение | IP: определен
|
19-04-2003 19:31 |
|
|
Сибиряк
|
Попробую.
Мне надо тип чтобы я в text area загрузил... |
[сооб. #41516]
20-04-2003 09:09 |
|
Сибиряк


Зарегистрирован: Sep 2002
Место проживания: Новосибирск
Публикаций: 1255
Статус:  |
Попробую.
Мне надо тип чтобы я в text area загрузил текст, а он сам его забил бы по этим страницам. Ð_то что-то уже другое? То-есть можно и не хранить в переменную, мне главное, что бы это работало быстро.
__________________
Международное брачное агенство в Сибири.
Сообщить модератору об этом сообщении | Предупреждение | IP: определен
|
20-04-2003 09:09 |
|
|
Участник+
|
[QUOTE]Первоначальное сообщение от Tagore
[B]Попробую.
Мне... |
[сооб. #41522]
20-04-2003 11:14 |
|
Участник+


Зарегистрирован: May 2002
Место проживания: Владимирская обл.|Москва
Публикаций: 165
Статус:  |
quote: Первоначальное сообщение от Tagore
Попробую.
Мне надо тип чтобы я в text area загрузил текст, а он сам его забил бы по этим страницам. Ð_то что-то уже другое? То-есть можно и не хранить в переменную, мне главное, что бы это работало быстро.
погоди, что-то я не очень понял чего же ты зочешь. Твой пример у меня не открывается, так что объясни четко словами, что и с чем должен делать скрипт. Желательно еще и для чего.
Тот код, что я тебе написал, берет первые 1500 символов из текста и выводит их с учетом предложений. Такое например можно использовать для предпросмотра неких текстов. А что нужно тебе?
Сообщить модератору об этом сообщении | Предупреждение | IP: определен
|
20-04-2003 11:14 |
|
|
Администратор
|
| Скорее всего ему нужно это использовать для... |
[сооб. #41531]
20-04-2003 13:50 |
|
Администратор


Зарегистрирован: May 2001
Место проживания:
Публикаций: 4642
Статус:  |
Скорее всего ему нужно это использовать для статей. Чтобы скрипт автоматом создавал разные страницы. Думаю твой пример подходит для этого немного его переделав например засунув в функцию и передавть туда текст и оффсет например номер страницы и функия бы возвращяла нужный отрывок.
1. Ð_азбиваем текст на массив, каждый элемент которого будет содержать отрывок текста.
2. Возвращяем $massiv[$offset].
__________________
Всегда есть решение.
Сообщить модератору об этом сообщении | Предупреждение | IP: определен
|
20-04-2003 13:50 |
|
|
Участник+
|
| Тогда получается что-то в этом роде (через... |
[сооб. #41534]
20-04-2003 14:14 |
|
Участник+


Зарегистрирован: May 2002
Место проживания: Владимирская обл.|Москва
Публикаций: 165
Статус:  |
Тогда получается что-то в этом роде (через $str возвращается массив "страниц"): 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);
Сообщить модератору об этом сообщении | Предупреждение | IP: определен
|
20-04-2003 14:14 |
|
|
Участник+
|
| как вам такая функция, возврашающая страницы... |
[сооб. #41579]
21-04-2003 08:46 |
|
Участник+

Зарегистрирован: Aug 2002
Место проживания: Новосибирск
Публикаций: 67
Статус:  |
как вам такая функция, возврашающая страницы текста $TEXT, в котором минимум $chars_per_page.
PHP:
function DivideToPages($TEXT,$chars_per_page = 1500) {
$pages = array();
$page_no = 0;
while ($TEXT!='') {
$pages[$page_no] = substr($TEXT,0,$chars_per_page);
$TEXT = substr($TEXT,$chars_per_page);
while (($pages[$page_no][strlen($pages[$page_no])-1]!='.')&&($TEXT!='')) {
$pages[$page_no] .= $TEXT[0];
$TEXT = substr($TEXT,1);
}
$page_no++;
}
return $pages;
}
peteK добавил 21-04-2003 в 08:59:55:
попытка соптимизировать. цикл while до точки убрал - если длинные предложения в тексте будут - будет не оч. хорошо работать предыдущий вариант. Хотя конечно не факт что функция pos намного быстрее будет работать. Кто что думает?
PHP:
function DivideToPages($TEXT,$chars_per_page = 1500) {
$pages = array();
$page_no = 0;
while ($TEXT!='') {
$pages[$page_no] = substr($TEXT,0,$chars_per_page);
$TEXT = substr($TEXT,$chars_per_page);
if ($TEXT!='') {
$pos = strpos($TEXT,'.');
if (!($pos === false)) {
$pages[$page_no] .= substr($TEXT,0,$pos+1);
$TEXT = substr($TEXT,$pos+1);
}
}
$page_no++;
}
return $pages;
}
__________________
**censored**
Web Site Design and Development
Сообщение было отредактировано peteK 21-04-2003 в 08:48
Сообщить модератору об этом сообщении | Предупреждение | IP: определен
|
21-04-2003 08:46 |
|
|
Участник+
|
| Насчет длинных предложений - можно использовать... |
[сооб. #41605]
21-04-2003 14:27 |
|
Участник+


Зарегистрирован: May 2002
Место проживания: Владимирская обл.|Москва
Публикаций: 165
Статус:  |
Насчет длинных предложений - можно использовать strrpos и сокращать объем текста, а не увеличивать его. Имхо pos лучше, чем while.
Сообщить модератору об этом сообщении | Предупреждение | IP: определен
|
21-04-2003 14:27 |
|
|
Администратор
|
| единственное замечание по всему этомоу, имхо... |
[сооб. #41635]
21-04-2003 19:21 |
|
Администратор


Зарегистрирован: May 2001
Место проживания:
Публикаций: 4642
Статус:  |
единственное замечание по всему этомоу, имхо нужно использовать для поиска точку и пробел, именно так заканчивается предложение а не просто точку, так как под раздачу может попасть строка содержащяя script.php или domain.com.
polo добавил 21-04-2003 в 19:22:22:
Даже было бы логичнее использовать проверку как точка пробел и заглавная буква, тогда ошибки правктически исключены.
__________________
Всегда есть решение.
Сообщить модератору об этом сообщении | Предупреждение | IP: определен
|
21-04-2003 19:21 |
|
|
Участник+
|
| да точка+пробел это правильнее. У меня как... |
[сооб. #41641]
21-04-2003 20:02 |
|
Участник+

Зарегистрирован: Aug 2002
Место проживания: Новосибирск
Публикаций: 67
Статус:  |
да точка+пробел это правильнее. У меня как раз урл'ы резались на стыке страниц.
но не совсем правильно как я убедился на своих задачах. Ð_то проверка не пропускает конец абзаца! Т.е. если предложение последнее в абзаце, ф-я будет прибавлять к тексту первое предложение следующей страницы.
а вообще как раз логичнее (это конечно мое мнение - и относится оно большей частью к моему текущему проекту) разбивать текст на страницы по абзацам, т.е. 1500 символов + текст до конца абзаца.
но вот не могу пока придумать как это сделать.
strpos($TEXT,".\n") - не работает..
__________________
**censored**
Web Site Design and Development
Сообщить модератору об этом сообщении | Предупреждение | IP: определен
|
21-04-2003 20:02 |
|
|
|
Формат времени GMT. Текущее время 11:52.
|
Правила форума:
Вы не можете создавать новые темы.
Вы не можете отвечать на существующие темы.
Вы не можете прикреплять файлы.
Вы не можете редактировать свои сообщения. |
HTML теги выкл.
Спец. код вкл.
Смайлики вкл.
[IMG] тег выкл.
|
|
|
|
| |
Page generated in 0.83834910 seconds (99.29% PHP - 0.71% MySQL) with 26 queries.
|
 |