Adding JavaScript and CSS (Cascading Style Sheet) file in CodeIgniter is very simple. You have to create JS and CSS folder in root directory and copy all the . js files in JS folder and . css files in CSS folder as shown in the figure.
I have a setup like this:
I then have a helper function that simply returns the full path to this depending on my setup, something similar to:
application/helpers/utility_helper.php:
function asset_url(){
return base_url().'assets/';
}
I will usually keep common routines similar to this in the same file and autoload it with codeigniter's autoload configuration.
Note: autoload URL helper for
base_url()
access.
application/config/autoload.php:
$autoload['helper'] = array('url','utility');
You will then have access to asset_url()
throughout your code.
No, inside the views folder is not good.
Look: You must have 3 basic folders on your project:
system // This is CI framework there are not much reasons to touch this files
application //this is where your logic goes, the files that makes the application,
public // this must be your documentroot
For security reasons its better to keep your framework and the application outside your documentroot,(public_html, htdocs, public, www... etc)
Inside your public folder, you should put your public info, what the browsers can see, its common to find the folders: images, js, css; so your structure will be:
|- system/
|- application/
|---- models/
|---- views/
|---- controllers/
|- public/
|---- images/
|---- js/
|---- css/
|---- index.php
|---- .htaccess
This is how I handle the public assets. Here I use Phalcon PHP's Bootstrap method.
|-.htaccess*
|-application/
|-public/
|-.htaccess**
|-index.php***
|-css/
|-js/
|-img/
|-font/
|-upload/
|-system
.htaccess*
All requests to the project will be rewritten to the public/ directory making it the document root. This step ensures that the internal project folders remain hidden from public viewing and thus eliminates security threats of this kind. - Phalconphp Doc
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^$ public/ [L]
RewriteRule (.*) public/$1 [L]
</IfModule>
.htaccess**
Rules will check if the requested file exists and, if it does, it doesn’t have to be rewritten by the web server module. - Phalconphp Doc
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,L]
</IfModule>
index.php***
Modify the application
path and the system
path as,
$system_path = '../system';
$application_folder = '../application';
Now you use the public
folder as base_url()."public/[YOUR ASSET FOLDER]"
Hope this helps :)
I usually put all my files like that into an "assets" folder in the application root, and then I make sure to use an Asset_Helper to point to those files for me. This is what CodeIgniter suggests.
No one says that you need to modify the .htacces and add the directory in the rewrite condition. I've created a directory "public" in the root directory alongside with "system", "application", "index.php". and edited the .htaccess file like this:
RewriteCond $1 !^(index\.php|public|robots\.txt)
Now you have to just call <?php echo base_url()."/public/yourdirectory/yuorfile";?>
You can add subdirectory inside "public" dir as you like.
Regardless of where you put the CSS file you can simply use the CodeIgniter "html" helper called link_tag(). You would apply this helper something like this:
echo link_tag('folder/subfolder/stylesheet.css');
It is up to you to locate the CSS file in the most appropriate place (in your opinion). You would have to either autoload the "html" helper or separately load it in to use it.
People keep suggesting the usage of base_url() to achieve this but it is actually not really the "CodeIgniter" way to do it (I think this question has a few duplicates). That will work but one of the reasons for using a framework is to use the pre-made functions within it.
There are many helpers in codeigniter to do this kind of thing.
add one folder any name e.g public and add .htaccess file and write allow from all it means, in this folder your all files and all folder will not give error Access forbidden! use it like this
<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>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With