浏览 1659 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2017-07-06
假设当前使用的db类库是doctrine,则分页该怎么用? 本代码完全脱离symfony环境。只加载对应的db类库,故意不使用模板,让代码含义更加清晰。 composer <pre name="code" class="java"> { "require": { "doctrine/dbal":"2.5.12", "pagerfanta/pagerfanta":"1.0.5" } } </pre> 建表 <pre name="code" class="java"> 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 </pre> 请自行插入一百条数据。 假设本机项目域名www.t3.com 本代码网址 http://www.t3.com/paginator/doctrine 首页只需输入上面网址即可,点击分页链接,会自动加page查询参数。 <pre name="code" class="java"> &lt;?php namespace app\control; // use Illuminate\Database\Capsule\Manager as Capsule; // // use \Illuminate\Events\Dispatcher; // // use \Illuminate\Container\Container; // use Illuminate\Pagination\UrlWindow; use Doctrine\DBAL\Query\QueryBuilder; use Doctrine\DBAL\Configuration; use Doctrine\DBAL\DriverManager; use Pagerfanta\Adapter\DoctrineDbalAdapter; use Pagerfanta\Pagerfanta; use Pagerfanta\View\DefaultView; class Paginator { public function doctrine( $req, $res, $args) { $config = new Configuration(); //.. $connectionParams = array( 'dbname' =&gt; 'test1', 'user' =&gt; 'root', 'password' =&gt; 'root', 'host' =&gt; '127.0.0.1', 'driver' =&gt; 'pdo_mysql', 'charset'=&gt;'UTF8', ); $conn = DriverManager::getConnection($connectionParams, $config); //构造查询语句。 $queryBuilder = new QueryBuilder($conn); $queryBuilder-&gt;select('p.*')-&gt;where("p.id &lt; 100")-&gt;from('test_databases', 'p') -&gt;orderBy("p.id","asc"); $countQueryBuilderModifier = function ($queryBuilder) { $queryBuilder-&gt;select('COUNT(*) AS total_results') -&gt;setMaxResults(1); }; $adapter = new DoctrineDbalAdapter($queryBuilder, $countQueryBuilderModifier); $pagerfanta = new Pagerfanta($adapter); $page = intval( $_GET["page"]); if (!$page) { $page=1; } //设置当前页,最大页面。 $pagerfanta-&gt;setMaxPerPage(4)-&gt;setCurrentPage($page); //打印当前页面的结果 foreach ($pagerfanta-&gt;getCurrentPageResults() as $v ) { echo $v['db_name'] .' = ' . $v['user_id']."&lt;br&gt;"; } //打印分页链接。 $routeGenerator = function($page) { // 匿名函数解决链接字符串 return '/paginator/doctrine?page='.$page; }; $view = new DefaultView(); $options = array('proximity' =&gt; 3); // 这个数字干嘛用?中间的链接个数=这个数字*2+1,这个数字一般取3. $html = $view-&gt;render($pagerfanta, $routeGenerator, $options); echo $this-&gt;default_css(); echo "&lt;div class='pagerfanta'&gt;" .$html."&lt;/div&gt;"; return $res; } private function default_css() { $css=&lt;&lt;&lt;css &lt;style&gt; .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; } &lt;/style&gt; css; return $css; } } </pre> 效果展示 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |