2011-01-04 19 views
6

Cho đến nay tôi đã thích thú khi sử dụng CodeIgniter để tạo một số ứng dụng web đơn giản (thực sự chỉ là học khuôn khổ), nhưng tôi không thể tìm ra cách dễ dàng để tạo khối/mô-đun.Tạo Khối/Mô-đun trong Mã số Igniter

Tôi muốn có khối "Hình ảnh gần đây" mà tôi có thể thả trên bất kỳ trang nào trên trang web mà không sao chép truy vấn trong bộ điều khiển của từng trang và chuyển nó vào mẫu có $ vars.

2 câu hỏi:

  1. Tôi đang sử dụng partials trong quan điểm đã có, nhưng làm thế nào để viết một phần mà kéo từ một bộ điều khiển khác so với cái được xác định bởi các url .
  2. Làm cách nào để tôi có thể tạo một bộ điều khiển để lấy dữ liệu cho ngăn chặn và không tạo ra một trang
    cho nó.

Điều này có vẻ đơn giản là đủ, tôi chỉ không có bất kỳ may mắn nào tìm được giải pháp thích hợp. Cảm ơn trước.

Trả lời

7

Được rồi, đây là của tôi về "tiện ích", "mô-đun", "một phần lượt xem" hoặc bất kỳ điều gì bạn muốn gọi cho họ. Dù bằng cách nào chúng tôi đều có nghĩa là các mục có thể sử dụng lại cho các trang.

Có rất nhiều cách khác nhau để thực hiện việc này nên cách của tôi có thể không phù hợp với bạn - sau đó lại có thể chỉ là những gì bạn đang tìm kiếm!

Thứ nhất, tôi làm cho các vật dụng như quan điểm, giả sử các đường dẫn sẽ như thế nào: views/widgets/myview.php

tôi đưa ra quyết định về những gì widget tôi đang lập kế hoạch để sử dụng trong điều khiển của tôi. Phương pháp của tôi là đặt các đường dẫn đến các quan điểm tôi muốn trong một mảng như:

$data['widgets'] = array('widgets/myview', 'widgets/myview2'); 

Sau đó, khi tôi tải giao diện chính của tôi (vẫn còn trong bộ điều khiển của tôi) Tôi làm điều này:

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

Bây giờ mảng tiện ích được chuyển đến chế độ xem chính.

Sau đó, trong giao diện chính của tôi khi tôi nhận được đến nơi mà các vật dụng đi, tôi lặp qua mảng của tôi như thế này:

foreach ($widgets as $widget) 
{ 
    $this->load->view($widget); 
} 

Vòng lặp này được chạy trong giao diện chính của tôi. Thuận tiện, tất cả dữ liệu bạn đã chuyển đến chế độ xem chính sẽ có sẵn trong các chế độ xem lồng nhau mà bạn tải.

Tôi đã tạo nhiều tiện ích con trong Codeigniter theo cách này và đó cũng là phương pháp tôi sử dụng trong CMS của mình.

+0

ahhh, tôi nghĩ rằng điều này rõ ràng hơn những gì tôi đang tìm kiếm, nhưng Thrope, cảm ơn bạn đã giúp đỡ của bạn là tốt. Tôi đang học rất nhiều về CI. – Rapture

6

ý bạn là gì bởi partials? Không có chế độ xem một phần gốc trong CodeIgniter. Mặc dù, bạn có thể $this->load->view() trong chế độ xem.

Nếu bạn đang nói về biến từ bộ điều khiển có sẵn cho tất cả các quan điểm mà bạn sẽ tải, bạn nên làm:

$data['info'] = 'value'; 
$this->load->vars($data); 

$info sau đó sẽ có sẵn cho tất cả các quan điểm bạn nạp.

Cập nhật:

Bạn cần phải làm điều đó trong constructor của bạn:

class Page extends Controller { 
    function Page() 
    { 
     $this->load->model('page'); 
     $data['images'] = $this->page->get_images(); 
     $this->load->vars($data); 
     // images will now be available to all views 
    } 

} 

Cập nhật 2:

Tôi phải thừa nhận rằng tôi đã không sử dụng Templates nhưng điều này sẽ làm việc cho tất cả các trang được tạo bởi bộ điều khiển của bạn.

+0

Xin lỗi - tôi đoán ý tôi là sử dụng Mẫu. Như bạn đã nói - sử dụng $ this-> load-> view ('user_controls'). Tôi không muốn dữ liệu nhất thiết phải toàn cầu và được tải trên mỗi chế độ xem, nhưng tôi muốn trên các trang có "hình ảnh gần đây" gọi bộ điều khiển điền dữ liệu đó mà không cần phải chạy truy vấn đó từ bộ điều khiển của mỗi trang có hình ảnh gần đây chặn không? Có lẽ tôi không có ý nghĩa? – Rapture

+0

cất lên, xem cập nhật của tôi. –

+0

ahh, cảm ơn bạn. Có vẻ như tôi cần làm quen với các mô hình hơn. Hiện tại tôi chỉ có 2 mô hình cơ sở dữ liệu giáo lý của mình và đã sử dụng thế hệ trang được xây dựng bằng cách sử dụng controllerName/functionName, vì vậy tôi không có mô hình Trang. Có vẻ như tôi có thể cần phải học cách tạo ra một – Rapture

3

Tin vui là CodeIgniter chắc chắn đang di chuyển theo hướng này. Để bắt đầu, hãy xem phần Mở Rộng Mô-đun từ wiredeignz. Nó có thể được tìm thấy ở đây: https://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc/overview với tài liệu tốt để giúp bạn bắt đầu. Điều này có thể là hoàn hảo cho bạn, bởi vì bạn có thể chạy một mô-đun (tức là gọi một bộ điều khiển/phương thức của một mô-đun và nó trả về một phần xem) và chèn nó vào một khuôn mẫu hoặc toàn cầu hoặc bất cứ điều gì. Ngoài ra, hãy xem CI 2.0 - https://bitbucket.org/ellislab/codeigniter/overview Nó hoàn toàn khác với các phiên bản mã vạch trước đó và có nhiều tính năng mới rất thú vị. Mặc dù trong phiên bản beta nó rất, rất ổn định. HMVC được viết để làm việc với CI 2.0.

Ngoài ra, hãy xem mã cho các dự án CI khác hoạt động theo cách này. Tôi muốn giới thiệu pyroCMS bởi Phil Sturgeon. Anh ấy thực sự dẫn đầu và đã viết nhiều bài báo và bài viết thú vị về mô đun hóa và CI 2.0. www.philsturgeon.co.uk

Cách làm việc này thực sự hữu ích để giữ các bit riêng biệt của một trang web độc lập, chỉ được sử dụng khi cần.

Để thử và trợ giúp bạn trực tiếp hơn một chút ...

Đừng quên rằng bạn có thể lưu đầu ra bằng thông số thứ ba tùy chọn. Xem hướng dẫn sử dụng nếu bạn không chắc chắn.

$partial = $this->load->view('someView', $data, true); 
Các vấn đề liên quan