ฉันจะใส่ไฟล์รูปภาพ, css, js และอื่น ๆ ใน Codeigniter ได้ที่ไหน?


144

การใส่โฟลเดอร์ CSS และโฟลเดอร์ไฟล์ภาพอยู่ที่ไหน ฉันคิดอยู่ในโฟลเดอร์มุมมอง? อย่างไรก็ตามตัวควบคุมจะทำการเปลี่ยนเส้นทางไปยัง url ฐานเสมอดังนั้นฉันต้องระบุเส้นทางในไฟล์. html ไปยังตำแหน่งที่มันอยู่ซึ่งซ้ำซ้อน

คำตอบ:


202

ฉันมีการตั้งค่าเช่นนี้:

  • ใบสมัคร
  • ระบบ
  • สินทรัพย์
    • js
    • imgs
    • CSS

จากนั้นฉันมีฟังก์ชั่นตัวช่วยที่คืนค่าพา ธ แบบเต็มให้กับสิ่งนี้ขึ้นอยู่กับการตั้งค่าของฉันสิ่งที่คล้ายกับ:

แอพลิเคชัน / helpers / utility_helper.php:

function asset_url(){
   return base_url().'assets/';
}

ฉันมักจะเก็บกิจวัตรประจำวันคล้าย ๆ กันนี้ไว้ในไฟล์เดียวกันและโหลดอัตโนมัติด้วยการกำหนดค่า autoload ของ codeigniter

หมายเหตุ: ผู้ช่วย URL อัตโนมัติเพื่อbase_url()การเข้าถึง

application / config / autoload.php:

$autoload['helper'] = array('url','utility');

จากนั้นคุณจะสามารถเข้าถึงasset_url()รหัสของคุณได้ตลอด


1
สวัสดี eddie ฉันสงสัยว่าคุณใส่รหัสฟังก์ชั่นของคุณไว้ที่ไหน .. ฉันควรใส่ไว้ใน file_helper.php?
kebyang

3
สวัสดี @KebyangBlabla ฉันได้อัปเดตคำตอบของฉันพร้อมข้อมูลอีกเล็กน้อยที่จะช่วยคุณ
Eddie

10
ในการเข้าถึง 'baseurl ()' คุณจะต้องรวมผู้ช่วย 'url' เช่นนี้ด้วย:$autoload['helper'] = array('url', 'utility');
Jeffrey

หนึ่งที่ดีกว่าอาจจะมีโฟลเดอร์ทรัพย์สินของคุณในโฟลเดอร์เว็บรูท (ของฉันคือ public_html) จากนั้น CI ในไดเรกทอรีด้านบนรูทเว็บ
Nate Nolting

3
ในกรณีที่คนอื่นเป็นเหมือนฉันในการชี้แจงคุณเข้าถึงได้เช่นนี้ <? = asset_url ();?> css / css.css
JonYork

50

ไม่ภายในโฟลเดอร์มุมมองไม่ดี

ดู: คุณต้องมี 3 โฟลเดอร์พื้นฐานในโครงการของคุณ:

ระบบ // นี่คือกรอบงาน CI มีเหตุผลไม่มากที่จะสัมผัสไฟล์นี้

แอปพลิเค // นี่คือที่ตรรกะของคุณไปไฟล์ที่ทำให้แอพลิเคชัน ,

สาธารณะ // นี่จะต้องเป็นเอกสารของคุณ

เพื่อเหตุผลด้านความปลอดภัยจะดีกว่าที่จะเก็บเฟรมเวิร์กและแอปพลิเคชันของคุณไว้ด้านนอกเอกสาร (public_html, htdocs, สาธารณะ, www ... ฯลฯ )

ภายในโฟลเดอร์สาธารณะของคุณคุณควรใส่ข้อมูลสาธารณะของคุณเบราว์เซอร์ที่สามารถมองเห็นได้สิ่งที่พบได้ทั่วไปคือรูปภาพ: js, css; ดังนั้นโครงสร้างของคุณจะเป็น:

|- system/
|- application/
|---- models/
|---- views/
|---- controllers/
|- public/
|---- images/
|---- js/
|---- css/
|---- index.php
|---- .htaccess

1
index.php ในโฟลเดอร์สาธารณะคืออะไร ไฟล์ 404 นั้นคืออะไร? ขอบคุณ
เดลี

ขออภัยในความล่าช้า แต่สำหรับ lo: T ไฟล์ index.php จะเป็นไฟล์ที่จะตรวจจับการร้องขอและจะเรียกส่วนที่เหลือของกรอบ
Juan Jo

@Juan Jo .. ฉันใช้ CodeIgniter-3.0.6 ฉันไม่พบโฟลเดอร์ใด ๆ ที่ชื่อpublicมีปัญหาในการเพิ่มโฟลเดอร์ที่มีชื่อเดียวกัน
Akhil Vijay

@AkhilVijay คุณจะไม่พบมันในโฟลเดอร์ Codeigniter ของคุณโฟลเดอร์จะเป็นเมื่อคุณปรับใช้ในเซิร์ฟเวอร์ใด ๆ
Anwar Hossain

วิธีที่ดีที่สุดในการทำงานกับ codeigniter ทำให้การ.htaccessลบ/index.php?และเรียกโฟลเดอร์สาธารณะด้วยbase_url().'public/yourfolder';
Robert Blasco Villarroya

16

นี่คือวิธีที่ฉันจัดการสินทรัพย์สาธารณะ ที่นี่ฉันใช้วิธี Bootstrap ของPhalcon PHP

โครงสร้างโฟลเดอร์

|-.htaccess*
|-application/
|-public/
  |-.htaccess**
  |-index.php***
  |-css/
  |-js/
  |-img/
  |-font/
  |-upload/
|-system

ไฟล์ที่จะแก้ไข

  1. .htaccess*

    คำร้องขอทั้งหมดของโครงการจะถูกเขียนใหม่ไปยังพับลิก /ไดเร็กทอรีซึ่งทำให้เป็นรูทเอกสาร ขั้นตอนนี้ทำให้มั่นใจได้ว่าโฟลเดอร์โครงการภายในยังคงซ่อนอยู่จากการดูสาธารณะและช่วยกำจัดภัยคุกคามความปลอดภัยประเภทนี้ - Phalconphp Doc

    <IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteRule  ^$ public/    [L]
        RewriteRule  (.*) public/$1 [L]
    </IfModule>
  2. .htaccess**

    กฎจะตรวจสอบว่ามีไฟล์ที่ร้องขออยู่หรือไม่และหากเป็นเช่นนั้นก็ไม่จำเป็นต้องเขียนใหม่โดยโมดูลเว็บเซิร์ฟเวอร์ - Phalconphp Doc

    <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule ^(.*)$ index.php/$1 [QSA,L]
    </IfModule>
  3. index.php***

    ปรับเปลี่ยนapplicationเส้นทางและsystemเส้นทางเป็น

    $system_path = '../system';
    $application_folder = '../application';

ตอนนี้คุณใช้ publicโฟลเดอร์เป็นbase_url()."public/[YOUR ASSET FOLDER]"

หวังว่าจะช่วย :)


คุณทดสอบรหัสข้างต้นฉันคิดว่ามีข้อผิดพลาดในบรรทัดสุดท้ายคุณเปลี่ยนเส้นทางคำขอทั้งหมดไป/publicทำไมbase_url ()."public/[...! base_url ()."/[YOUR ASSET FOLDER]"มันควรจะเป็นเพียงแค่
Kerkouch

12

ฉันมักจะใส่ไฟล์ทั้งหมดของฉันลงในโฟลเดอร์ " asset " ในรูทแอปพลิเคชันจากนั้นตรวจสอบให้แน่ใจว่าได้ใช้Asset_Helperเพื่อชี้ไปที่ไฟล์เหล่านั้นสำหรับฉัน นี่คือสิ่งที่ CodeIgniter แนะนำ


7

ไม่มีใครบอกว่าคุณต้องแก้ไข. htacces และเพิ่มไดเรกทอรีในสภาพที่เขียนซ้ำ ฉันได้สร้างไดเรกทอรี "สาธารณะ" ในไดเรกทอรีรากพร้อมกับ "system", "application", "index.php" และแก้ไขไฟล์. htaccess เช่นนี้:

RewriteCond $1 !^(index\.php|public|robots\.txt)

ตอนนี้คุณต้องโทรหา<?php echo base_url()."/public/yourdirectory/yuorfile";?> คุณสามารถเพิ่มไดเรกทอรีย่อยใน "สาธารณะ" dir ตามที่คุณต้องการ


ฉันปลายปี แต่ถ้าใครอ่านนี่คำตอบนี้เป็นทางออกแรกของฉัน แต่ถ้าคุณจัดการการเข้าถึงผ่านโฮสต์เสมือนฉันคิดว่าเป็นความคิดที่ดีกว่าที่จะชี้โฮสต์เสมือนไปยังโฟลเดอร์สาธารณะและเก็บไว้ การกำหนดค่า. htaccess โหวตแล้วเพราะคำตอบนี้ชี้ให้ฉันเห็นทางออก
Vertig0

5

ไม่ว่าคุณจะวางไฟล์ CSS ไว้ที่ใดคุณสามารถใช้ผู้ช่วย CodeIgniter "html" ที่เรียกว่า link_tag () คุณจะใช้ตัวช่วยนี้สิ่งนี้:

echo link_tag('folder/subfolder/stylesheet.css');

มันขึ้นอยู่กับคุณที่จะหาไฟล์ CSS ในที่ที่เหมาะสมที่สุด (ตามความเห็นของคุณ) คุณจะต้องใช้ตัวช่วยอัตโนมัติ "html" หรือโหลดแยกต่างหากเพื่อใช้งาน

ผู้คนต่างก็แนะนำให้ใช้ base_url () เพื่อให้ได้สิ่งนี้ แต่จริงๆแล้วมันไม่ใช่วิธีที่ "CodeIgniter" ทำจริงๆ (ฉันคิดว่าคำถามนี้มีซ้ำกันสองสามข้อ) นั่นจะใช้งานได้ แต่หนึ่งในเหตุผลในการใช้เฟรมเวิร์กคือการใช้ฟังก์ชันที่สร้างไว้ล่วงหน้าภายใน

มีผู้ช่วยหลายคนใน codeigniter ทำสิ่งนี้


4

เพิ่มหนึ่งโฟลเดอร์ชื่อใด ๆ เช่นสาธารณะและเพิ่มไฟล์. htaccessและเขียนอนุญาตจากทั้งหมดหมายความว่าในโฟลเดอร์นี้ไฟล์ทั้งหมดของคุณและโฟลเดอร์ทั้งหมดจะไม่ให้ข้อผิดพลาดการเข้าถึงห้าม! ใช้มันแบบนี้

<link href="<?php echo base_url(); ?>application/public/css/style.css" rel="stylesheet" type="text/css"  />
<script type="text/javascript" src="<?php echo base_url(); ?>application/public/js/javascript.js"></script>

4

ฉันใช้ CodeIgniter เวอร์ชันล่าสุด 3.1.0 โครงสร้างโฟลเดอร์ของมันคือ:

  • ระบบ
  • ใบสมัคร
  • คู่มือผู้ใช้
  • สินทรัพย์
    • ภาพ
    • js
    • CSS

นั่นคือที่ที่คุณควรวางไฟล์รูปภาพ, css และ js ไว้ในโฟลเดอร์ asset



2

(ฉันใหม่สำหรับ Codeigniter ดังนั้นฉันไม่รู้ว่านี่เป็นคำแนะนำที่ดีที่สุดหรือไม่)

ฉันเก็บไฟล์ที่มีสาธารณะในโฟลเดอร์สาธารณะของฉัน มันมีเหตุผลสำหรับพวกเขาที่จะอยู่ที่นั่นและฉันไม่ต้องการใช้ Codeigniter สำหรับสิ่งที่ฉันไม่จำเป็นต้องใช้

ต้นไม้ไดเรกทอรีมีลักษณะเช่นนี้:

  • / application /
  • / / ประชาชน
  • / ประชาชน css / /
  • / ประชาชน / img /
  • / ประชาชน / js /
  • /ระบบ/

ไฟล์เดียวที่ฉันเก็บไว้ใน / public / เป็น index.iter ของ Codeigniter และไฟล์. htaccess ของฉัน:

RewriteEngine On
RewriteBase /

RewriteRule ^css/ - [L]
RewriteRule ^img/ - [L]
RewriteRule ^js/ - [L]

RewriteRule ^index.php(.*)$ - [L]
RewriteRule ^(.*)$ /index.php?/$1 [L]

2

คุณสามารถวางโฟลเดอร์ css ไว้ในโฟลเดอร์ assest (คุณตั้งชื่อมันว่าชื่อใดก็ได้) ในไดเรกทอรีของโครงการของคุณเป็น:

- ci_app
- application 
- views      
- assets 
  - css 
    - style.css 

... เมื่อคุณต้องการโหลดไฟล์ในหน้าคุณสามารถใช้ base_url () ฟังก์ชั่นด้วยวิธีนี้: <head> <link rel='stylesheet' href='<?php echo base_url();?>assets/css/style.css'> </head> และคุณแน่ใจว่าจะเพิ่ม base_url ของโครงการของคุณในไฟล์ config.php ดังนี้:

$config['base_url'] = 'http://localhost/ci_app';

0

สวัสดีโครงสร้างของเราก็เหมือนแอปพลิเคชันระบบ user_guide

สร้างสินทรัพย์ชื่อโฟลเดอร์ที่อยู่ใกล้กับโฟลเดอร์ทั้งหมดและจากนั้นภายในโฟลเดอร์สินทรัพย์นี้สร้าง css และ javascript และโฟลเดอร์ภาพใส่ CSS ทั้งหมดของคุณ js ภายในโฟลเดอร์

ตอนนี้ไปที่ header.php และเรียก css แบบนี้

<link rel="stylesheet" href="<?php echo base_url();?>assets/css/touchTouch.css">
  <link rel="stylesheet" href="<?php echo base_url();?>assets/css/style.css">
  <link rel="stylesheet" href="<?php echo base_url();?>assets/css/camera.css"> 

-2

link_tag()ผู้ช่วยที่เห็นได้ชัดว่าวิธีการที่จะทำเช่นนี้ ใส่ css ของคุณตามที่มันอยู่ใน site_root / css / จากนั้นใช้ผู้ช่วย:

จากเอกสาร CodeIgniter ...

echo link_tag('css/mystyles.css');

เอาท์พุต

<link href="http://example.com/css/mystyles.css" rel="stylesheet" type="text/css" />
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.