6

私がしようとしていることが、これを処理するための最良の 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 によって設定され、ページはそれをオーバーライドして、ページごとにサイドバーをオフにすることができます。

isGuest が代替の div またはコードを表示するかどうかをチェックする大量の if チェックは本当にしたくないので、これが最善のアプローチだと思います。

ビューを拡張して独自の変数を追加するにはどうすればよいですか? ファイルは vendor/yiisoft/yii2/web/view にあると思います..

これは Yii2 の高度なテンプレートです。

PS:私は自分の問題に対するより良い解決策を受け入れています。私はハックしたくありませんが、それを行うための最も適切な Yii の方法です。

4

3 に答える 3

4

ビューは Yii コンポーネントであるため、yii 構成ファイルで他のコンポーネントと同じように設定できます。次のように sth を追加するだけです。

 'components'     => [
        'view'         => [
            'class' => 'app\components\extended\View',
        ],
于 2015-04-23T14:21:47.120 に答える
0

私によると、最善の解決策は、ユーザーと組織にマップされたデータベース設定テーブルを作成し、組織に関して特定のユーザーのメニューをそのテーブルに保存することです。そのため、組織固有のユーザーごとにメニューを制御できます。

また、ログインしていないユーザーに表示できるデフォルトメニューを設定に保存します(これはすべてのユーザーのデフォルトであるため)

于 2016-05-06T10:59:12.210 に答える