2010-10-01 37 views
16

Xin chào Tôi vừa bắt đầu làm việc với khung CodeIgniter. Cấu trúc thư mục hiện tại của tôi làCodeigniter: Cách bao gồm các tệp javascript

Demo(Project name) 
+System 
+Application 
    -Controllers 
     demo.php 
    +Model 
    -Views 
     view_demo.php 
-Js 
    ajax.js 
    jquery.js 

Vui lòng cho tôi biết cách bao gồm tệp .js trong view_demo.php.

Cảm ơn Raj

Trả lời

23

Bạn cần sử dụng base_url() để bao gồm tệp javascript trong VIEW của mình.

Vì vậy, trong file view_demo.php:

<script type="text/javascript" src="<?php echo base_url();?>js/jquery.js" ></script> 
<script type="text/javascript" src="<?php echo base_url();?>js/ajax.js" ></script> 

Bạn sẽ cần helper URL nạp. Để tải trình trợ giúp bạn cần phải đặt trên bộ điều khiển demo.php:

$this->load->helper('url'); 

Bạn cũng có thể tự động tải trên \ config \ autoload.php trên mảng trợ giúp.

Thông tin thêm về BASE_URL(): http://www.codeigniter.com/user_guide/helpers/url_helper.html#base_url

+0

Cảm ơn bạn Isern Palaus. Tôi đã thử điều này nhưng base_url() đang lặp lại "http://example.com/" và đưa ra lỗi không tìm thấy tệp cho các tệp .js đó. Bất kỳ đề xuất? – Raj

+0

Bạn có thể đăng bộ điều khiển và chế độ xem của mình không? Nếu base_url() hiển thị url của bạn ở bên phải. Bạn đã cấu hình URL BASE của bạn trên file config.php trên thư mục config, nó rất quan trọng! – ipalaus

+0

Cảm ơn bạn Isern. Trên thực tế tôi đã không đặt cấu hình ['base_url'] trong tập tin config.php vào url dự án của tôi. Tôi chỉ làm vậy. – Raj

15

Bạn sẽ không bao gồm các file JS trong PHP, họ sẽ được xuất ra như thẻ script trong HTML bạn sản xuất mà bạn có thể được sản xuất như đầu ra từ kịch bản PHP.

Theo như tôi biết, không có hàm CodeIginiter được tích hợp để bao gồm đầu ra này giống như cho CSS sử dụng hàm link_tag() do CI cung cấp. Tôi đã thêm một hàm có tên là script_tag() vào tệp system/helpers/html_helper.php từ CI. Chức năng là:

if (! function_exists('script_tag')) { 
    function script_tag($src = '', $language = 'javascript', $type = 'text/javascript', $index_page = FALSE) 
    { 
     $CI =& get_instance(); 
     $script = '<scr'.'ipt'; 
     if (is_array($src)) { 
      foreach ($src as $k=>$v) { 
       if ($k == 'src' AND strpos($v, '://') === FALSE) { 
        if ($index_page === TRUE) { 
         $script .= ' src="'.$CI->config->site_url($v).'"'; 
        } 
        else { 
         $script .= ' src="'.$CI->config->slash_item('base_url').$v.'"'; 
        } 
       } 
       else { 
        $script .= "$k=\"$v\""; 
       } 
      } 

      $script .= "></scr"."ipt>\n"; 
     } 
     else { 
      if (strpos($src, '://') !== FALSE) { 
       $script .= ' src="'.$src.'" '; 
      } 
      elseif ($index_page === TRUE) { 
       $script .= ' src="'.$CI->config->site_url($src).'" '; 
      } 
      else { 
       $script .= ' src="'.$CI->config->slash_item('base_url').$src.'" '; 
      } 

      $script .= 'language="'.$language.'" type="'.$type.'"'; 
      $script .= ' /></scr'.'ipt>'."\n"; 
     } 
     return $script; 
    } 
} 

Sau đó, trong mã PHP của bạn, bạn có thể làm:

echo script_tag('content/js/jquery-1.4.2.js'); 
+1

Tôi cũng có chức năng như vậy, http: //blog.ipalaus.es/codeigniter-html-helper-modificado-anade-javascript-facilmente, nó rất hữu ích! :) – ipalaus

+0

RC, cảm ơn vì điều này. Tôi thích giải pháp này .. ít công việc hơn. :) –

+0

@ipalaus: Cảm ơn bạn! Tôi đã sử dụng nó trong ứng dụng của tôi và nó hoạt động tuyệt vời! – Nirmal

0

Chỉ cần sử dụng các tiêu chuẩn:

<script src="/path/to/file.js" type="text/javascript" charset="utf-8"></script> 

bên trong tầm nhìn của bạn! (Không phải bên trong các thẻ PHP, tất nhiên.) Tôi không nghĩ rằng trình trợ giúp HTML CodeIgniter có bất kỳ chức năng nào mà bạn có thể sử dụng để thay thế cho việc tự viết HTML.

8

tôi lưu trữ javascript của tôi trong một thư mục con của thư mục quan điểm của tôi vì vậy các đường dẫn tập tin là liên quan đến quan điểm được gọi và tôi bỏ qua BASE_URL().

Một kỹ thuật khác mà tôi đã sử dụng là xác định một loạt các tập lệnh để bao gồm trong bộ điều khiển của tôi, sau đó lặp qua mảng trong chế độ xem của tôi để bao gồm chúng. Điều này cho phép tôi bao gồm các chức năng js đặc biệt chỉ khi cần thiết.

$data['scripts to load'] = array('edit.js','menu.js', 'contact.js'); 
$this->load->view('myview'); 

Sau đó, trong giao diện

<?php foreach($scripts_to_load as $script):?> 
      <script type='text/javascript' src = 'my_js/<?php echo $script;?>'> 
<?php endforeach;?> 

Nếu bạn có tập tin kịch bản mà có được nạp trên mỗi trang, bạn khó có thể mã hóa chúng theo quan điểm của chân bạn như được mô tả trong các câu trả lời khác.

+0

Tôi có phải định cấu hình bất kỳ điều gì trước khi thực hiện việc này không? – Raj

+0

Hãy nhớ rằng, CI chỉ là PHP. Chúng tôi không sử dụng bất kỳ chức năng CI nào ở đây ngoài việc tải chế độ xem. Nó giống như bao gồm các tệp js với các thẻ tập lệnh. Kỹ thuật mảng này chỉ cho phép tải các tệp javascript đặc biệt động hơn. Bằng cách đó bạn chỉ tải những gì bạn cần trên mỗi trang, giữ cho các yêu cầu http của bạn nhỏ hơn. – kevtrout

+0

Yêu thích giải pháp này. Tôi sẽ thực sự sử dụng nó cho một cái gì đó khác nhưng tuyệt vời của nó. Cảm ơn. – Amir

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