1

私のCodeigniterサイトでは、まず各コントローラーの状況を表示することから始めました。変更を加えるには、それぞれのコードに戻る必要があるため、これは実用的ではありませんでした。そこで、アプローチを変更し、オプションのフィールドを備えた「デフォルト」コントローラーで操作しました。次に、必要に応じて特別なビューをロードできると思いました。

$titleこのビューを、、オン/オフなどのフィールドを持つオプションのフィールドと組み合わせまし$search_barた。ただし、コンテンツ領域が追加されました。以下を使用して、このデフォルトのビューにさらに多くのビューをロードすることができました。

        $data['content_views'][]='blocks/login';

        $this->load->view('default/a', $data);

および「デフォルト」ビュー:

if(isset($content_views)&& (is_array($content_views)))
    {
        foreach($content_views as $content_view)
        {
            $this->load->view(&$content_view);
        }
    }

(そしてそれはうまくいきます)2つの質問:

  1. 私は物事を複雑にしていますか?これはこれを行うための受け入れられた方法ですか?または、ビューの機能と、ビューがどのように機能するのかを誤解しましたか?

  2. つまり、テキストのブロック、次にビューを混在させる方法が必要です。$content_viewどうすればいいのかよくわかりません。最初にメッセージ、次にビュー、さらにテキストが必要だとします。このメソッドはビューのみを受け入れます。

誰かが私がこの柔軟なアプローチを作成するのを手伝ってもらえますか?

4

1 に答える 1

1

ええ、あなたは物事を少し複雑にしていると思います。私はあなたの説明に十分に従わず、正確に応答する方法を知ることができないかもしれませんが、私はそれをどのように行うかをあなたに伝えることができます:

まず、サイト全体がテンプレートを介して実行されるため、ヘッダーとフッターはコンテナファイルであり、サイト内で必要なすべてのビューは、記事ページやギャラリーページなどのページタイプのビューとしてレンダリングされます。コンポーネントが読み込まれ、に渡されます。文字列として表示:

$content['sidebar'] = $this->load->view('components/sidebar', $data, true);

その最後の真実は、文字列としてレンダリングすることを意味します。

基本的に、これは、ページビューがほとんどhtmlであり、phpが必要な要素をエコーアウトしていることを意味します。他のビューを呼び出すビューはありません。これが、私があなたの例を読んだ方法です。

CIはビューを段階的にロードするため、コントローラーは次のように出力できます。

$this->load->view('header', $header_data);

$view_data['sidebar'] = $this->load->view('components/sidebar', $sidebar_data, true);
$this->load->view('content', $view_data);

$this->load->view('footer', $footer_data);

コンテンツビューでは、サイドバーを次のように処理します。

<?php if(isset($sidebar)): ?>
<nav>
    <?php echo $sidebar; ?>
</nav>
<?php endif; ?>

また、ビューごとにこれらの配列を設定すると、ヘッダー、コンテンツ、フッターの順にレンダリングされます。また、サイドバーが存在する場合はそれをレンダリングします。

つまり、すべてを組み合わせると、基本的には、コントローラーのセクションを段階的にロードして、サブビューを文字列として意味のあるセクションに渡すことができると言っています。これにより、ビューファイル自体ではなく、ビューが属するコントローラーでビューを制御し続けることができます。私の経験では、サイトが適切に計画されている場合、この構成が完全に適切ではないほど複雑なサイトを作成する必要はありませんでした。

于 2012-12-10T20:01:29.873 に答える