PHP 分页设置页面上的视图自定义 PHP MVC [英] PHP pagination set pages on view custom PHP MVC

查看:39
本文介绍了PHP 分页设置页面上的视图自定义 PHP MVC的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我正确获取所有帖子的方法,我可以简单地从 url 示例切换它们 posts/1 或 posts/2 等.在这种情况下,如何在我的视图上设置分页器?

这是控制器:

namespace fordev\app\controllers;使用 fordev\app\core\Controller;类 Home 扩展控制器{公共函数管理($page = NULL){\Session::checkNotIsset('logged','/pfe/login');$model = $this->model('home')->getAllPosts($page);$this->view()->renderWithAdditionalHeaderAndFooter('home',['Manage'], 'Home', [$model]);}}

这是模型:

 命名空间 fordev\app\models;使用 fordev\app\core\Model;类 Home 扩展模型{/*** 获取所有帖子方法* @param $page = 当前页面*/公共函数 getAllPosts($page){$con = $this->getInstance();$page = (isset($page) && $page <100000)?(int) $page : 1;$每页 = 5;$start = $perPage * ($page - 1);$total = \Database::countRows($con, '*','annonce');$totalPages = ceil($total/$perPage);$next = $page+1;$prev = $page-1;$sql = "SELECT * FROM annonce INNER JOIN users ON users.ID = annonce.a_publisher ORDER BY a_id DESC LIMIT $start, $perPage";$stmt = $con->prepare($sql);$stmt->execute();返回 ($stmt->rowCount() > 0) ?$stmt->fetchAll() : false;}}

这是视图:

<div class="col-md-12"><div class="blog-header"><h1 class="blog-title">Les Annonce De Kisoun</h1><p class="lead blog-description">Tous les annonces de village Kissoun se trouve ICI !.</p>

<div class="col-md-8"><?php if(is_array($modelData[0]))://如果数据库中有数据 ?><?php foreach ($modelData[0] as $value) {//foreach 循环 ?><div class="panel panel-default"><div class="panel-heading"><h3><?=$value->a_title?></h3>

<div class="panel-body annonce"><div class="annonce-image pull-left"><img src="<?=Rooter::get('UP_IMG').$value->a_image ?>"alt="">

<p class="pull-right"><?=$value->a_content ?></p><div class="clear"></div><小时><a class="btn btn-danger pull-right">详情</a><span class="label pull-left"><?= \Helper::elapsedTime($value->a_time) ?>通过<?=$value->name ?></span>

<?php }//foreach 循环结束 ?><?php endif;?><?php if($modelData[0] === false): ?><div class="alert alert-danger"><button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button><strong>错误</strong>Pas D'annonce 安可...

<?php endif;?>

解决方案

已解决!!

只需将分页信息作为数组与posts数组一起返回,并在视图上使用这些信息像这样

class Home 扩展模型{/*** 获取所有帖子方法* @param $page = 当前页面*/公共函数 getAllPosts($page){$con = $this->getInstance();$page = (isset($page) && $page <100000)?(int) $page : 1;$每页 = 5;$start = $perPage * ($page - 1);$total = \Database::countRows($con, '*','annonce');$totalPages = ceil($total/$perPage);$next = $page+1;$prev = $page-1;$sql = "SELECT * FROM annonce INNER JOIN users ON users.ID = annonce.a_publisher ORDER BY a_id DESC LIMIT $start, $perPage";$stmt = $con->prepare($sql);$stmt->execute();$paginatoinInfo = [页面" =>$页,开始" =>$开始,总页数"=>$总页数,下一个" =>$下一个,上一个" =>$prev];$res = [];$res['posts'] = ($stmt->rowCount() > 0) ?$stmt->fetchAll() : false;$res['paginator'] = $paginatoinInfo;返回 $res;}}

在视图中,我可以像这样使用这个数组

Here is my method im getting all posts correctly and i can switch over them from url exemple simply posts/1 or posts/2 etc.. How can i set set a paginator on my view in this case ?

Here is the controller :

namespace fordev\app\controllers;

use fordev\app\core\Controller;

class Home extends Controller
{
    public function manage($page = NULL)
    {
        \Session::checkNotIsset('logged','/pfe/login');
        $model = $this->model('home')->getAllPosts($page);
        $this->view()->renderWithAdditionalHeaderAndFooter('home',['Manage'], 'Home', [$model]);
    }
}

Here is the Model:

 namespace fordev\app\models;
 use fordev\app\core\Model;


class Home extends Model 
{
    /**
     * Get All posts method
     * @param $page = current page
     */
    public function getAllPosts($page)
    {
        $con  = $this->getInstance();

        $page  = (isset($page) && $page < 100000)? (int) $page : 1;
        $perPage = 5;
        $start = $perPage * ($page - 1);
        $total = \Database::countRows($con, '*','annonce');
        $totalPages = ceil($total / $perPage);

        $next = $page+1;
        $prev = $page-1;

        $sql  = "SELECT * FROM annonce INNER JOIN users ON users.ID =  annonce.a_publisher ORDER BY a_id DESC LIMIT $start, $perPage";
        $stmt = $con->prepare($sql);
        $stmt->execute();

        return ($stmt->rowCount() > 0) ? $stmt->fetchAll() : false;
    }


}

And here is the view :

<div class="container">
    <div class="col-md-12">
        <div class="blog-header">
            <h1 class="blog-title">Les Annonce De Kisoun</h1>
            <p class="lead blog-description">Tous les annonces de village Kissoun se trouve ICI !.</p>
        </div>
    </div>

    <div class="col-md-8">
        <?php if(is_array($modelData[0])): // if there is data in the database ?>
    <?php foreach ($modelData[0] as $value) {  // foreach loop ?>

        <div class="panel panel-default">
      <div class="panel-heading">
        <h3><?=$value->a_title ?></h3>
      </div>

            <div class="panel-body annonce">

                <div class="annonce-image pull-left">
                    <img src="<?=Rooter::get('UP_IMG').$value->a_image ?>" alt="">
                </div>

        <p class="pull-right"><?=$value->a_content ?></p>
        <div class="clear"></div>
        <hr>
          <a class="btn btn-danger pull-right">Details</a>
          <span class="label pull-left"><?= \Helper::elapsedTime($value->a_time) ?> by <?=$value->name ?></span>

            </div>
        </div>

   <?php   } // end of foreach loop ?>

  <?php endif; ?>
  <?php if($modelData[0] === false): ?>
      <div class="alert alert-danger">
        <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
        <strong>Error</strong> Pas D'annonce encore ...
      </div>
  <?php endif; ?>
    </div>


</div>

解决方案

solved !!

just return pagination info as an array alongside with posts array and use these info on the view like so

class Home extends Model 
{
    /**
     * Get All posts method
     * @param $page = current page
     */
    public function getAllPosts($page)
    {
        $con  = $this->getInstance();

        $page  = (isset($page) && $page < 100000)? (int) $page : 1;
        $perPage = 5;
        $start = $perPage * ($page - 1);
        $total = \Database::countRows($con, '*','annonce');
        $totalPages = ceil($total / $perPage);

        $next = $page+1;
        $prev = $page-1;

        $sql  = "SELECT * FROM annonce INNER JOIN users ON users.ID =  annonce.a_publisher ORDER BY a_id DESC LIMIT $start, $perPage";
        $stmt = $con->prepare($sql);
        $stmt->execute();

        $paginatoinInfo = [
            "page"          => $page,
            "start"         => $start,
            "totalPages"    => $totalPages,
            "next"          => $next,
            "prev"          => $prev
        ];

        $res = [];
        $res['posts'] = ($stmt->rowCount() > 0) ? $stmt->fetchAll() : false;
        $res['paginator'] = $paginatoinInfo;

        return $res;
    }


}

on the view I was able to use this array like so

<?php
$paginator  = $modelData[0]['paginator'];
$page       = $paginator['page'];
$start      = $paginator['start'];
$totalPages = $paginator['totalPages'];
$next       = $paginator['next'];
$prev       = $paginator['prev'];
?>

这篇关于PHP 分页设置页面上的视图自定义 PHP MVC的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
PHP最新文章
热门教程
热门工具
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆