我不确定我要用的是最好的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>
它看起来很棒,位于页面中间,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>
此代码显示全宽页面(如果是访客)或侧边栏(如果用户已登录).
在“联系我们”页面上发生的事情是由于侧边栏而导致的表格变得紧张.正确的内容是’col-md-9′,当你把联系表格放入其中时(有’col-lg-4′),它只会在9列中占据4个,导致它被碾压.
由于此页面(联系页面)应该是公开可见的(即:如果用户无法登录,他们将被搞砸并且无法联系支持人员),这两种情况都可能发生.它可以由登录的成员查看,从而产生碾压形式,或者由看起来很好的客人查看.
我的方法是添加一个变量$showSidebar.然后在contact.PHP中有$showSidebar = false.该变量的默认操作将由isGuest设置,并且页面可以覆盖它以关闭每页的侧边栏.
我真的不想要大量的ifGuest检查显示替代div或代码,所以我觉得这将是最好的方法.
如何扩展视图以添加我自己的变量?该文件在vendor / yiisoft / yii2 / web / view我认为..
这是Yii2高级模板.
PS:我愿意更好地解决我的问题.我不想要黑客,但最合适的Yii方式去做.