sorry I do not speak good English, use translator.
How can I create links in codeigniter?
What if I want to use permalinks after?
I would have to change the whole system code every time you make a change in permalinks?
Is there a library that manufactures the links from these arguments and behave as configured dynamically?
For example if I want to change the system directory from:
http://testing/webapp/index.php
to:
http://production/index.php
Do I need to change all the code?
What is the best practice for this?
You can use codeingiter's methods base_url() and site_url().
At first, you need to load the URL helper in your controller:
$this->load->helper('url');
See their definitions below (According to CI documentation, http://ellislab.com/codeigniter/user-guide/helpers/url_helper.html)
site_url()
Returns your site URL, as specified in your config file. The index.php
file (or whatever you have set as your site index_page in your config
file) will be added to the URL, as will any URI segments you pass to
the function, and the url_suffix as set in your config file.
You are encouraged to use this function any time you need to generate
a local URL so that your pages become more portable in the event your
URL changes.
Segments can be optionally passed to the function as a string or an
array. Here is a string example:
echo site_url("news/local/123"); The above example would return
something like:
http://example.com/index.php/news/local/123
Here is an example of segments passed as an array:
$segments = array('news', 'local', '123');
echo site_url($segments);
base_url()
Returns your site base URL, as specified in your config file. Example:
echo base_url();
This function returns the same thing as site_url, without the
index_page or url_suffix being appended.
Also like site_url, you can supply segments as a string or an array.
Here is a string example:
echo base_url("blog/post/123");
The above example would return something like:
http://example.com/blog/post/123
This is useful because unlike site_url(), you can supply a string to a
file, such as an image or stylesheet. For example:
echo base_url("/_user_guide_src_ci/images/icons/edit.png");
This would give you something like:
http://example.com/images/icons/edit.png
This is precisely what the Base URL is for in the config file. The only thing you need to worry about after that are your relative URL's, you can even set up different environments by making new folders inside of the config folder
for example if I set in my config.php directly inside of the config folder
$config['base_url'] = 'http://localhost/hello';
Then the base url is always http:// localhost/hello now let's say I have my home development environment and a production environment. If I copy the config.php to a folder inside config called production so application/config/production/config.php set the base URL to:
$config['base_url'] = 'http://www.example.com/hello';
Then in my index.php I set:
define('ENVIRONMENT', 'production');
Everywhere I need the environment to change Codeigniter will change it for me. So on the live site I use the production environment, at home I change that environment to development and CI does the work for me.
Then in your code use the base_url() to make your links.
For example:
<a href="<?=base_url();?>hello_world">Hello World</a>
Will produce:
//at home:
http://localhost/hello_world
//in production:
http://www.example.com/hello_world
Make sense?