【问题标题】:How to create pagination of file in directory?如何在目录中创建文件的分页?
【发布时间】:2016-02-05 15:26:28
【问题描述】:

我已使用此代码从一个目录中列出了所有特定文件 (*.htm):

  <?PHP
$iterator = new FilesystemIterator('..\articles/');
foreach($iterator as $fileInfo){
    if($fileInfo->isFile()){
        $cTime = new DateTime();
        $cTime->setTimestamp($fileInfo->getCTime());
        echo "<div id='NewsWrap'>"
        . "<div id='NewsTitle'>"
        . "<a href='http://localhost/test/articles/" . basename($fileInfo->getFileName()) . "'>" . basename($fileInfo->getFileName(), '.htm') . "</a></div>"
        . "<div id='NewsCreation'>" . "on " .  $cTime->format('d-m-Y') . " by : Admin</div>"
        . "</div>";

    }
}
?>

因为显示了这么多文件,所以我想进行分页(每个文件 10 个文件).. 但我不知道用我的代码来做这件事..

我不想使用 jquery,但如果有必要.. 就这样吧。

编辑:另一种方法

<?PHP
    $offset = 2;
    $quantity = 5;
    $filelist = scandir('../articles/', 0);

    $selectedFiles = array_slice($filelist, $offset, $quantity);

    foreach($selectedFiles as $SplFileInfo)
    {
        if (!is_dir("../articles/". $SplFileInfo))
        {
            echo "<div id='NewsWrap'>"
            . "<div id='NewsTitle'>"
            . "<a href='http://localhost/test/articles/" . basename($SplFileInfo) . "' target='IFContent'>" . basename($SplFileInfo, '.htm') . "</a></div>"
            . "<div id='NewsCreation'>on " . date ("d F Y", filemtime("../articles/". $SplFileInfo)) . " by : Admin</div>"
            . "<div id='NewsDemo'>" . file_get_contents('../articles/'. $SplFileInfo) . "')</div>"
            . "</div>";
        }
    }
?>

但我仍然没有运气来创建分页号.. 有人可以修改我的代码以添加分页号吗..?

谢谢。

【问题讨论】:

    标签: php jquery html css pagination


    【解决方案1】:

    我认为没有理由不使用scandir() 而不是Filesystemiterator()Scandir() 将返回指定路径内的文件(和目录)数组。您也可以使用sorting order 对它们进行任意排序。

    var files = scandir('..\articles/');
    var page = 1;  //change when new page is requested
    var FILES_PER_PAGE = 10;
    
    
    for (i = page * FILES_PER_PAGE; i < page * FILES_PER_PAGE + FILES_PER_PAGE; i++) {
        //display HTML
    }
    

    您会注意到page * FILES_PER_PAGE 为要显示的页面创建下限,page * FILES_PER_PAGE + FILES_PER_PAGE 创建上限。

    【讨论】:

      【解决方案2】:

      如果您不想使用jQuery,那么在分页中显示文件的唯一方法是您需要显示/隐藏文件名,例如,

      1. 您需要统计文件夹中找到的文件总数。
      2. 然后您需要通过使用每个页码的文件来获取页码,例如您有 52 个文件,并且您希望每页显示 10 个文件,那么您的总页数为 6 ((int)52/10+((52%10)&gt;0?1:0)) 额外 2文件,我们需要获得一个额外的页面,说明我为什么使用((52%10)&gt;0?1:0)
      3. 不,您需要创建分页链接(从第二点开始,您需要创建 6 个链接)。
      4. 默认显示从 10(显示的页数)开始,其余文件名隐藏。
      5. 否,当单击页码时,您需要显示该页码的文件,其余文件名被隐藏。例如,如果您单击 3,那么您将显示 29 到 39 个索引(从 0 开始)文件,其余文件被隐藏。

      但是,如果您使用 jQuery,那么很容易实现它而没有任何重大的复杂性。尝试使用 sn-p 显示/隐藏文件。

      $('.pagination li').on('click',function(){
        p=$(this).data('page'),
        $list=$('.list');
        $list.find('li[data-filePage!="'+p+'"]').hide();
        $list.find('li[data-filePage="'+p+'"]').show();
      });
      .list{list-style:none}
      .list li{display:none;}
      
      .pagination{list-style:none;}
      .pagination li {float:left;padding:0 5px;border:1px solid #444;cursor:pointer;margin:0 2px}
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
      <ul class="list">
        <li data-filePage="1" style="display:block">1</li>
        <li data-filePage="1" style="display:block">2</li>
        <li data-filePage="2">3</li>
        <li data-filePage="2">4</li>
        <li data-filePage="3">5</li>
        <li data-filePage="3">6</li>
        <li data-filePage="4">7</li>
      </ul>
      <ul class="pagination">
        <li data-page="1">1</li>
        <li data-page="2">2</li>
        <li data-page="3">3</li>
        <li data-page="4">4</li>
        </ul>

      你可以使用简单的ajax pagination,只需要更改php代码。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-08-03
        • 2021-04-21
        • 1970-01-01
        • 2011-09-02
        • 1970-01-01
        • 2013-09-25
        • 2011-06-20
        相关资源
        最近更新 更多