-4

我得到以下代码来拆分页面:

$files = glob('docs/*.xml');
$files = array_slice($files, ($page-1)*10, 10);
foreach ($files as $file){
$xml = new SimpleXMLElement($file, 0, true);
echo'
    <tr>
    <td>' . $xml->doctype . '</td>
    <td><a href="viewdoc.php?docname=' . basename($file, '.xml') . '&username='. $xml->startedby .'&myname='. $_SESSION['username'] .'">' . basename($file, '.xml') . '</a></td>
    <td><a href="viewprofile.php?name='. $xml->startedby .'">'. $xml->startedby .'</a></td>
    <td>'. $xml->date .'</td>
    <td>* * * * *</td>
    <td></td>
    </tr>
    ';
}

但是现在我不确定如何将页面链接(例如1 2 3 4 Next)添加到我曾考虑将 ++ 添加到变量的代码中,但这对我不起作用。

我的问题是如何以循环方式添加页面链接?

提前致谢。

编辑:我忘了告诉你 echo 中的所有内容都应该是页面(1 页中有 10 个文件)

<ul>
  <li>1</li>
  <li>2</li>
  <li>3</li>
  <li>Next</li>
</ul>
4

2 回答 2

1

您可以在 XSLT 中执行此操作,但是当您的输出中只需要一个简单的分页器时,没有理由引入另一种语言。我暂时假设该$page变量已在您的代码中的其他地方正确定义。

$perpage = 10; // Avoid magic numbers
$files = glob('docs/*.xml');
$file_count = count($files);
$pages = $file_count/$perpage;
$files = array_slice($files, ($page-1)*$perpage, $perpage);
foreach ($files as $file){
$xml = new SimpleXMLElement($file, 0, true);
echo'
    <tr>
    <td>' . $xml->doctype . '</td>
    <td><a href="viewdoc.php?docname=' . basename($file, '.xml') . '&username='. $xml->startedby .'&myname='. $_SESSION['username'] .'">' . basename($file, '.xml') . '</a></td>
    <td><a href="viewprofile.php?name='. $xml->startedby .'">'. $xml->startedby .'</a></td>
    <td>'. $xml->date .'</td>
    <td>* * * * *</td>
    <td></td>
    </tr>
    ';
}
?>
<ul>
<?php
for($i=1; $i<=$pages; $i++) {?>
    <li><a href="link_to_page.php?page=<?php echo $i?>"><?php echo $i?></a></li>
<?php } ?>
</ul>
于 2013-07-06T03:48:36.310 回答
1

将评论转换为答案。

我建议使用 XSLT。毕竟,它是为您所做的目的而开发的——将 XML 转换为其他 XML,或者,一般来说,转换为文本。

PHP 有相当实用的实现,并且您将获得外部化模板的优势——即没有混合 PHP 代码和 HTML。

你正在解决分页问题。这可以使用该document(...)函数来实现,该函数为您提供 XML 文档节点列表,您可以像这样使用它:

<ul>
<xsl:foreach select="$paths">
   <li><xsl:value-of select="position()"/></li>
<ul>

或者。$paths是 XSLT 模板的参数,从 PHP 传递。

于 2013-07-06T02:27:35.740 回答