![]() |
Показаны 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));
Ð_то как?
__________________
Международное брачное агенство в Сибири.
Re: пхпклуб.нет
quote:Ð_то правильно. Только, если добавлять замечание (одно из) Поло, то выглядеть должно так:
Первоначальное сообщение от Tagore
polo
RomikChef говорит что:
echo substr($str,$_GET['pos'],strpos($str,".",$_GET['pos']+1500));
Ð_то как?
echo substr($str,$_GET['pos'],strpos($str,". ",$_GET['pos']+1500));
Буду ждать ...
)
__________________
Международное брачное агенство в Сибири.
Можно еще такой вариант, так пришел в голову может и требует доработки но точно будет игнорировать последнее предложение:
preg_match_all("/(.{1500,}.s+)/sU", $text, $textarray);
__________________
Всегда есть решение.
quote:
Первоначальное сообщение от polo
Можно еще такой вариант, так пришел в голову может и требует доработки но точно будет игнорировать последнее предложение:
preg_match_all("/(.{1500,}.s+)/sU", $text, $textarray);
preg_match_all("/(.{1500,}\.\s+)/sU", $text, $textarray);
Вообще делает следующее: ищет последовательность из любых сиволов не менее 1500 до точки и любого пробельного символа. Вроде как работает но последнее предложение не показывает. Наверное нужно сделать (.s+)|(.$).
polo добавил 23-04-2003 в 15:10:03:
не, так не пашит.
__________________
Всегда есть решение.
polo
Откуда ты это все знаешь?
Хорошо, а как сделать, что бы он спрос с БД делил на эти части и сделал еще и JumnMenu ("dropdown box") со всеми страницами, то-есть навигацию?
__________________
Международное брачное агенство в Сибири.
quote:
Откуда ты это все знаешь?
__________________
Всегда есть решение.
Да нет же. Просто не понимаю. Как можно это все придумать. Самому. Быстро.
__________________
Международное брачное агенство в Сибири.
Ð_-э-э а что там придумывать, со всем моим респектом к Поло =))
2Тагоре, кокретизируй вопрос. btw сообщи уровень своих познаний в пхп и mysql - этих данных в твоем профиле нет.
Rumata добавил 23-04-2003 в 22:31:08:
quote:
Первоначальное сообщение от polo
Вообще делает следующее: ищет последовательность из любых сиволов не менее 1500 до точки и любого пробельного символа. Вроде как работает но последнее предложение не показывает.
$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);
То-есть $str может быть вызов из БД?
Ð_умата, мои познания дальше CSS (а его я знаю уж точно хорошо) не оченб радуе и меня самого, то-есть полностью руками, без никаких интсрументов, новый, хитрий код написать не смогу. Пока что.
Тогда вопрос - а как сделать, что бы ссылки с dropdownenu сделать на какждый отрезанный кусок?
__________________
Международное брачное агенство в Сибири.
Подсчитываешь кол-во страниц:
for ($i=0; $i<count($out); $i++) {
$pgnum = $i+1;
echo "<option value=$pgnum>$pgnum</option>";
}
__________________
Всегда есть решение.
quote:
То-есть $str может быть вызов из БД?
quote:
Тогда вопрос - а как сделать, что бы ссылки с dropdownenu сделать на какждый отрезанный кусок?
__________________
www.relmax.com
Web Site Design and Development
polo
Ок, буду смотреть, чо там получиться. Да вот как их снова всех вместе загнать, если у нас не одна глава одной книги в одной ячейки, а когда есть несколько глав, каждая из которыйх в отдельной ячейке, но все из одной книги, у них один parent_id.
Tagore добавил 24-04-2003 в 19:42:01:
quote:
Первоначальное сообщение от peteK
в переменную $str нужно считать данные из БД..
__________________
Международное брачное агенство в Сибири.
Как убрать Array на выводе?
<script language="JavaScript" type="text/JavaScript">
<!--
function MM_jumpMenu(targ,selObj,restore){ //v3.0
eval(targ+".location='"+selObj.options[selObj.selectedIndex].value+"'");
if (restore) selObj.selectedIndex=0;
}
//-->
</script>
</head>
<?$string = "Çàäîëæàâ äåíüãè ó åâðîïåéöà, òû ìîæåøü îñîáî íå äåðãàòüñÿ. Ñïîêîåí êàê îâöà, òóï êàê äóá, ê òîìó îí íå èìååò ñëàâíóþ ïðèâû÷êó ñâåðõ íåîáõîäèìîãî çàáîòèòüñÿ î ñâîåì êîøåëêå, íå è íå. Åñëè, íàïðèìåð, êàêîé-òî çíàêîìûé ïîïðîñèò åìó äî çàâòðà äâàäöàòêó, òî îí, ÷èñòî äëÿ ïîðÿäêà, çàïèøåò íà ïåðâîé ïîïàâøåéñÿ áóìàæêå òâîå èìÿ è… íàñêîðî ïîçàáóäåò. Ãîâîðÿ ÷òî ýòî ìåëî÷ü, îí áóäåò òðîíóò, êîãäà òû ïðèíåñåøü âñþ ñóììó â ñëåäóþùèé äåíü îáðàòíî. Êàê-òî äàæå íåóäîáíî çà íåãî, íà äóøå òÿæåëî.
Íå ïîäõîäè ñ ýòèì âîïðîñîì ê ðóññêîìó! Îí ñðàçó æå ñòàíåò îáðàùàòüñÿ ê òåáå ïî èìåíè, öåëîâàòü â ùåêó è îáíèìàòü êàê ðîäíîãî áðàòà. Ïîòîì îí íàïåòüñÿ ñ òîáîé îò âå÷íîé òîñêè è çàïëàòèò åùå è çà òàêñè äîìîé, çàñóíóâ ñîðîê ðóáëåé çà òâîé âîðîòíèê, íå ìîðãíóâ êðàåøêîì ãëàçà. Òâîÿ íåîáõîäèìîñòü äàñò ïî÷óâñòâîâàòü ãëóáèíó åãî ñîáñòâåííîãî ñîñòðàäàíèÿ, òîëùèíó êîøåëüêà è ïîäòîëêíåò ê ðàçìûøëåíèÿì î ñóùíîñòè ìèðîâîãî äîáðà. Õîòÿ, ìîæåò, çàâòðà ðàíî óòðîì îí îêîí÷àòåëüíî ïîéìåò, ÷òî ó íåãî íå õâàòàåò, íå õâàòàåò ñîâñåì íåìíîãî íà áóòûëêó, à òîñêà ðàñòåò è îñåäàåò, çàõâàòûâàåò, áðîñàåò è íåñåò, òîïèò, âäîõíîâëÿÿ ãóáèò è… îñóøàåò.  äíåâíèêå, íà êðàþøêå íåðàçáîð÷èâûì ïî÷åðêîì îí íàïèøåò: \"Êàê ïðèÿòíî áûòü õîðîøèì, êîãäà ýòî íå òðåáóåò ñâåðõ-óñèëèé îò òîãî, êòî æåðòâóåò ñîáîé. Ñåãîäíÿ ÿ ñïàñ ÷åëîâåêà.\"
Íà ÿçû÷åñêîì Êàâêàçå òåáå îòäàäóò çîëîòûå óêðàøåíèÿ, ðîäíóþ äî÷ü, æåíó, åå áîëòëèâûõ ïîäðóã è áàáóøêó íà ïðåêðàñíî óáðàííîì êîíå èç ñåðåáðà, ïðè îäíîì ðàçãîâîðå î äåíüãàõ. Êàâêàçöó íå çà÷åì çíàòü, ê ÷åìó òåáå äåíüãè. Äóìàåò îí - ðàç ïåðåñòóïèë ÷åëîâåê ÷åðåç ñâîþ ãîðäîñòü, çíà÷èò åñòü îñíîâàòåëüíàÿ òîìó ïðè÷èíà è îí íå èìååò ïðàâî îòêàçàòü. Ìîæåò áûòü òû êóïèøü âåðåâêó ñ êóñêîì õîçÿéñòâåííîãî ìûëà, à ìîæåò ïîäóøêó èç ãóñèíûõ ïåðüåâ äëÿ ëþáèìîé, íî åìó âñå îäíî, ÷òî ÷åðíî, ÷òî áåëî, ÷òî ñâåòëî, ÷òî ãîâíî. Êîãäà òû, íàêîíåö, íåäåëþ ñïóñòÿ, íàãðåáåøü äîñòàòî÷íî ìåëî÷è è íà åãî æå êîíå äîñêà÷åøü äî äâåðåé åãî äîìà, ñåðüåçíî ïîäóìàé - ñòîèò ëè âîéòè? Âåäü òû îáèäèøü åãî ýòèì, çàòðîíåøü âîïðîñ ÷åñòè è äîëãà, ìåæäó âàìè ìîæåò âîçíèêíóòü âðàæäà…
Ïîäóìàé ïåðåä òåì êàê â ñëåäóþùèé ðàç çàäîëæàòü äåíåã, ñòîèò ëè?
";
preg_match_all("/.{1500,}?./s", $string, $out, PREG_PATTERN_ORDER);
list($out) = $out;
print_r($out);
echo "<br><br>";
for ($i=0; $i<count($out); $i++) {
$pgnum = $i+1;
echo "<form name=\"form1\" id=\"form1\">";
echo "<select name=\"menu1\" onchange=\"MM_jumpMenu('parent',this,0)\">";
echo "<option value=$pgnum>$pgnum</option>";
echo "</select>";
echo "</form>";
}
?>
__________________
Международное брачное агенство в Сибири.
| Формат времени GMT. Текущее время 12:56. | Показаны 29 сообщений на этой странице |
Powered by: vBulletin Version 2.2.4
Copyright © Jelsoft Enterprises Limited 2000, 2001.