Yii2 Advanced - 扩展视图以添加自定义变量

Wad*_*ade 6 twitter-bootstrap yii2 twitter-bootstrap-3 yii2-advanced-app

我不确定我要用的是最好的Yii解决方案来处理这个问题.所以我愿意接受更好的解决方案.无论最简单的Yii方式是什么.

我有一个左侧边栏,只需要向登录的用户显示.这不是问题,我知道如何通过选中'Yii :: $ app-> user-> isGuest'来显示内容.

在特定页面上,我不想要这个侧边栏,即使他们已登录.例如,"联系我们"页面不需要左侧边栏.我真的不在乎它是否有侧边栏,但它正在抛弃Bootstrap3列.

<div class="row">
    <div class="col-lg-4 center-col">

        <div class="site-contact">
            <h1><?= Html::encode($this->title) ?></h1>

            <p>
                If you have business inquiries or other questions, please fill out the following form to contact us. Thank you.
            </p>

            <div class="row">
                <div class="col-lg-12">
                    [contact form code truncated]
                </div>
            </div>
        </div>

    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

它看起来很棒,位于页面中间,4个宽.

但是,在我的Yii main.php(frontend/views/layouts/main.php)中,我有2个单独的布局,具体取决于用户是否已登录.

<div class="container-fluid mainpage">

    <?= Alert::widget() ?>

    <div class="row">

        <?php if (!Yii::$app->user->isGuest) { ?>

            <div class="col-md-3 sidebar">
                <?= Menu::widget([
                    'options' => ['class' => 'nav nav-sidebar'],
                    'items' => [
                            ['label' => 'Home', 'url' => ['site/index']],
                            ['label' => 'About', 'url' => ['site/about']],
                            ['label' => 'Contact', 'url' => ['site/contact']],
                        ],
                    ]);
                ?>
            </div>

            <div class="col-md-9">
                <?= $content ?>
            </div>

        <?php } else { ?>

            <div class="col-sm-12">
                <?= $content ?>
            </div>

        <?php } ?>
    </div>

</div>
Run Code Online (Sandbox Code Playgroud)

此代码显示全宽页面(如果是访客)或侧边栏(如果用户已登录).

在"联系我们"页面上发生的事情是由于侧边栏而导致的表格变得紧张.正确的内容是'col-md-9',当你把联系表格放入其中时(有'col-lg-4'),它只会在9列中占据4个,导致它被碾压.

由于此页面(联系页面)应该是公开可见的(即:如果用户无法登录,他们将被搞砸并且无法联系支持人员),这两种情况都可能发生.它可以由登录的成员查看,从而产生碾压形式,或者由看起来很好的客人查看.


我的方法是添加一个变量$ showSidebar.然后在contact.php中有$ showSidebar = false.该变量的默认操作将由isGuest设置,并且页面可以覆盖它以关闭每页的侧边栏.

我真的不想要大量的ifGuest检查显示替代div或代码,所以我觉得这将是最好的方法.

如何扩展视图以添加我自己的变量?该文件在vendor/yiisoft/yii2/web/view我认为..

这是Yii2高级模板.

PS:我愿意更好地解决我的问题.我不想要黑客,但最合适的Yii方式去做.

Asp*_*ped 4

由于 View 是一个 Yii 组件,你可以像其他组件一样在 yii 配置文件中设置它。只需添加如下内容:

 'components'     => [
        'view'         => [
            'class' => 'app\components\extended\View',
        ],
Run Code Online (Sandbox Code Playgroud)