【问题标题】:Paginating an array of arrays (no db) without a limit无限制地对数组数组(无数据库)进行分页
【发布时间】:2016-03-28 22:43:10
【问题描述】:

我的网站上有“显示全部”功能。目前有 7 个子文件夹被迭代以显示类别。 (空文件夹不显示,可能会添加更多子文件夹)。

不想设置限制每页[图像],我只想在不同的页面上显示每个文件夹的所有图像。

尽管进行了广泛的谷歌搜索和试验,但我能想到的最好的结果是在一个长页面上显示了许多 html 页面,所有这些页面都一个接一个地附加。 (呃!)从昨晚开始我就一直在做,所以我有点受够了。

我已将 displayall.php 剥离为基本功能。这是它目前的样子(没有分页):

<!doctype html>
<html>
<head>
<meta charset='utf-8'>
<link rel='stylesheet' type='text/css' href='css/bootstrap_combined.css'>
<link rel='stylesheet' type='text/css' href='css/style.css'>";
<title>Gallery Display</title>
</head>
<body>
<div id="wrapper">  
<header>
<h1>The Ultimate Gallery Compiler</h1>
<div id='menu'><a class='head' href='index.html'>Upload Photo</a>&nbsp;&nbsp;<a class='head' href='gallery.html'>Browse Gallery</a></div>
</header>
<!---end header-->
<div id='content'>
<h2>Gallery: All Images</h2>
<?php
//$pages = isset($_GET['page'])?intval($_GET['page']-1):0; //get page
//$pageno = $_REQUEST['page'];
//compile an associative array

$subfolder= array('Fashion/LifeStyle'=>'1', 'Music/Video'=>'2','Sport/Leisure'=>'3','Electronics/Technology'=>'4','Pets/Animals'=>'5','Health/Beauty'=>'6','Other'=>'7' ); 
$carray=count($subfolder);       

// iterate through the sub directories, and count them
$files = "images/*/*";
$sub=0;
foreach(glob($files) as $file) 
    {   
        $sub++;  //total number of images
    }



foreach ($subfolder as $subf=>$value)  
{   
    $folder = "images/".$value."/";
    $link = 'displayall.php?'.$value;
    $mykey= $subf;
    $counter = 0;
    // Open the appropriate subfolder, and display its contents.
    if ($dir = opendir($folder)) {
        $images = array();
        while (false !== ($file = readdir($dir))) {
            if ($file != "." && $file != "..") {
            $counter++;
            $images[] = $file; 
            }
        }
        closedir($dir);
    }

     //don't show empty categories

    if ($counter!== 0){ 
    echo "<input type='hidden' id='current_page'/>"; 
    echo "<input type='hidden' id='show_per_page' />"; 
        echo "<h3>Category: ".$mykey."</h3><br>";  //display heading
        echo "<h4>There are " .$sub. " photos in the <a href='gallery.html'>Gallery</a> to date</h4>";  //display total overall
        echo '<div id="multi">';

        foreach($images as $image)  {           
            echo '<span class="gallery"><img src="';
            echo $folder.$image;
            echo '" alt="" width="200" height="auto" /></span>';    //show images
        }

    echo '</div>';
    //$num= $pages +1;
    echo "<br><strong>".$counter. " photos</strong><br>";  //display total per category
    echo "<span id='pageNo'>Page Number: ".$value."</span><br>";

    echo "<a href = ".$link. ">Next</a>";

    echo "<br><br><hr><br>";  //put space and a line between the categories
    };
    //$pageno++;


}   
?>
<footer>
<p class='foot'>&copy; Copyright 2015-2016 MMA2 Rachel Gallen, Ysabel Pheifer and Rebecca Merrigan.</p> 
</footer>
</div>
</body>
</html>

(可以查看here

对分页的任何帮助将不胜感激。所有教程似乎都与 mysql 相关或处理单个数组。 V 令人沮丧!

(对 php、jquery、javascript 或引导解决方案开放!)

谢谢你,祝你快乐

雷切尔

编辑:删除了以前的编辑

【问题讨论】:

  • $_GET['page'] 是一个查询字符串参数。例如index.php?page=foo
  • 你看起来甚至没有接近你说你想要编码的东西,所以这个问题看起来像是一个糟糕的规范。在 SO,我们不按规范工作
  • @RiggsFolly 我发布了上面的代码,说明它已被剥离为基础,它完成了它应该做的事情,即显示所有图像。我摆脱了不工作的代码。没有必要对 SO 如此高大上和强大 - 每个人都运行 SO - 没有“我们” - 圣诞节.. 放松
  • 向我们展示您真正想要做的事情。也许它离你想去的地方不远。
  • @RiggsFolly 它在我的服务器上,我必须找到它

标签: javascript php arrays pagination


【解决方案1】:

您的页面正在循环浏览所有子文件夹,看起来试图只显示由查询字符串参数page 指定的子文件夹。这可以通过对您的 PHP 进行少量编辑来完成:

<?php 
$pages = isset($_GET['page'])?intval($_GET['page']):1; //get page
//$pageno = $_REQUEST['page'];
//compile an associative array

$subfolder= array('Fashion/LifeStyle'=>'1', 'Music/Video'=>'2','Sport/Leisure'=>'3','Electronics/Technology'=>'4','Pets/Animals'=>'5','Health/Beauty'=>'6','Other'=>'7' ); 
$carray=count($subfolder);       

// iterate through the sub directories, and count them
$files = "images/*/*";
$sub=0;
foreach(glob($files) as $file) 
    {   
        $sub++;  //total number of images
    }



    $value = $pages;  

    $folder = "images/".$value."/";
    $link = 'displayall.php?page='.$value + 1;
    //$mykey= $subf;
    $arrayKeys = array_keys($subfolder);
    $mykey = $arrayKeys[$value];
    $counter = 0;
    // Open the appropriate subfolder, and display its contents.
    if ($dir = opendir($folder)) {
        $images = array();
        while (false !== ($file = readdir($dir))) {
            if ($file != "." && $file != "..") {
            $counter++;
            $images[] = $file; 
            }
        }
        closedir($dir);
    }

     //don't show empty categories

    if ($counter!== 0){ 
    echo "<input type='hidden' id='current_page'/>"; 
    echo "<input type='hidden' id='show_per_page' />"; 
        echo "<h3>Category: ".$mykey."</h3><br>";  //display heading
        echo "<h4>There are " .$sub. " photos in the <a href='gallery.html'>Gallery</a> to date</h4>";  //display total overall
        echo '<div id="multi">';

        foreach($images as $image)  {           
            echo '<span class="gallery"><img src="';
            echo $folder.$image;
            echo '" alt="" width="200" height="auto" /></span>';    //show images
        }

    echo '</div>';
    //$num= $pages +1;
    echo "<br><strong>".$counter. " photos</strong><br>";  //display total per category
    echo "<span id='pageNo'>Page Number: ".$value."</span><br>";

    echo "<a href = ".$link. ">Next</a>";

    echo "<br><br><hr><br>";  //put space and a line between the categories
    };
    //$pageno++;



?>

变更摘要:

我取消了$pages 变量的注释,因此它从查询字符串参数中提取。

您似乎还尝试通过$link 变量发送该查询字符串,但格式不正确。我将其更新为$link = 'displayall.php?page='.$value + 1;

最后,我删除了 for 循环并将 $value 设置为当前的 $page 参数,这样一页上只会显示一个子文件夹。

编辑 #1 后所做的更改

$pages 的三元运算将值设置为 0,导致查找 /images/0/ 时出错。改为$pages = isset($_GET['page'])?intval($_GET['page']):1;

添加了一个数组来处理关联数组中的键,因为查询字符串使用整数值而不是类别名称。
$arrayKeys = array_keys($subfolder); $mykey = $arrayKeys[$value];

您可能需要仔细研究将字符串值而不是整数值传递给 $page。它将带来更好的 SEO、更好的文件夹名称,并且无需使用关联数组将整数映射到类别名称并再次返回。

最后说明:

这当然有扩展空间,您可以考虑进行错误检查以确保值是入站且文件夹有效。上一个和下一个链接,以及快速导航到特定页码也可能很有用。

希望有帮助!

【讨论】:

  • 我会试一试!
  • 我需要子文件夹作为 subf 位,因为我显示类别名称 - 我该如何解决?
  • 您的目录结构中子文件夹的名称是什么?它们只是从 1 到 7 编号吗?
  • 是的,但是类别名称不同,因此是关联数组
  • 我得到的错误是没有图像/0/,无论如何,无论是数字还是文本
猜你喜欢
  • 2020-10-02
  • 2013-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-18
  • 1970-01-01
  • 2019-02-09
  • 2018-04-06
相关资源
最近更新 更多