Path to assets folder on CodeIgniter - php

I'm coding something into CodeIgniter and I want to apply a css template. I found one I like and download it.
After merging the css code with the code I have before the merging, I found that the images used by the css template doesn't load. Originally they should stay on root of html folder (or www, or public_html, you know what I mean...), but I put them under an assets folder which is on same level as system folder.
Something like this...
Website Folder
|
|---application\
|-----(CodeIgniter application folders...)
|---assets\
|-----style.css
|-----css\
|-------mini.css
|-----images\
|-----js\
|-----robots.txt
|---system
|-----(CodeIgniter system folder...)
|index.php
I googled for a couple of hours and I found this post (post #5). I try what the OP says but it doesn't work.
I can autoload the url_helper adding
$autoload['helper'] = array('url');
to the autoload.php file. But when I add
<base href="<?php echo base_url() ?>"/>
the images are still absent.
The original html file has this line
<link href="style.css" type="text/css" rel="stylesheet" />
so, I'm guessing that I should add assets/ so it looks
<link href="assets/style.css" type="text/css" rel="stylesheet" />
but still the images are missing.
If I move the contents of assets folder to root, everything is fine, but of course, that's not a good practice AFAIK...
My base_url is
http://localhost/prog/nonsense/mvc/
Before you ask, yes, I did read the .htacces solutions, but I really don't want to mess with .htaccess editing for now.
A little help here could be appreciated.

have you check .htaccess ?
It must have something like:
RewriteCond $1 !^(index\.php|assets|upload|robots\.txt|.*\.css)

I have the same thing as you, and I call them like this:
<link href="<?=base_url('assets/style.css');?>" rel="stylesheet">
This works for me if the base_url() is set and the url helper is called.
I call the base_url() and then the assets folder then style.css. There's no need for a / after base_url();?> because there's one in the base_url() anyway.
Another option using codeigniter's built in HTML function:
Also, if you look at this link, you'll see you can use the HTML helper and call it via codeigniter's built in functions.
This time, you shouldn't need base_url();
do:
$autoload['helper'] = array('url', 'html');
then in the view for header add this:
<?=link_tag('assets/style.css');?>
It will output to this:
<link href="http://localhost/prog/nonsense/mvc/assets/style.css" rel="stylesheet" type="text/css" />

base_url could also be used as link_tag:
<link href="<?php echo base_url('assets/style.css'); ?>" rel="stylesheet" type="text/css" />
would work too and keep your code cleaner.

yes! I just added the following line in .htacces file it working fine
RewriteCond $1 !^(index\.php|images|robots\.txt)

I just add one line in .htacces side of application folder
RewriteCond $1 !^(index\.php|images|robots\.txt)

Related

CSS not loading with codeigniter

IM trying to load some css directly within my view file, but its not working.
in my view file I have this.
<link href="<?php echo base_url(); ?>assets/css/core.css" rel="stylesheet" type="text/css" />
The assets folder is at the same level as Application
when I view source on the webpage it shows me this
demo.example.com/assets/css/core.css
but when i click the link to see if it's working the url becomes this...
http://demo.example.com/admin/demo.example.com/assets/css/core.css
not sure what I am doing wrong? Should I be adding something to my htaccess file?
Thanks in advance.
You don't need to include the base_url() in your path because the webserver already knows your at www.example.com/admin and auto includes that.
Just use
<link href="/assets/css/core.css" rel="stylesheet" type="text/css" />
Edit: Or actually you need to include the http: prefix on your base_url like wolfgang1983 said.
See this answer on CSS absolute and relative link paths. https://stackoverflow.com/a/17621358/3585500

Subfolder don't load the style.css

I have a .htaccess file that redirects all the URL request to my index.php
AcceptPathInfo On
RewriteEngine on
RewriteBase /Projects/tester/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?request=$1 [L,QSA]
Inside my index.php I have a code that include the URL file:
<?php
if(isset($_GET['request'])){
include('pages/'.$_GET['request'].'.php');
}else{
echo 'index';
}
?>
If my URL is localhost/Projects/tester/green my index will include a file called green.php that exists inside the folder pages.
inside pages/green.php I have this code:
<link rel="stylesheet" type="text/css" href="style.css">
<div id="greenBox">
This box is green!
</div>
When I run that URL I can see a large green div with an text inside.
Great, now lets create a folder called subs inside the folder pages and create a file called yellow.php
<link rel="stylesheet" type="text/css" href="style.css">
<div id="yellowBox">
This box is yellow!
</div>
When I run this URL localhost/Projects/tester/sub/yellow I can see the text but the style.css don't load (I can't see the yellow div).
If all the content is being included in the index.php and style.css file is in the same folder as the index.php, why green.php can load the style.css but the yellow.php not?
I can see the yellow div only if I add ../style.css inside the yellow.php, but if it is to work on this way, I believe we should use ../style.css on green.php while in yellow.php use ../../style.css, no?
Is there a way to solve this? is problem in .htaccess?
Of course the external browser doesn't understand where your files are located on the server, so if you are in the following situation (from the browser's perspective):
http://localhost/Projects/tester/green
-> hey browser, load "style.css"
-> browser loads http://localhost/Projects/tester/style.css
But if you change the "virtual" path:
http://localhost/Projects/tester/sub/yellow
-> hey browser, load "style.css"
-> browser loads http://localhost/Projects/tester/sub/style.css
So you have three solutions here, in order of my personal preference:
1) Use absolute URLs for loading css data, optionally using a PHP var:
<link rel="stylesheet" type="text/css" href="/Projects/tester/style.css">
<link rel="stylesheet" type="text/css" href="<?php echo $base_path; ?>/style.css">
2) Use the <base> html element in head: (warning: it applies to ALL relative urls in the page: links, images, etc.)
<head>
<base href="http://localhost/Projects/tester/" />
</head>
3) If using absolute URLs is not an option, you can calculate how many "virtual subdirectories" you are down and generate a prefix like this:
<?php
// first calculate $virtal_subdirs_number
$relative_urls = str_repeat("../", $virtual_subdirs_number);
?>
<link rel="stylesheet" type="text/css" href="<?php echo $relative_urls; ?>/style.css">
Its because the style.css is in parent directory of yellow.php, So for accessing a file in parent directory you must have to give path like ../style.css which mean look for it in one directory back and /style.css mean in the current directory which contain yellow.php

url rewrite not working on multiple and dynamic values

This is the .htaccess:
RewriteEngine on
RewriteRule ^contactus\/?/?$ index.php?goto=contactus
RewriteRule ^home\/?/?$ index.php?goto=home
RewriteRule ^event\/?/?$ index.php?goto=event
RewriteRule ^album\/?/?([a-z0-9-]+)\/?/?$ index.php?goto=home&albumid=$1
The problem is on last RewriteRule, first three are working as they are supposed to. Problem is in last one, when i open URL like http://localhost/album/56c9eb6b1fe75,it doesn't work properly. But when i try this: http://localhost/index.php?goto=home&albumid=123then this works good
PS:
By doesn't work properly I mean: , and.
Check the address bars in both images to understand the problem. In first one i think the bootstrap and other css files are not loaded.
With your update I believe the issue is that you are using relative paths on your page. This makes your CSS, JS, and all other resources (images) load from the current path /album/. You should add a leading / to your paths so they load from the root of your server.
A call to the stylesheet
<link rel="stylesheet" type="text/css" href="style.css">
will load as
example.com/admin/style.css
if you make it
<link rel="stylesheet" type="text/css" href="/style.css">
it knows to go to the root of your domain.
example.com/style.css
I'd say this is what you need:
RewriteRule ^album/([a-z0-9-]+)/?$ index.php?goto=home&albumid=$1

How to load css in codeigniter

I am new to codeigniter, and I am using v.2.12. I am getting an error when I try to load the css from the external file.
I create the css folder inside the application folder. And I create the css file in the name of all.css.
In the view file I use the following code to link the css file.
<link rel="stylesheet" type="text/css" href="<? echo base_url();?>css/all.css">
But the css file is not loading. I'm getting 404 error. Here is my configuration settings:
$config['base_url'] = 'http://webscarlets.com/ci/index.php';
$config['index_page'] = 'index.php';
Website Link: http://webscarlets.com/ci/index.php/welcome.
This is how you include CSS files in CodeIgniter:
<?php echo link_tag('css/mystyles.css'); ?>
That snippet will output this HTML:
<link href="http://site.com/css/mystyles.css" rel="stylesheet" type="text/css" />
The function link_tag is in the HTML helper, which must first be loaded.
(Note that you probably shouldn't put your CSS files in /application/css. It's just easier to put them in /css or maybe /assets/css.)
The function base_url() should return the base path (without index.php)
You may fix it by adding a backslash like:
<link rel="stylesheet" type="text/css" href="<? echo base_url();?>/css/all.css">
or remove the index.php from your config:
$config['base_url'] = 'http://webscarlets.com/ci/';
I just find the solution to avoid index.php file and load ours CSS files.
Just copy the code below in a .htaccess file:
Options +FollowSymLinks
Options -Indexes
DirectoryIndex index.php
RewriteEngine on
RewriteCond $1 !^(index\.php|images|styles|scripts|robots\.txt|favicon\.ico)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L,QSA]
Greeting!
To attach a CSS, JS, Images .etc you just have to do is go to your config folder and write at the end of the constant.php file.
define('URL','ADD YOUR LOCAL/REMOTE PATH');
define('CSS',URL.'public/css/');
define('IMAGES',URL.'public/images/');
define('JS',URL.'public/images/');
After that goto your view and in the link just add
<link rel="stylesheet" type="text/css" href="<?php echo CSS; ?>index.css">
this will solve your problem.
Hope it helps.
Add below line in your controller action /application/controllers/yourController.php
$this->load->helper('url');
Then add below line to your view file's head tag.
<link rel="stylesheet" type="text/css" href="<? echo base_url('assets/css/yourcssfile.css');?>" />
Assuming that you have assets/css/ folder is created in your app directory.
<path to your app folder>/assets/css
before using the base_url() you should have to load the URL helper class.
something like $this->load->helper('url'); in your controller
base_url() return you the path something like
'http://webscarlets.com/'
if you have set it directly in the root or 'http://webscarlets.com/dir/'
and also make sure about the location of your CSS file.
follow the link to know more about URL Helper
another way would be
define a constant in constants.php (in config directory)
define("LAYOUT_URL","http://localhost/yoursite/css/");
"css" folder here i m assuming is inside application folder. NOw you can attach css in page like
<link rel="stylesheet" type="text/css" href="<?php echo LAYOUT_URL;?>all.css">
As Jogesh_p.
you use base_url as follow
put in controller (your controller)
$this->load->helper('url');
in controller .
if you want to use
as follow
put in where you want use base_url.
echo base_url()
NOTE: better you create new folder at root
(Example: theme)
same: application, system, user_guide, theme)
i hope can you do
Edit autoload.php as follows
$autoload['helper'] = array('url');
Then load css , js,image like that
img src="<?php echo base_url(); ?>assets/images/master.jpg"</img>
//config.php
$config['base_url'] = 'http://webscarlets.com/ci/';
$config['index_page'] = 'index.php';
and try to load css by adding application folder
<link rel="stylesheet" type="text/css" href="<? echo base_url();?>application /css/all.css">
EDIT
Here
base_url() echos 'http://webscarlets.com/ci/' then adding the file with path application /css/all.css
Include $this->load->helper('html'); in a controller function.
And use linktag key word in view file something like this:
<html>
<head>
<title></title>
<?php echo link_tag('resources/style.css');?>
</head>
<body>
<?php
....
?>
</body>
Here the resources is the folder that contain the style.css file.

Calling a file with PHP keeping local URLs of called file

i have two files:
1.- root/folder/folder/themes/themeindex.php
and
2.- root/index.php
I want to include themeindex.php in index.php so when you enter to root directory, it will load the theme without taking you to (or showing you) the root/folder/folder/themes/ path.
I'm struggling to find or figure out a way to include the themeindex.php file but keeping the URLs local to its themes folder.
Meaning my
<link rel="stylesheet" type="text/css" href="style.css" />
will remain as that and I won't have to turn it into:
<link rel="stylesheet" type="text/css" href="/folder/folder/themes/style.css" />
I hope this all makes sense.
EDIT:
Hopefuly this explanation of my reasons helps a bit more...
1.- I want the final developer to be able to create themes as intuitively
as possible. So, the URLs remain as simple and intuitive as possible.
2.- I need to include the active theme into the root
directory, so it autoloads when the root is opened.
So if you combne, my reason number one, with my reason number two, then you
might understand how important it is for URLs to remain local and easy to
understand.
Instead of style.css you could request style.php, a file you define that uses imports root/folder/folder/themes/style.css and echoes it outright.
you can give a base tag in your code and point it to: the folder where you have the css files.
http://www.w3schools.com/tags/tag_base.asp
In root .htaccess file, add next lines:
RewriteEngine On
RewriteRule ^style.css$ /folder/folder/themes/style.css [L]
To include the theme file is simple:
include('root/folder/folder/themes/themeindex.php');
The other issue is specific to HTML. HTML needs to have the web path (not the absolute path) to the file so it can load it and use it.
The best you can probably do is something like:
<link
rel="stylesheet"
type="text/css"
href="<?php echo $theme_dir; ?>style.css"
/>
but that will still expose your theme directory. Why are you trying to hide that directory?
Response to comment:
If you take the code I have above and let your developer know how to structure their own content directory. All you would need to do it keep track of something like $active_theme_root and echo that out to load their own customized theme. As far as I know, you cannot set an HTML include directory, so HTML will need to know the web path to all needed assets
Best solution may be to have them use a global stylesheets folder for all themes ("root/stylesheets"). They would then link to this global folder in a relative manor:
<link rel="stylesheet" type="text/css" href="stylesheets/mytheme/style.css" />

Categories