2013-06-26 3 views
5

私は現時点でジレンマに陥っています。ユーザーがログインしていないときに表示される自分のサイトにログインボタンを実装したいのですが、既にログインしているユーザーのプロフィールへのリンクにボタンを変更したいのですが。CodeIgniterビューに条件付きロジックを入れても構いませんか?

私はしませんこれを行う正しい方法がコントローラから渡されたデータに基づいて異なるHTMLをレンダリングするビューにifステートメントを入れることであるかどうか、またはコントローラがユーザーがログインしているかどうかを判断する必要があるかどうかを知り、適切なデータ構造をビューに追加します。 CodeIgniterでこれを行う正しい方法は何ですか?

+0

あなたは[テンプレート](http://codeangel.org/articles/simple-php-template-engine.html)との混乱を避けています。宗教のようにCIを守る代わりに、いくつかの[基本](https://en.wikipedia.org/wiki/Model_view_controller)を学ぶことで恩恵を受ける可能性があります。 –

+0

@tereško私はテンプレートをまったく使用するつもりはありませんでしたが、このケースではどのように役立つのか分かりました。 – Ermir

+0

あなたは既にテンプレートを使用しています。あなたは少なくともコードを見て、コード署名者の「ビュー」と比較することができました...しかし、CIがどのように書かれているかを理解できれば、それを使用しないでしょう。 –

答えて

4

コントローラはデータを計算して操作し、結果をビューに渡すためのもので、ビューは結果をHTMLにレンダリングします。

マークアップを表示または非表示にするには、ビュー内でifステートメントを使用する必要があります。

変更セクションに多くの情報が含まれている場合は、部分ビューを使用し、その内容を変数としてメインビューに渡すことをお勧めします。これらすべてをコントローラーでやっています。

はCodeIgniterの中でそれを行うには:

コントローラー:

class Foo extends CI_Controller { 
    public function bar() 
    { 
     // prevent getting error. 
     $data['partial'] = ''; 

     // check if user is logged in. 
     if ($this->session->userdata('user_id') == TRUE) { 
      $data['partial'] = $this->load->view('partial/baz', '', TRUE); 
     } else { 
      $data['partial'] = $this->load->view('partial/qux', '', TRUE); 
     } 

     $this->load->view('my_view', $data); 
    } 
} 

仮定:user_idはCIセッションに設定されている場合、ユーザ・ログに

ビュー:

<?php echo $partial; ?> 
+0

これはまさに私が探していたものです。ありがとうございました。私は昨日CodeIgniterを使い始めました。そのような条件付きビューを持つことはできませんでした。 – Ermir

1

これは、CIだけでなく、どのMVCベースのアプリケーションにも適用されます。

viewの表示方法を変更しているため、viewに条件を入れても問題ありません。しかし、これに対するロジックは、controller内で実行する必要があります。その後、あなたのビュー内で、

<?php if(isset($logged_in)): ?> 
Hey User! <a href="">logout</a> 
<?php else: ?> 
<a href="">login here</a> 
<?php endif; ?> 

は明らかにこれは、各コントローラのメソッド内で行うことが退屈取得ので、あなたができるようになりますthis質問をチェックアウトします

class x 
{ 
    public function index() 
    { 
    if($session->get('logged_in') === true){ 
     // send a variable to the view 
    } 
    } 
} 

:たとえば、あなたのコントローラのようなものを見ることができますコードが重複しないようにします。

+0

私はこの方法を使うべきか、それともハッセンのやり方を使うかについて議論していました。私は両方のテクニックが特定の場合に動作すると思います。 – Ermir

4

Codeigniterでは、if文とelse文を表示することができます。

if($this->session->userdata('your_session_variable')) 
{ 
    ?> 
    <a href="profile_page_link">Profile</a> 
    <?php 
} 
else 
{ 
    ?> 
    <a href="login_page_link">Login</a> 
    <?php 
} 
+0

これは、ビューで条件を使用したいと思った程度でした。私はそこにビジネスロジックを置くつもりはなかった。 – Ermir

2

それはビューに埋め込まれたロジックを持つことが明らかに可能ですが、MVCの考え方は、コントローラ内のすべてのロジックを持っているので、私はあなたがCodeIgniterのを使用しての目的を破っことでしょうね。ビューは一般に、コントローラによって渡されたコンテンツをレンダリングするために使用されます。

関連する問題