2008-10-07 12 views
17

Tôi chỉ mới bắt đầu với CodeIgniter, và tôi không chắc chắn những thứ như css, js và hình ảnh sẽ đi đến đâu. Bên ngoài toàn bộ thư mục hệ thống có vẻ ok, nhưng điều đó có nghĩa là tất cả mọi thứ là riêng biệt. Bên trong có nghĩa là filepaths dài hơn, và tôi lo rằng nó có thể làm mọi thứ rối tung lên. Thực tiễn tốt nhất về vấn đề này là gì?Tài sản nên đi đâu trong dự án đánh lửa mã?

Trả lời

15

Tôi thường đặt thư mục riêng biệt ở cấp độ gốc, vì vậy tôi kết thúc với một cấu trúc thư mục như thế này:

/system 
/css 
/js 
/img 

Dường như làm việc cho tôi - khi bạn sử dụng site_url(url), URL nó tạo ra là từ gốc, vì vậy bạn có thể sử dụng site_url('css/file.css') để tạo URL cho bảng định kiểu của mình, v.v.

+0

Ah, có ý nghĩa. Tôi muốn có thể sử dụng site_url, vì vậy điều này có ý nghĩa. Cảm ơn! –

+0

Điều đó có nghĩa là bạn giữ thư mục hệ thống của bạn bên trong một thư mục công cộng? –

+1

@Blowski Có. Tôi biết nó không phải là thực hành tốt nhất nhưng tôi không nghĩ rằng nó nhất thiết phải là một vấn đề, đặc biệt là nếu bạn sử dụng .htaccess để đóng truy cập vào nó. –

1

Tôi ghét có quá nhiều thư mục ở cấp cơ sở, vì vậy tôi sử dụng/công khai và sử dụng htaccess để ghi đè/tập lệnh/công khai/tập lệnh v.v. .

+0

Bạn có thể đăng mod_rewrite của mình không? – bswinnerton

1

Tôi thấy tốt nhất là giữ nội dung ở cấp cơ sở. Bạn có thể sử dụng <?=base_url()?> để lặp lại toàn bộ thư mục gốc của trang web. Trong tệp cấu hình, bạn thiết lập thư mục gốc của trang web. Tuyên bố này chỉ vang vọng điều đó.

Bởi vì điều này, bạn có thể sử dụng bao gồm như sau:

<link href="<?=base_url()?>/css/style.css" rel="stylesheet" type="text/css" /> 

bất cứ nơi nào trong mã của bạn, và nó vẫn sẽ nhận được http://example.com/css/style.css.

1

BASE_URL()/css/name.css

+0

base_url() thực sự bao gồm dấu gạch chéo để bạn muốn: base_url(). 'css/name.css'; –

+0

ok.ok.thanks .i biết nhưng tôi đã quên đặt nó –

1

Để sử dụng site_url (url) helper theo cách này trước tiên bạn phải cấu hình Apache mod_rewrite (hoặc tương đương) để loại bỏ các phân khúc index.php từ URI .

Nếu không, phương thức site_url sẽ thêm index.php vào URL có khả năng sẽ làm hỏng đường dẫn đến nội dung của bạn nếu bạn đã có chúng trong thư mục cơ sở như trên.

Dưới đây là tài liệu CodeIgniter vào việc loại bỏ index.php từ URI:

http://codeigniter.com/wiki/mod_rewrite/

6

Cá nhân, tôi rip thư mục application ra khỏi thư mục system và làm cho nó một anh chị em để system. Sau đó tôi tạo một thư mục dự án trong public_html (www) nơi tôi di chuyển index.php và lưu trữ các tài sản công cộng của mình.

Giả sử dự án bạn đang làm việc được gọi là projekt. Trong thư mục cha để public_html (www) tạo ra một thư mục gọi là CISYSTEM, và bên trong thư mục đó tạo một thư mục từ phiên bản bạn đang sử dụng, 202, 210, vv

/CISYSTEM 
    /202 
    /210 
    /another_CI_version 
/projekt_application 
    /models 
    /views 
    /controllers 
    /private_assets 
/public_html 
    /projekt 
     index.php 
     .htaccess 
     css 
     img 
     js 
     lib 

Vẻ đẹp của cấu trúc thư mục này là nó cho biết thêm một layer khác bảo mật và làm cho nó dễ dàng nâng cấp/trao đổi lõi CI của bạn. Ngoài ra, bạn không được phép thay đổi lõi - có một thư mục duy nhất nơi lõi của bạn được lưu trữ và có tất cả các dự án tham chiếu nó giữ mọi thứ KHÔ.

Tất cả thư mục này xáo trộn yêu cầu bạn định tuyến lại một vài điều. May mắn thay, CodeIgniter làm cho nó dễ dàng - tất cả các thay đổi có thể được thực hiện trong các tập tin index.php.

mở index.php và định tuyến lại một vài điều:

Thay đổi: $system_path = 'system';

Để: $system_path = '../../CISYSTEM/210';

Thay đổi: $application_folder = 'application';

Để: $application_folder = '../../projekt_application';


Ngoài ra, tôi thấy rất nhiều người nói về việc sử dụng site_url() trong các câu trả lời khác. Tôi khuyên bạn nên một cách ít tiết của việc sử dụng site_url() ... bạn không cần phải gọi nó là mỗi lần nếu bạn tận dụng yếu tố <base> HTML của:

<base href="<?= site_url();?>">

Chỉ cần bao gồm trong ứng dụng của bạn và bạn có thể <head> gọi các bộ điều khiển của bạn trực tiếp ... như trong:

<a href='controllername/functionname'>Some Action</a>

Cheers

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