![]() |
Страницы (2): [1] 2 » Показаны 29 сообщений на этой странице |
Форум сетевых администраторов (http://netadmin.ws/forum/index.php)
- PHP (http://netadmin.ws/forum/forumdisplay.php?forumid=6)
-- Пагинация - или деление по приблизительному количеству символов (http://netadmin.ws/forum/showthread.php?threadid=5175)
Пагинация - или деление по приблизительному количеству символов
Пример на асп: здесь
Ð_то самое надо решить на уровне пхп. Надо, что бы текст из БД или файло брали бы по кускам 250 слов (если такое возможно) или 1500 знаков. Но тогда возникает проблема - надо отставить неразорванные преддожения, как это сделать, хотя бы читсо на уровне теории, если скрипт работает по принципу количества символов?
__________________
Международное брачное агенство в Сибири.
Может для начала использовать в качестве разделителя точку, т.е. чтобы в каждом элементе массива были целиковые предложения, ну и потом отсматривать каждое, т.е. если текущее и соседние предложения в сумме меньше 1500 символов, то группировать их вместе....
А функции какие можешь посоветовать, как с трудом себе это представляю. Если поможешь, помогу и я. Я то дизайнер, куча добра всякого, это все, что я могу. Са-то это написать не смогу, надо будет другому обяснить, что и примерно как должно быть. Согласен?
__________________
Международное брачное агенство в Сибири.
Функции все стандартные,
split() - для разделения
strlen() - для подсчета количества символов в строке.
$strVar{$offset}
substr()
while(){
}
???
__________________
Международное брачное агенство в Сибири.
Хмм. Ð_то ведь пхп, имхо $strVar{$offset} выглядит немного странно ..
Хорошо. Допустим у тебя в $str лежит весь текст целиком. Нужно выдрать первый 1500 знаков с учетом предложений (если то же нужно сделать не получая весь текст в переменную - это немного другой разговор).
Посмотри на код - он делает то, что тебе надо только для 50 символов, а не 1500. Думаю преобразовать его не проблема =))
$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;
Попробую.
Мне надо тип чтобы я в text area загрузил текст, а он сам его забил бы по этим страницам. Ð_то что-то уже другое? То-есть можно и не хранить в переменную, мне главное, что бы это работало быстро.
__________________
Международное брачное агенство в Сибири.
quote:погоди, что-то я не очень понял чего же ты зочешь. Твой пример у меня не открывается, так что объясни четко словами, что и с чем должен делать скрипт. Желательно еще и для чего.
Первоначальное сообщение от Tagore
Попробую.
Мне надо тип чтобы я в text area загрузил текст, а он сам его забил бы по этим страницам. Ð_то что-то уже другое? То-есть можно и не хранить в переменную, мне главное, что бы это работало быстро.
Скорее всего ему нужно это использовать для статей. Чтобы скрипт автоматом создавал разные страницы. Думаю твой пример подходит для этого немного его переделав например засунув в функцию и передавть туда текст и оффсет например номер страницы и функия бы возвращяла нужный отрывок.
1. Ð_азбиваем текст на массив, каждый элемент которого будет содержать отрывок текста.
2. Возвращяем $massiv[$offset].
__________________
Всегда есть решение.
Тогда получается что-то в этом роде (через $str возвращается массив "страниц"):
$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);
как вам такая функция, возврашающая страницы текста $TEXT, в котором минимум $chars_per_page.
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;
}
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;
}
__________________
www.relmax.com
Web Site Design and Development
Насчет длинных предложений - можно использовать strrpos и сокращать объем текста, а не увеличивать его. Имхо pos лучше, чем while.
единственное замечание по всему этомоу, имхо нужно использовать для поиска точку и пробел, именно так заканчивается предложение а не просто точку, так как под раздачу может попасть строка содержащяя script.php или domain.com.
polo добавил 21-04-2003 в 19:22:22:
Даже было бы логичнее использовать проверку как точка пробел и заглавная буква, тогда ошибки правктически исключены.
__________________
Всегда есть решение.
да точка+пробел это правильнее. У меня как раз урл'ы резались на стыке страниц.
но не совсем правильно как я убедился на своих задачах. Ð_то проверка не пропускает конец абзаца! Т.е. если предложение последнее в абзаце, ф-я будет прибавлять к тексту первое предложение следующей страницы.
а вообще как раз логичнее (это конечно мое мнение - и относится оно большей частью к моему текущему проекту) разбивать текст на страницы по абзацам, т.е. 1500 символов + текст до конца абзаца.
но вот не могу пока придумать как это сделать.
strpos($TEXT,".\n") - не работает..
__________________
www.relmax.com
Web Site Design and Development
пхпклуб.нет
polo
RomikChef говорит что:
echo substr($str,$_GET['pos'],strpos($str,".",$_GET['pos']+1500));
Ð_то как?
__________________
Международное брачное агенство в Сибири.
| Формат времени GMT. Текущее время 16:20. | Страницы (2): [1] 2 » Показаны 29 сообщений на этой странице |
Powered by: vBulletin Version 2.2.4
Copyright © Jelsoft Enterprises Limited 2000, 2001.