欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

php利用Pagerfanta给通用数据库类库Medoo分页

程序员文章站 2022-04-11 22:36:15
...
这是两个非常优秀的php类库

medoo:一个通用的php的数据库客户端。
"pagerfanta/pagerfanta":"1.0.5" 一个通用的php的分页组件。
结合在一起棒棒哒!

首先,composer安装

"pagerfanta/pagerfanta":"1.0.5"
"catfan/medoo":"1.4.5"

建表
CREATE TABLE `test_databases` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `db_name` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '库名',
  `user_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '测试用户id',
  `created_at` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '创建时间',
  `updated_at` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '修改时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB


请自行插入一百条数据

分页代码
<?php
namespace app\control;
use Medoo\Medoo as me;

use Pagerfanta\Pagerfanta;
use Pagerfanta\View\DefaultView;
use Pagerfanta\Adapter\AdapterInterface;

class MedooPage {
    public function index($req, $res, $args) {
        $database = new me ( [
            // 必须
            'database_type' => 'mysql',
            'database_name' => 'test1',
            'server' => '127.0.0.1',
            'username' => 'root',
            'password' => 'root',
            
            // 可选,但最好加上
            'charset' => 'utf8mb4',
            'port' => 3306,
            
            // [optional] Enable logging (Logging is disabled by default for better performance)
            'logging' => true,
            
            // [optional] driver_option for connection, read more from http://www.php.net/manual/en/pdo.setattribute.php
            'option' => [ 
                \PDO::ATTR_STRINGIFY_FETCHES => false,
                \PDO::ATTR_EMULATE_PREPARES => false 
            ] 
        ]  );
        //构造查询条件       
        $table = 'test_databases';
        $where=["id[<]"=>90];
        $col='*';
        //我把两个类一起放这个文件,工程中最好分开
        // 注,medoo还有带join的select方法,建议再写一个适配器,然后根据查询条件的不同
        // 调用不同的适配器,反正也就两个。
        $adapter = new MedooPageAdapter($database,$table,$col, $where);
        $pagerfanta = new Pagerfanta($adapter);
        $page = intval( $_GET["page"]);
        if (!$page) {
            $page=1;
        }
        //设置当前页,最大页面。
        $pagerfanta->setMaxPerPage(4)->setCurrentPage($page);
        //打印当前页面的结果
        foreach ($pagerfanta->getCurrentPageResults() as $v ) {
            echo $v['db_name'] .' = ' . $v['user_id']."<br>";
        }
        //打印分页链接。
        $routeGenerator = function($page) { // 匿名函数解决链接字符串
            return '/paginator/doctrine?page='.$page;
        };
        $view = new DefaultView();
        $options = array('proximity' => 3); // 这个数字干嘛用?中间的链接个数=这个数字*2+1,这个数字一般取3.
        $html = $view->render($pagerfanta, $routeGenerator, $options);
        echo $this->default_css();
        echo  "<div class='pagerfanta'>" .$html."</div>";
        return $res;
    }
    
    private function default_css()
    {
        $css=<<<css
        <style>
            .pagerfanta {
            }
            
            .pagerfanta a,
            .pagerfanta span {
                display: inline-block;
                border: 1px solid blue;
                color: blue;
                margin-right: .2em;
                padding: .25em .35em;
            }
            
            .pagerfanta a {
                text-decoration: none;
            }
            
            .pagerfanta a:hover {
                background: #ccf;
            }
            
            .pagerfanta .dots {
                border-width: 0;
            }
            
            .pagerfanta .current {
                background: #ccf;
                font-weight: bold;
            }
            
            .pagerfanta .disabled {
                border-color: #ccf;
                color: #ccf;
            }
            
            
            
            .pagerfanta a,
            .pagerfanta span {
                border-color: blue;
                color: blue;
            }
            
            .pagerfanta a:hover {
                background: #ccf;
            }
            
            .pagerfanta .current {
                background: #ccf;
            }
            
            .pagerfanta .disabled {
                border-color: #ccf;
                color: #cf;
            }
                    </style>
css;
        return $css;
    }
}

/**
 * 分页适配器
 * @author xieye
 *
 */
class MedooPageAdapter implements AdapterInterface
{
    
    private $table='';
    private $where=[];
    private $db  ;
    private $col;
    
    public function __construct($db,$table, $col, $where){
        $this->table = $table;
        $this->where = $where;
        $this->col = $col;
        $this->db = $db;
    }
    
    public function getNbResults(){
        $db = $this->db;
        return $db->count($this->table, $this->where);
    }
    
    /**
     * Returns an slice of the results.
     *
     * @param integer $offset The offset.
     * @param integer $length The length.
     *
     * @return array|\Traversable The slice.
     */
    public function getSlice($offset, $length){
        $where = $this->where;
        $where["LIMIT"] = [$offset, $length];
        return $this->db->select($this->table,$this->col, $where);
    }
    
}


浏览器效果
php利用Pagerfanta给通用数据库类库Medoo分页
            
    
    博客分类: PHP php分页medoopagerfanta 

  • php利用Pagerfanta给通用数据库类库Medoo分页
            
    
    博客分类: PHP php分页medoopagerfanta 
  • 大小: 12.4 KB