Проблема с UrlRule и пагинацией

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
YuriKo
Сообщения: 2
Зарегистрирован: 2016.01.26, 23:52

Проблема с UrlRule и пагинацией

Сообщение YuriKo »

Добрый вечер! Помогите разобраться с UrlRule и пагинацией.

Есть необходимость в проекте сделать ссылки "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, 
        ]);
}
 
Везде url строится правильно, включая форму фильтрации. Но при подключении пагинации в ListView строится url вида: site.com/category-name?rubric_url=category-name&page=2

Никак не могу понять, почему GET параметром дублируется - rubric_url=category-name.

Подскажите, как сделать ссылки в пагинации вида - site.com/category-name?page=2
lynicidn
Сообщения: 2222
Зарегистрирован: 2014.05.24, 15:12

Re: Проблема с UrlRule и пагинацией

Сообщение lynicidn »

$query = http_build_query($params) !== ''

знаешь чему тут квери будет равен?
YuriKo
Сообщения: 2
Зарегистрирован: 2016.01.26, 23:52

Re: Проблема с UrlRule и пагинацией

Сообщение YuriKo »

$query = 1. Спасибо, поправил, заработало!
Ответить