2011-07-13 11 views
1

私はCodeIgniterが新しく、私の質問には簡単な答えがあることを願っています。CodeIgniterネストされたコントローラ?

私はいくつかのメニュー項目(menuA、menuBおよびmenuC)を持つウェブサイトを持っています。 私はコントローラー内に1つのメインコントローラーindex()、menuA()、menuB()およびmenuC()をモデル化しました。呼び出される関数は、セッション値currentMenuを設定し、ヘッダー、X、フッターを含みます。 Xは呼び出される関数に依存します。ヘッダーが選択されたメニューをハイライトします。

私のwebappのアカウント設定では、AccountSettings/NotLoggedInのサブビューを制御する別のコントローラが必要です。

論理的には、私はmenuC()にヘッダとフッタを含めるが、その後、ログインを管理するサブコントローラまたはサブページにコールを転送したい。

私は間違ったフレームワークを使用していますか、これを達成するための簡単な方法がありますか?

+4

答えはコードによって異なる可能性があるので、ここにいくつかのコードを入れてください。 – ramono

答えて

5

あなたの構造にMVCを適用する方法を理解していないように思えます。

コントローラは、ユーザーが対話できるアプリケーションのいくつかの側面を表しています。たとえば、itemsコントローラを作成して、ユーザーがitemsを作成、読み取り、更新、または削除できるようにすることができます。 itemsと対話するためのすべてのロジックは、そのコントローラーによって処理されます(つまり、itemsモデルを呼び出し、必要なビューをレンダリングします)。

あなたのケースでは、ユーザーが呼び出す可能性のある特定のページのコンテンツの表示を処理するコントローラpagesを構築しているようです。あなたは重複を持っている複雑なサイトを扱っているときは少しトリッキー得ることができます

class Page extends CI_Controller { 

    public function index() 
    { 
     // Logic to render home page 
    } 

     public function about() 
    { 
     // Logic to render the about page 
    } 

    // ... etc ... 

再生回数:だからあなたのコントローラは、このようなものを見ることができます。私が途中で発見した最も有用なトリックの1つは、冗長性を減らすためにemplatingライブラリを使用することです。これは私が常時使っているものです:http://williamsconcepts.com/ci/codeigniter/libraries/template/reference.html。テンプレートライブラリを使用すると、ヘッダーとフッターを含むレイアウトを簡単に定義できます。次に、表示するコンテンツの一部を渡します。

メニューのようなロジックを扱うには、ページ名を変数に渡してから、基本的なPHPレンダリングを行うだけです。

// Say we pass in a variable called $current to our view 
// $current contains the name of the current page 
// So say $current = 'About' for this example. 


$sitemenu = array(
    array('/', 'Home'), 
    array('/about', 'About'), 
    array('/help', 'Page 2'), 
    array('/contact', 'Page 3') 
); ?> 
<nav> 
    <ul> 
    <?php foreach($sitemenu as $page) { ?> 
    <?php if($current == $page[1]) { ?> 
     <li class="current"><a href="<?php echo $page[0]; ?>"><?php echo $page[1]; ?></a></li> 
    <?php } else { ?> 
     <li><a href="<?php echo $page[0]; ?>"><?php echo $page[1]; ?></a></li> 
    <?php } ?> 
    <?php } ?> 
    </ul> 
</nav> 

+0

スーパー感謝!素晴らしいアンカー! – Niclas

関連する問題