Есть необходимость в проекте сделать ссылки "site.com/category-name" или "site.com/category-subname". Названия рубрик и подрубрик хранятся в базе.
Создал свой класс PageUrlRule
Код: Выделить всё
class PageUrlRule extends Object implements UrlRuleInterface
{
public function createUrl($manager, $route, $params)
{
if ($route === 'rubric/index') {
if (isset($params['rubric_url'])) {
$url = $params['rubric_url'];
unset($params['rubric_url']);
if (!empty($params) && $query = http_build_query($params) !== ''){
$url .= '?' . $query;
}
return $url;
}
}
return false;
}
public function parseRequest($manager, $request)
{
.......
if(isset($path[0]) and !isset($path[1])){
$page_rub = Rubric::find()->where(['rubric_url'=>$path[0]])->one();
if($page_rub->rubric_url != null) {
$params = ['rubric_url' => $page_rub->rubric_url];
return ['rubric/index', $params];
}
}
........
}
}
Код: Выделить всё
public function actionIndex($rubric_url)
{
$rubric = Rubric::find()->where(['rubric_url'=>$rubric_url])->one();
$searchModel = new Search([
'rubric_id' => $rubric->id,
]);
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
$dataProvider->pagination = [
'pageSize' => 10,
'forcePageParam' => false,
'pageSizeParam' => false,
'route' => Url::to(['rubric/index', 'rubric_url'=>$rubric_url]),
];
return $this->render('index',
[
'rubric' => $rubric,
'searchModel' => $searchModel,
'listDataProvider' => $dataProvider,
]);
}
Никак не могу понять, почему GET параметром дублируется - rubric_url=category-name.
Подскажите, как сделать ссылки в пагинации вида - site.com/category-name?page=2