|
|
|
| Есть задача разбить большой текст на страницы (текст из базы данных)
Как вариант идеально подходит разбивка по специальному маркету (тега) типа [pagebreak] <-- pagebleak -->
Перерыл И-нет но решения не нашел, хотя во многих популярных CMS это импользуется
Спасибо! | |
|
|
|
|
|
|
|
для: MaxTax
(07.01.2008 в 21:06)
| | А это separator нужен затем, что страницы разного веса могут быть? То есть разделять текст Вы будете сами? По-моему, проще каждую страницу хранить в отдельной записи в таблице.
В противном случае можно воспользоваться explode() | |
|
|
|
|
|
|
|
для: Unkind
(07.01.2008 в 21:10)
| | Совершенно верно. Задавать где ставить разрыв страницы будем сами. Не разношу по полям страницы по причине материал может быть разной длины и не извесно сколько полей делать.
Вот нашел и попытался под свои нужды переделать
все хорошо но при переходе на следующую страницу все остается на местах
## CUSTOMIZE ##
$delimiter = '{BREAK}';
$tplLinkNext = '<a href="[+link+]">наступна</a>';
$tplLinkPrev = '<a href="[+link+]">попередня</a>';
$tplLinkNav = '
<div style="margin-top: 10px;font-size: small;">
[+linkprev+]
Page [+current+] of [+total+]
[+linknext+]
</div>';
$pip_content = $row_art['body'];
$pip_pagecontent = explode($delimiter,$pip_content);
$pip_pagecount = count($pip_pagecontent);
if ($pip_pagecount > 1)
{
$pip_currentpage = isset($_GET["page"]) ? $_GET["page"]: 1;
if ($pip_currentpage > $pip_pagecount || $pip_currentpage < 1) { $pip_currentpage = 1; }
$char = "?";
$url = $char.'page=';
$prevpage = $pip_currentpage-1;
$nextpage = $pip_currentpage+1;
$linkprev = ($prevpage>0) ? str_replace("[+link+]",$url.$prevpage,$tplLinkPrev) : '';
$linknext = ($nextpage>$pip_pagecount) ? '' : str_replace("[+link+]",$url.$nextpage,$tplLinkNext);
$pip_template = str_replace("[+linkprev+]",$linkprev,$tplLinkNav);
$pip_template = str_replace("[+linknext+]",$linknext,$pip_template);
$pip_template = str_replace("[+total+]",$pip_pagecount,$pip_template);
$pip_template = str_replace("[+current+]",$pip_currentpage,$pip_template);
$pip_content= $pip_pagecontent[$pip_currentpage-1].$pip_template;
}
echo $pip_content;
|
| |
|
|
|
|
|
|
|
для: MaxTax
(07.01.2008 в 22:04)
| | Не по полям. А сделать таблицу pages, в которой каждая запись будет содержать текст одной страницы. | |
|
|
|
|
|
|
|
для: Unkind
(07.01.2008 в 22:08)
| | Может и надо было так сделать. Да уже поздно все готово работу надо сдавать. А требование появилось недавно | |
|
|
|
|
|
|
|
для: MaxTax
(07.01.2008 в 22:04)
| | Разобрался в коде все впорядке. Это моя невнимательность. | |
|
|
|
|
|
|
|
для: MaxTax
(07.01.2008 в 21:06)
| | Подскажите по коду что не так. Почему не формируется вторая страница | |
|
|
|
|
|
|
|
для: MaxTax
(08.01.2008 в 22:10)
| | Грязноватый код. Быстрее написать новый, чем копаться в этом.
<?php
// ...
$text = 'Page #1{SEPARATOR}Page #2{SEPARATOR}Page #3';
$text = explode('{SEPARATOR}', $text);
$page = isset( $_GET['page'] ) ? (int) $_GET['page'] : 0;
if( $page < 0 ) $page = 0;
if( $page > count($text) - 1 ) $page = count($text) - 1;
echo nl2br(htmlspecialchars($text[ $page ])) . "<br />\r\n";
if( isset($text[ $page + 1 ]) )
{
echo "<a href='" . $_SERVER['PHP_SELF'] . "?page=" . ($page + 1) . "'>Далее</a><br />\r\n";
}
if( isset($text[ $page - 1 ]) )
{
echo "<a href='" . $_SERVER['PHP_SELF'] . "?page=" . ($page - 1) . "'>Назад</a><br />\r\n";
}
// ...
?>
|
| |
|
|
|