|
|
|
| надо большой текст с тегами хранящийся в базе разбить на страницы.
Попробовал сделать вот так:
$sql_select = mysql_query("SELECT * FROM information WHERE id='$id'");
$arr = mysql_fetch_array($sql_select);
$count_str = 1005;
$count_page = ceil(strlen($arr['text'])/$count_str)-1;
if (strlen($arr['text']) > $count_str)
{
if(!$_GET['str'])
{
echo "".substr($arr['text'], 0, $count_str)."";
echo '<br/><a href="?id='.$id.'&str=1">Далее »</a>';
}
else
{
echo "".substr($arr['text'], $count_str*$_GET['str'], $count_str)."";
echo '<br/><a href="?id='.$id.'&str='.($_GET['str']-1).'">Назад</a>';
if ($_GET['str'] != $count_page)
echo ' | <a href="?id='.$id.'&str='.($_GET['str']+1).'">Далее</a>';
}
}
else //если небольше, то выводим всю статью на одной страничке...
{
echo "$arr[text]";
}
}
while ($arr=mysql_fetch_array($sql_select));
|
Но есть такие проблемы:
1 слова делятся по полам при переходе на новую страницу
2 иногда появляются квадратики �
Подскажите пожалуйста. | |
|
|
|
|
|
|
|
для: BlueWolf
(11.09.2010 в 20:04)
| | а что так крупно нарезали-то?
целых пять сотен символов!
А если не одолеет кто столько за раз? | |
|
|
|
|
|
|
|
для: Trianon
(11.09.2010 в 20:11)
| | Это для мобильного сайта. | |
|
|
|
|
|
|
|
для: BlueWolf
(11.09.2010 в 20:04)
| | Проблему с квадратиками решил. Оказывается substr и strlen не правильно работают с utf-8
Поэтому я их заменил на mb_substr и mb_strlen. Теперь квадратиков нет.
Но всё же я не знаю как сделать так чтобы в местах разрыва текста ставился символ "-"
Посоветуйте как сделать лучше? | |
|
|
|
|
|
|
|
для: BlueWolf
(12.09.2010 в 15:37)
| | кем ставился?
если скриптом - достаточно просто добавить его в echo .
Неясно лишь - зачем. | |
|
|
|
|
|
|
|
для: Trianon
(12.09.2010 в 15:47)
| | знак "-" должен ставится в местах переноса слов
Если допустим слово "Слово" в конце страницы заканчивается Сл , а в следуюющей начинается ово. То тут надо ставить чтобы скрипт ставил хотя бы знак "-".
В идиале хотелось бы зделать так чтобы скрипт дописывал всё слово если даже оно выходит за рамки максимального на страницу. | |
|
|
|
|
|
|
|
для: BlueWolf
(12.09.2010 в 17:44)
| | ну дык проверяйте на наличие не словесного символа:) | |
|
|
|
|
автор: ..... (12.09.2010 в 18:22) |
|
|
для: BlueWolf
(12.09.2010 в 17:44)
| | > большой текст с тегами хранящийся в базе
>слова делятся
и это ещё не вылезла проблема с тем что может вывести <h1>
но не вывести </h1> | |
|
|
|
|
|
|
|
для: .....
(12.09.2010 в 18:22)
| | +1 лучше делить текст вручную :) | |
|
|
|
|
 1.6 Кб |
|
|
для: BlueWolf
(12.09.2010 в 17:44)
| | >знак "-" должен ставится в местах переноса слов
>Если допустим слово "Слово" в конце страницы заканчивается Сл , а в следуюющей начинается ово. То тут надо ставить чтобы скрипт ставил хотя бы знак "-".
Посмотрите вот эту тему , я когда-то била текст по словам.
В аттаче - функция, которая проставляет в любом тексте переносы. | |
|
|
|
|
автор: Kioshy (12.09.2010 в 23:27) |
|
|
для: BlueWolf
(11.09.2010 в 20:04)
| | самый оптимальный вариант при добавлении в базу в редакторе текста , вставлять в текст разделительный тег, например как в Joomlа {Page Break} , при выводе считать количество разделителей, вытащить текст между разделителями и вывести так как тебе нужно | |
|
|
|
|
автор: Kioshy (12.09.2010 в 23:30) |
|
|
для: Kioshy
(12.09.2010 в 23:27)
| | если же делать, просто высчитыванием позиции + обрезание текста, то возьми на вооружение tidy, дабы когда ты обрежешь там где не нужно, разбитые теги не перекрывали все остальное, tidy в этом случае починит за тебя сломанный html | |
|
|
|
|
|
|
|
для: BlueWolf
(11.09.2010 в 20:04)
| | Стааарая-старая функция. Возможно, показывает скорее как делать не надо.
Сначала проверяем, если кол-во символов в тексте меньше допустимого - то просто выкладываем этот текст, если больше - то вызываем функцию. Три аргумента - весь текст, текущая страница (первая - 1, вторая - 2), кол-во символов на одной странице. Возвращает текст текущей страницы.
<?php
Function story_pages($text, $page, $max)
{
$end_text = '';
$local_page = 1; // локальные страницы, для вычислений
$array = explode('.', $text);
for ($i = 0; $i <= (count($array) - 1); $i++) {
if (strlen($end_text) + strlen($array[$i]) <= $max) {
$end_text .= $array[$i] . '.';
} else {
if ($local_page == $page) break;
++$local_page;
--$i; // не теряем предложения
unset ($end_text); // начинаем с чистого листа
}
}
return $end_text;
}
|
| |
|
|
|
|
автор: Kioshy (13.09.2010 в 10:12) |
|
|
для: neadekvat
(13.09.2010 в 00:49)
| | тут вообще подчет символов мало играет роли ибо текст содержит html теги, поэтому оперировать надо функциями strlen, strpos, substr | |
|
|
|