Did you ever create drupal internal or external paths or links ? Which function you used ? First question answer is sure, of course, why not ? . Now come to second questions. You may say i did this by raw html code i.e used html anchor tag, and sometimes used drupals l() function. But I must say, always use drupal's l() function, otherwise you fall in great problems. You may want to know why used drupal l() function to link ? For getting answer, carefully read this tutorilas
Drupal l() function has several benefits
- To solve clearn url problems
- For security and safety
- Easier to read and use and well organized
- Assign active class to current url; its a great help for themeing..
- It is recommended by drupal. Drupal allways suggest "all internal links output by modules should be generated by this function if possible".
- Handles path alias for you ! Convert link to node/nid to Pathauto url !
To solve clean url problems
URLs without question marks, ampersands, or other strange characters are called Clean URLs. For example, http:example.com/foo/bar.
Suppose you want to migrate from another content management system or from static files, the URLs of the content need not change, and unchanging URIs are cool. This can be acheived by drupals l() function.
Suppose your site has url; http:example.com/foo/bar. But Your Web server is not configured to support clean URLs or your host is not configured yet. So when you visit this url; you will get a page not found error or your website redirects you to home page or unexpected errors
And finally, consider my php ini configuration link
<?php print l('PHP ini configuration','blog/php-ini-configuration', array('attributes'=>array('target'=>'_blank'))); ?>
If clearn URLs is enabled, the above link will be : 'www.webemania.com/blog/php-ini-configuration' and if not enabled link will be 'www.webemania.com/?q=blog/php-ini-configuration'
For security and safety
It Prevents XSS attacks. Cross-site scripting (XSS) is a common form of attack on a web site where the attacker is able to insert his or her own code into a web page, which can then be used for all sorts of mischief. Since l() function runs check_plain and check_urlfunction in the background without you having to touch it, so it is better for security.
Easier to read and use and well organized
The main benefit is that the code is more compact and easier to read than manually created html. For example
<?php
// example 1: front page
print l(t('Home'), '<front>');
// example 2: open front page in new window
print l(t('Home'), '<front>',array('attributes'=>array('target'=>'blank')));
?>
Assign active class to current url
For themers, who wants to add 'active class' for current URL just pass your link to l() function and you are done!
Read what drupal recommended
Drupal allways suggest "all internal links output by modules should be generated by this function if possible"
Handles path alias
Another greatest advantages of l() function is; it handles the aliased paths for you. if you pass "node/23" to a function it would form the the aliased url eg: blog/title-of-post. On top of that it creates the correct path to the page no matter how deep you are on the website.
Some Examples
Example 1: Link to front page
<?php
// example 1: front page
print l(t('Home'), '<front>');
// example 2: open front page in new window
print l(t('Home'), '<front>',array('attributes'=>array('target'=>'blank')));
?>
Example 2: Link to front page and open in new window
<?php
print l(t('Home'), '<front>',array('attributes'=>array('target'=>'blank')));
?>
example 3: how to use html
<?php
print l('<span class="front">Home</span>', '<front>',array('html' => TRUE));
?>
example 4: how to use image instead of text link
<?php
global $base_url;
$path = "$base_url/sites/default/files/ceo5.png";
print l('<img src="'.$path.'" alt="Webemania CEO Image" />', 'sites/default/files/ceo5.png', array('html' => TRUE));
?>
example 5: add class, ids etc
<?php
// add a new class to my php ini configuration path
print l( t('PHP ini configuration'), 'node/3', array('attributes' =>array('class'=>'php-ini-conf', 'id'=>'phpini-conf') ));
?>
example 6: adding query string to links
<?php
// adding query string on example:5
print l( t('PHP ini configuration'), 'node/33', array('attributes' =>array('class'=>'php-ini-conf', 'id'=>'phpini-conf'), 'query'=>array('id'=>'5','status'=>'ok') ));
?>
example 7: adding destination to query link
<?php
print l( t('edit'), 'node/'.$nid.'/edit', array('query' => drupal_get_destination() ));
?>
example 8: create a hash-only link (to #)
<?php
print l('linktext', '', array('fragment' => ' ', 'external' => TRUE));
?>
example 9 : specific portions of a page :use fragment attributes
<?php
l( t('PHP ini configuration'), 'node/33', array('attributes' =>array('class'=>'php-ini-conf', 'fragment' => "php-tag")));
?>