【问题标题】:Array Pagination数组分页
【发布时间】:2022-01-19 23:30:48
【问题描述】:

我有这个脚本,我正在尝试将其转换为分页。有人可以帮忙吗?

$valuess = json_decode(file_get_contents('data/blogs.json'));

foreach ($valuess as $data){
    $data = clone (object)array_reverse((array)$data);

    foreach ($data as $key => $values){

        if ($values->status === '1' && $values->visible === '1' && strtotime($values->date_added) <= strtotime(date('r'))){
            echo '
                <article class="col-12 col-md-6 col-xl-4 mb-4" itemscope itemtype="https://schema.org/Article">
                    <div class="blog-article" data-href="{{domain}}/' . strip_tags($values->slug) . '">
                        <link itemprop="image" href="{{cdn}}/uploads/' . str_replace('blog/', '', strip_tags($values->cover_image)) . '" />
                        <picture>
                            <img data-src="{{cdn}}/' . imageLoad('uploads/' . str_replace('blog/', '', strip_tags($values->cover_image)), 450, 253) . '" itemprop="thumbnailUrl" class="lazy img-fluid" alt="' . strip_tags($values->heading) . '" title="' . strip_tags($values->heading) . '" height="253" width="450" />
                        </picture>

                        <h3 itemprop="headline">' . strip_tags($values->heading) . '</h3>

                        <div class="d-flex align-items-center flex-wrap align-content-start mt-3">
                            <figure>
                                <img data-src="{{cdn}}/' . imageLoad('uploads/' . strip_tags($values->author->image), 45, 45) . '" class="lazy" alt="Photo of ' . strip_tags($values->author->name) . '" title="Photo of ' . strip_tags($values->author->name) . '" height="45" width="45" />
                            </figure>

                            <div class="author" itemprop="author">' . strip_tags($values->author->name) . '</div> <time itemprop="datePublished" datetime="' . date('c', strtotime($values->date_added)) . '" class="date">' . date('d F Y', strtotime($values->date_added)) . '</time>
                        </div>

                        <p>' . strip_tags($values->excerpt) . '</p>

                        <a href="{{domain}}/' . strip_tags($values->slug) . '" title="Read: ' . strip_tags($values->heading) . '" itemprop="url">Continue Reading <i class="icon-right-1"></i></a>
                    </div>
                </article>
            ';
        }
    }
}

我现在有 80 篇文章,并且希望每页有 30 篇文章,我将使用查询字符串来执行此操作 ?page=2 但对于我的一生,我无法锻炼如何使其工作。这是 json 的样子:

    "blogs": {
        "1": {
            "slug": "blog\/cfsdgfdgfd",
            "cover_image": "cfsdgfdgfd.jpg",
            "author": {
                "name": "dsfdsaf",
                "image": "fdsafas",
                "email": "fdsafsa"
            },
            "heading": "fdgdfg",
            "excerpt": "sdfdsfdsaf",
            "date_added": "2019-04-25T12:21:31+10:00",
            "date_modified": "2021-12-07T14:05:12+10:00",
            "visible": "1",
            "comments": "0",
            "status": "1"
        },
        "2": {
            "slug": "blog\/hxgch",
            "cover_image": "fdghhfd.jpg",
            "author": {
                "name": "fdghf",
                "image": "zhd",
                "email": "k"jhgk
            },
            "heading": "kjhkhjg",
            "excerpt": "hgfdhfd",
            "date_added": "2019-05-09T13:31:04+10:00",
            "date_modified": "2021-12-07T11:40:49+10:00",
            "visible": "1",
            "comments": "0",
            "status": "1"
        }
}

【问题讨论】:

  • 如果是 PHP,你是否打算使用 Javascript 进行分页?
  • @Dula 我打算用 PHP 来分页。
  • $valuess 包含上面的json?
  • @Dula 是的,然后 $data 控制每一个。

标签: php arrays json


【解决方案1】:

首先,您的 JSON 有一些小错误。它不是有效的 JSON。 以下是正确的 JSON。

{
  "blogs": {
    "1": {
      "slug": "blog\/cfsdgfdgfd",
      "cover_image": "cfsdgfdgfd.jpg",
      "author": {
        "name": "dsfdsaf",
        "image": "fdsafas",
        "email": "fdsafsa"
      },
      "heading": "fdgdfg",
      "excerpt": "sdfdsfdsaf",
      "date_added": "2019-04-25T12:21:31+10:00",
      "date_modified": "2021-12-07T14:05:12+10:00",
      "visible": "1",
      "comments": "0",
      "status": "1"
    },
    "2": {
      "slug": "blog\/hxgch",
      "cover_image": "fdghhfd.jpg",
      "author": {
        "name": "fdghf",
        "image": "zhd",
        "email": "kjhgk"
      },
      "heading": "kjhkhjg",
      "excerpt": "hgfdhfd",
      "date_added": "2019-05-09T13:31:04+10:00",
      "date_modified": "2021-12-07T11:40:49+10:00",
      "visible": "1",
      "comments": "0",
      "status": "1"
    }
  }
}

在您的代码中,您将json_decode 值视为对象,但我将json_decode 视为关联数组,因为我认为它更易于使用。

以下是带分页的代码。

$fileData = file_get_contents("Path to your JSON file");
$jsonData = json_decode($fileData, true);
$itemsPerPage = 1;
$nextPage = 1; // You can access this as $currentPage =  $_GET['page'];
$counter = 0;

foreach ($jsonData['blogs'] as $jsonDatum){

    if ($jsonDatum['status'] === '1' && $jsonDatum['visible'] === '1' && strtotime($jsonDatum['date_added']) <= strtotime(date('r'))){

        $lastIndex = ($itemsPerPage * $nextPage);
        $firstIndex = (($itemsPerPage * $nextPage) - $itemsPerPage);

        if ($firstIndex <= $counter && $counter < $lastIndex) {

            // Your HTML code comes here
            // echo("<article></article>");

            // access the values using array indexes
            $cover_image = $jsonDatum['cover_image'];
            $authorName = $jsonDatum['author']['name'];

        }
    }

    $counter++;
}

【讨论】:

    猜你喜欢
    • 2017-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-20
    • 2011-12-15
    • 2013-09-05
    相关资源
    最近更新 更多