Yii2:如何根据网址路由显示不同的布局?

问题描述 投票:0回答:1

我想开始为谷歌使用AMP(加速移动页面),像example.com/my-article这样的文章网址也必须以example.com/amp/my-article的形式提供,但布局不同。

问题:如何构建我的Yii2代码以显示不同的布局并为文章控制器制作网址路由规则?我做的一些提示:

public function beforeAction($action)
{
    if (...) // ??
        $this->layout = 'amp';
    else
        $this->layout = 'main';

    return parent::beforeAction($action);
}

public function actionView($article_slug)
{
    $model = $this->findModel($article_slug);

    if ($this->layout == 'amp')
        $path = 'amp/view';
    else
        $path = 'html/view';

    return $this->render($path, [
        'model' => $model,
    ]);
}

config.php写什么?

'urlManager' => [
    'enablePrettyUrl' => true,
    'showScriptName' => false,
    'rules' => [

        // ??
        'amp/<article_slug:[\w\-]+>' => 'article/view',

        '<article_slug:[\w\-]+>' => 'article/view',
    ],
],
php yii2 accelerated-mobile-page
1个回答
0
投票

在行动之前你可以做这样的事情

public function beforeAction($action)
{
    if (\Yii::$app->request->getQueryParam('amp')) {
        $this->layout = 'amp';
    else
        $this->layout = 'main';

    return parent::beforeAction($action);
}

并像这样配置URL管理器

'urlManager' => [
    'enablePrettyUrl' => true,
    'showScriptName' => false,
    'rules' => [
        '<amp>/<article_slug:[\w\-]+>' => 'article/view',

        '<article_slug:[\w\-]+>' => 'article/view',
    ],
],
© www.soinside.com 2019 - 2024. All rights reserved.