@jekahm

Как сгенерировать ссылки кнопок пагинации для страницы с ЧПУ урлом?

Доброго времени суток!
Ситуация следующая.
В переопределённом методе createUrl класса UrlManager для создания ЧПУ урла для ссылок на списки постов в блоге сделал следующее:
if ($params[0] == 'blogs/posts' && isset($params['id'])) {
		    $model = Blogs::findOne($params['id']);
		    $alias = $model->blog_alias;
		    $url = '/blogs/'.$alias;
	    }

Парсинг самого уже самого урла произвожу в переопределённом методе parseRequest класса UrlRule:
if (strpos(Url::to(''), '/blogs/') !== false) {
            $alias = explode('/blogs/', Url::to(''));
            $model = Blogs::find()->where('blog_alias = :name', [':name'=>array_pop($alias)])->one();
            if ($model) {
                $params['id'] = $model->blog_id;
                return ['/blogs/posts', $params];
            }


Код контроллера отвечающего за вывод постов блога:
public function actionPosts($id)
    {
        $this->layout = 'default_two_columns';
        $blog = $this->findModel($id);
        $query = BlogsPosts::find()
                ->where('bp_blog_id = :blog', [':blog' => $id])
                ->orderBy('bp_post_created DESC');

            $dataProvider = new ActiveDataProvider([
                'query' => $query,
                'pagination' => [
                    'pageSize' => 20,
                ],
            ]);
            return $this->render('posts', [
                'dataProvider' => $dataProvider,
                'blog' => $blog
            ]);
    }


Всё работает отлично, кроме кнопок пагинации. Так как в данном случае там отсутствуют параметры page и per-page, а ссылка кнопки = урлу самой страницы.
Помогите найти выход из данной проблемы.
Код мне достался от предыдущих кодеров.
Заранее всем благодарен за помощь!
  • Вопрос задан
  • 328 просмотров
Пригласить эксперта
Ответы на вопрос 1
arutyunov
@arutyunov
Mooza.ru — Делаем сайты
А зачем вы переопределяется createUrl?
Вы не умеете правила для urlManager в конфиге составлять?

Yii2 отлично поддерживает ЧПУ, в том числе и для записей в блогах/новостей.

Конфиг:
'blog/<slug:[\w-_]+>' => 'blog/view',

Формирование ссылки на пост:
<?= Url::to(['blog/view', 'slug' => $post->slug]) ?>


Контроллер:
public function actionView($slug)
    {
        $post = Post::findBySlug($slug);

        if($post === null) {
            throw new NotFoundHttpException;
        }

        return $this->render('view', [
            'post' => $post
        ]);
    }


В модели Post используется sluggable behavior
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы