Код компонента:
Код: Выделить всё
namespace app\components;
use yii\web\UrlRule;
use app\models\Category;
use yii\web\UrlRuleInterface;
use yii\web\HttpException;
use Yii;
class CategoryurlComponent implements UrlRuleInterface
{
/** Урл компонент для маршрутизации категорий **/
public function parseRequest($manager, $request)
{
$site = stristr(Yii::$app->request->url,'/site/');
$admin = stristr(Yii::$app->request->url,'/admin/');
$maps = stristr(Yii::$app->request->url,'/maps/');
if(!$site && !$admin && !$maps) {
if(strpos($request->pathInfo,'/') !== false){
if(preg_match('%^([\w\-]+)([\/]{1})([\-\w\d]+)([\/]{1})([\-\w\d]+)$%',$request->pathInfo, $matches)) {
return ['loot/category',['name'=>$matches[5]]];
} elseif(preg_match('%^([\w\-]+)([\/]{1})([\-\w\d]+)$%',$request->pathInfo, $matches)) {
return ['loot/category',['name'=>$matches[3]]];
} elseif(preg_match('%^([\-\w\d]+)([\/]{1})([\-\w\d]+)([.html]+)$%',$request->pathInfo, $matches)) {
return ['item/detailloot', ['item' => $matches[3]]];
}
}
return false;
}
return false;
}
public function createUrl($manager, $route, $params)
{
return false; // данное правило не применимо
}
}
Код: Выделить всё
namespace app\controllers;
use yii\web\Controller;
use yii;
use app\models\Category;
use app\models\Items;
use yii\data\Pagination;
use yii\web\HttpException;
use yii\db\Query;
class LootController extends Controller
{
/**
* Displays homepage.
*
* @return string
*/
/** Рендер страницы списка категорий и общего списка лута **/
public function actionMainloot()
{
$fullitems = Items::find()->where(['active' => 1]);
$pagination = new Pagination(['defaultPageSize' => 10,'totalCount' => $fullitems->count(),]);
$items = $fullitems->offset($pagination->offset)->orderby(['date_create'=>SORT_DESC])->limit($pagination->limit)->all();
$request = \Yii::$app->request;
return $this->render('mainpage.php', ['items' => $items,'active_page' => $request->get('page',1),'count_pages' => $pagination->getPageCount(), 'pagination' => $pagination]);
}
/** Рендер детальной страницы категории - тут рендерятся как родительские так и дочерние категории */
public function actionCategory($name)
{
$cat = Category::find()->where(['url'=>$name])->One();
if($cat) {
$fullitems = Items::find()
->alias( 'i')
->select('i.*')
->leftJoin('category as c1', '`i`.`parentcat_id` = `c1`.`id`')
->andWhere(['c1.url' => $name])
->andWhere(['active' => 1])
->orWhere(['c1.parent_category' => $cat->id])
->andWhere(['active' => 1])
->with('parentcat');
$pagination = new Pagination(['defaultPageSize' => 1,'totalCount' => $fullitems->count(), 'forcePageParam' => false, 'pageSizeParam' => false]);
$items = $fullitems->offset($pagination->offset)->orderby(['date_create'=>SORT_DESC])->limit($pagination->limit)->all();
return $this->render('categorie-page.php', ['cat' => $cat, 'items' => $items, 'count_pages' => $pagination->getPageCount(), 'pagination' => $pagination]);
} else {
throw new HttpException(404 ,'Такая страница не существует');
}
}
}
Код: Выделить всё
<div class="col-lg-12 pagination text-center">
<?= LinkPager::widget([
'pagination' => $pagination,
]);
?>
</div>
https://*Имя сайта*/loot/category?name=weapons&page=2
Хотя нужно добиться варианта, чтобы выглядело вот так:
https://*Имя сайта*/loot/weapons?page=2
Этот вариант, даже если проверить вручную работает корректно и отдает страницу правильно.
Как можно привести ссылки пагинации к нужному виду, используя текущий кастомный url компонент?