Нам потребуется для налаживания пагинации xandros15/slim-pagination (https://packagist.org/packages/xandros15/slim-pagination)
(внимание!!! Работает на Php 7.2)
файл композер json
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
{ "name":"example ORM", "description":"---", "type":"project", "require": { "illuminate/database": "5.1.8", "slim/slim": "3.11.0", "xandros15/slim-pagination": "0.1" }, "autoload": { "psr-4" : { "Controllers\\": "app/controllers/", "Models\\": "app/models/" } } } |
в стартовом файле (у меня это Index.php) прописываем всё что ниже. в контроллере /news/ — добавлен быдло код с выводом сразу на сайт. В каком шаблоне хранить и как- это выбор за вами. В ссылке пагинации вверху есть хорошие примеры использования пагинации с view или же twig. Но это зависит от вас. Я же использовал тут вывод в тупую.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
<?php require "config2.php"; require "vendor/autoload.php"; use Models\Database; use Models\News; $dt = new Database(); use \Psr\Http\Message\ServerRequestInterface as Request; use \Psr\Http\Message\ResponseInterface as Response; use Xandros15\SlimPagination\Pagination; $config = ['settings' => [ 'addContentLengthHeader' => false, ]]; $app = new \Slim\App($config); $app->get('/news/', function ( Request $request, Response $response, array $args) { $count= News::where('enable', 'yes')->count(); $news = News::where('enable', 'yes')->skip(4*($_GET['page']-1)) ->take(4) ->get(); $pagination = new Pagination($request, $this->get('router'),[ Pagination::OPT_TOTAL => $count, //number of items Pagination::OPT_PER_PAGE=>4 ]); // print_r($pagination); ?> <nav class="text-center col-xs-12"> <ul class="pagination"> <?php /** @var $pagination Xandros15\SlimPagination\Pagination */ ?> <?php if ($pagination->previous()['isCurrent']): ?> <li class="disabled"> <span><?= $pagination->previous()['pageName'] ?></span> </li> <?php else: ?> <li> <a aria-label="previous" href="<?= $pagination->previous()['pathFor'] ?>"> <span aria-hidden="true"><?= $pagination->previous()['pageName'] ?></span> </a> </li> <?php endif ?> <?php foreach ($pagination as $page): ?> <?php if ($page['isSlider']): ?> <li class="disabled"> <span><?= $page['pageName'] ?></span> </li> <?php elseif ($page['isCurrent']): ?> <li class="active"> <span><?= $page['pageName'] ?></span> </li> <?php else: ?> <li> <a href="<?= $page['pathFor'] ?>"><?= $page['pageName'] ?></a> </li> <?php endif; ?> <?php endforeach; ?> <?php if ($pagination->next()['isCurrent']): ?> <li class="disabled"> <span><?= $pagination->next()['pageName'] ?></span> </li> <?php else: ?> <li> <a aria-label="next" href="<?= $pagination->next()['pathFor'] ?>"> <span aria-hidden="true"><?= $pagination->next()['pageName'] ?></span> </a> </li> <?php endif ?> </ul> </nav> <?php foreach($news as $val){ echo $val->name .'<br/>'; } return $response->write(" "); }); $app->run(); |
файл подключения к базе \app\models\Database.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<?php namespace Models; use Illuminate\Database\Capsule\Manager as Capsule; class Database { function __construct() { $capsule = new Capsule; $capsule->addConnection([ "driver" => DBDRIVER, "host" => DBHOST, "database" => DBNAME, "username" => DBUSER, "password" => DBPASS, "charset" => "utf8", "collation" => "utf8_unicode_ci", "prefix" => "", ]); $capsule->bootEloquent(); } } |
файл модели
\app\models\News.php
1 2 3 4 5 6 7 8 9 |
<?php namespace Models; use \Illuminate\Database\Eloquent\Model; class News extends Model { protected $table = "aekstroy_news"; protected $fillable = array("name"); } |
htaccess в корне
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
php_flag display_errors on php_flag display_startup_errors on <IfModule mod_rewrite.c> RewriteEngine On # Some hosts may require you to use the `RewriteBase` directive. # Determine the RewriteBase automatically and set it as environment variable. # If you are using Apache aliases to do mass virtual hosting or installed the # project in a subdirectory, the base path will be prepended to allow proper # resolution of the index.php file and to redirect to the correct URI. It will # work in environments without path prefix as well, providing a safe, one-size # fits all solution. But as you do not need it in this case, you can comment # the following 2 lines to eliminate the overhead. RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$ RewriteRule ^(.*) - [E=BASE:%1] # If the above doesn't work you might need to set the `RewriteBase` directive manually, it should be the # absolute physical path to the directory that contains this htaccess file. # RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [QSA,L] </IfModule> |
config2.php
1 2 3 4 5 |
defined("DBDRIVER")or define("DBDRIVER","mysql"); defined("DBHOST")or define("DBHOST","localhost"); defined("DBNAME")or define("DBNAME","slim"); defined("DBUSER")or define("DBUSER","root"); defined("DBPASS")or define("DBPASS",""); |
тот html , что выводится в контроллере должен лежать в отдельной вьюхе. Как вариант написать отображение самому c помощью буферизации. Данная функция буферизирует шаблон находящийся в папке /view по имени файла.
1 2 3 4 5 6 7 |
function showTemplate($template, $MASS=array()){ ob_start(); include $_SERVER['DOCUMENT_ROOT']."/view/$template.php"; $page = ob_get_contents(); ob_end_clean(); return $page; } |
Или же используетя отображение view от слима. Его надо будет установить отдельно
такую буферизацию использую как то так
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$app->get('/akcii/{url}.html', function ($request, $response, $args) { $MASS_T=array(); $MASS=array( 'url'=>$args['url']); $news= Akcii::where('url', $args['url']) ->get(); foreach($news as $val){ $MASS['item']=$val; $out= showPage("pages", $MASS ,$MASS_T); } if(!isset($MASS['item'])){ $out= showPage("404", $MASS ,$MASS_T); } return $response->write($out); }); |
или так
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
function showTemplate($template, $MASS=array()){ ob_start(); include $_SERVER['DOCUMENT_ROOT']."/view/$template.php"; $page = ob_get_contents(); ob_end_clean(); return $page; } //окружаешь нашу буферизацию футером и хедером function showPage($template, $MASS ,$MASS_T =array()){ $content= showTemplate($template, $MASS); $out.= showTemplate("_header",$MASS_T); $out.=$content; $out.= showTemplate("_footer",$MASS_T); return $out; } $app->get('/akcii/', function ( $request, $response, $args) { $MASS_T=array(); $MASS=array(); $out= showPage("akcii_list", $MASS ,$MASS_T); return $response->write($out); }); |