2013-06-26 14 views
5

Vì vậy, tôi đang gặp khó khăn vào lúc này. Tôi muốn triển khai nút Đăng nhập trên trang web của mình, xuất hiện khi không có người dùng nào đăng nhập. Tuy nhiên, tôi muốn nút thay đổi thành liên kết đến tiểu sử của người dùng nếu ai đó đã đăng nhập.Có thể đặt logic có điều kiện lên Chế độ xem CodeIgniter không?

Tôi không biết nếu đúng cách để làm điều này là đặt một câu lệnh if trong View, nó hiển thị HTML khác nhau dựa trên dữ liệu được truyền từ Controller, hoặc nếu Controller cần quyết định nếu người dùng đăng nhập hay không, và vượt qua cấu trúc dữ liệu thích hợp cho Chế độ xem. Đó là cách thích hợp để làm điều đó trong CodeIgniter?

+0

Bạn giữ quan điểm khó hiểu với [mẫu] (http://codeangel.org/articles/simple-php-template-engine.html). Có thể bạn có thể hưởng lợi từ việc học một số [khái niệm cơ bản] (https://en.wikipedia.org/wiki/Model_view_controller), thay vì theo CI như một tôn giáo. –

+0

@ tereško Tôi không có ý định sử dụng các mẫu, nhưng tôi thấy chúng hữu ích như thế nào trong trường hợp này. – Ermir

+0

Bạn đã sử dụng mẫu. Bạn có thể ít nhất đã xem mã và so sánh với "khung nhìn" của người viết mã ... nhưng sau đó một lần nữa, nếu mọi người có thể hiểu được CI đã được viết như thế nào, họ sẽ không sử dụng nó. –

Trả lời

4

Bộ điều khiển là để tính toán và thao tác dữ liệu và chuyển kết quả đến chế độ xem và chế độ xem lấy kết quả và hiển thị chúng thành HTML.

Nếu bạn nên sử dụng câu hỏi if trong chế độ xem để hiển thị hoặc ẩn một số đánh dấu, bạn được phép!

nhưng nếu phần thay đổi chứa nhiều thông tin, tôi khuyên bạn nên sử dụng một phần lượt xem và chuyển nội dung của chúng dưới dạng biến cho chế độ xem chính. Và làm tất cả những điều này trong bộ điều khiển.

Để làm điều đó trong CodeIgniter:

Bộ điều khiển:

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); 
    } 
} 

Assumption:user_id được thiết lập trong phiên CI khi người dùng đăng nhập

Xem:.

<?php echo $partial; ?> 
+0

Đây chính xác là những gì tôi đang tìm kiếm, cảm ơn rất nhiều. Tôi mới bắt đầu với CodeIgniter ngày hôm qua, vì vậy nó đã không xảy ra với tôi rằng bạn có thể có các chế độ xem có điều kiện như thế. – Ermir

1

Điều này áp dụng cho bất kỳ ứng dụng dựa trên MVC nào, không chỉ CI.

Vì bạn đang thay đổi cách hiển thị view cho người dùng, không có gì sai khi đặt điều kiện trong số view của bạn. Tuy nhiên, logic phải được thực hiện trong số controller của bạn. Ví dụ, bộ điều khiển của bạn có thể giống như thế:

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

sau đó trong tầm nhìn của bạn,

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

Rõ ràng đây sẽ nhận được mệt mỏi để làm trong mỗi phương pháp điều khiển, vì vậy kiểm tra this câu hỏi mà sẽ cho phép bạn để tránh có mã trùng lặp.

+0

Tôi đang tranh luận xem có nên sử dụng phương pháp này hoặc sử dụng cách của Hashem để thực hiện nó hay không. Tôi đoán cả hai kỹ thuật có thể làm việc trong một số trường hợp. – Ermir

4

Trong Codeigniter, bạn có thể đặt câu lệnh if và else trong chế độ xem.

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

Đây là mức độ tôi sẵn sàng sử dụng điều kiện trong Chế độ xem. Tôi không có ý định đặt bất kỳ logic kinh doanh nào cả. – Ermir

2

Đó rõ ràng là có thể có logic nhúng trong một View, nhưng ý tưởng về một MVC là phải có tất cả các logic trong điều khiển, vì vậy tôi đoán bạn sẽ đánh bại mục đích của việc sử dụng CodeIgniter. Các khung nhìn nói chung được sử dụng để hiển thị nội dung được truyền bởi bộ điều khiển.

Các vấn đề liên quan