我正在编写代码来生成基于字符的分页。我的网站上有文章要根据篇幅分开。
到目前为止,我所使用的代码虽然有两个问题:
在 分页栏,它正在产生 错误的页数。
需要帮助解决这两个问题。代码如下:
$text = file_get_contents($View);
$ArticleLength = strlen($text);
$CharsPerPage = 5000;
$NoOfPages = round((double)$ArticleLength / (double)$CharsPerPage);
$CurrentPage = $this->ReturnNeededObject('pagenumber');
$Page = (isset($CurrentPage) && '' !== $CurrentPage) ? $CurrentPage : '1';
$PageText = substr($text, $CharsPerPage*($Page-1), $CharsPerPage);
echo $PageText, '<p>';
for ($i=1; $i<$NoOfPages+1; $i++)
{
if ($i == $CurrentPage)
{
echo '<strong>', $i, '</strong>';
}
else
{
echo '<a href="', $i, '">', $i, '</a>';
}
echo ' | ';
}
echo '</p>';
我做错了什么?
答案 0 :(得分:1)
谢谢,伙计们。我为第一点进行了修复,并且效果很好。
嗯。我想第二点是很麻烦的。我在网上发现了一些正则表达式。当我取得一些进展时,会思考,写作并回复你。
再次感谢。
答案 1 :(得分:0)
$NoOfPages = round((double)$ArticleLength / (double)$CharsPerPage);
那应该使用ceil而不是round - 如果你使用round,4.2页只显示1-4 - 你需要第5页来显示页面的最后.2。
另一部分更难...它常见的是在文件中使用某种标记来指示分页的位置,无论你的代码多么聪明,它都无法理解哪里是一个好的中断然后同样的人类的方式。
如果您坚持这样做,建议在创建分页符时首先向前/向后转到最近空间的逻辑,这不是太棘手。更棘手的是决定你什么时候在标签内......认为你要么需要一些相当重的正则表达式,要么就是一个HTML解析工具。
答案 2 :(得分:0)
您正在计算错误的页数...您应该使用ceil()
而不是round()
(例如,4.1页的文本仍然是5页要显示)。
要解决另一个问题,如果那里有任意HTML,你就会遇到大问题。例如,您需要知道<div>
和<p>
可以拆分,但<table>
不是(除非您想要真正看中)!
要正确地执行此操作,您应该使用HTML库来构建元素树,然后从那里开始。
答案 3 :(得分:0)
根据您的第一个陈述,
它在单词和HTML标签的中间分割页面
在插入标记后,您的字符数似乎正在完成。这意味着,例如链接中的长URL将计入您尝试实现的页面长度。但是,您没有说明最初是如何创建文章的。
我建议在创建文章的过程中寻找一个可以检查原始文本的点。通过将实际内容(没有标记)视为一组段落,并根据每行的典型字符数估计每个段落的垂直长度,您可以得出更一致的大小。
我还会考虑在段落间断开,以便将思想单元放在同一页面上。作为读者,我真的很讨厌去网站,迫使我暂停,点击按钮或链接,等待页面重新加载,所有这一切都在一个想法的中间。