Skip to content

Smarty plugin URL Helper

Derek Jones edited this page Jul 4, 2012 · 8 revisions

I'm using Smarty as a template library for CodeIgniter, and when I wanted to use CodeIgniter features I searched plugins, but I couldn't find a plugin which was usable for me, so I decided to write my own.

Now I finished it (took me 1 hour, horrible : D) and I'm here to post it to you.

So here is the code:

[h2]Files[/h2] [h4]functions.url.php[/h4]

<?php
/**
 * Smarty plugin
 */

/**
 * Smarty {url} function plugin
 *
 * Type:     function
 * Name:     url
 * @author:  Trimo
 * @mail:     trimo.1992[at]gmail[dot]com
 */

function smarty_function_url($params,&$smarty)
{
    if (!function_exists('current_url')) {
        if (!function_exists('get_instance')) {
            $smarty->trigger_error("url: Cannot load CodeIgniter");
            return;
        }
        $CI = &get;_instance();
        $CI->load->helper('url');
    }
    
    if ($params['type'] == 'string')
      return uri_string();
    elseif ($params['type'] == 'anchor' && isset($params['url']))
      return anchor($params['url'],$params['text'],$params['attr']);
    elseif ($params['type'] == 'safemail' && isset($params['url']))
      return safe_mailto($params['url'],$params['text'],$params['attr']);
    elseif ($params['type'] == 'mail' && isset($params['url']))
      return mailto($params['url'],$params['text'],$params['attr']);
    elseif ($params['type'] == 'autolink' && isset($params['url']))
      return auto_link($params['url'],(isset($params['mode']))?$params['mode']:'both',($params['new'] == 1)?TRUE:FALSE);
    elseif ($params['type'] == 'urltitle' && isset($params['title']))
      return url_title($params['title'],(isset($params['mode']))?$params['mode']:'dash',($params['lower'] == 1)?TRUE:FALSE);
    elseif ($params['type'] == 'prep' && isset($params['url']))
      return prep_url($params['url']);
    elseif ($params['type'] == 'current')
      return current_url();
    elseif ($params['type'] == 'site')
      return site_url($params['url']);
    else
      return base_url();
}
?>

[h2]Installion[/h2] You just need to create this file in smarty's plugin folder, then you're ready to use it.

[h2]Using[/h2] The plugin supports almost all of the functions that are in the URL helper.

[h3]base_url()[/h3]

{url}

This will return the base URL.

[h3]current_url()[/h3]

{url type="current"}

This will return the current URL.

[h3]site_url()[/h3]

{url type="site" url="forum/page/2"}

//Return
http://example.com/forum/page/2

This will return the site URL, and optionally you can pass the segments using [b]url[/b] parameter.

[h3]uri_string()[/h3]

{url type="string"}

This will return the URL segments.

[h3]prep_url()[/h3]

{url type="prep" url="example.com"}

//Return
http://example.com

This will return the URL with http:// if it's missing.

[h3]url_title()[/h3]

{url type="urltitle" title="What's wrong with CSS?" mode="dash" lower=0}

//Return
Whats-wrong-with-CSS

Create a human-friendly URL string. You can use [b]mode[/b] parameter to determine the word delimiter, it can be [i]dash[/i] or [i]underscore[/i], and you can also pass the [b]lower[/b] parameter to lowercase the string, it can be [i]1[/i] or [i]0[/i]. (If it's 1 then the string will be lowercase)

[h3]auto_link()[/h3]

{url type="autolink" url="http://example.com" mode="url" new=0}

//Return
<a href="http://example.com">http://example.com</a>

Converts URLs and e-mail addresses into links. You can use [b]mode[/b] parameter to determine if only emails or urls are converted, or both, it can be [i]email[/i] and [i]url[/i]. You can also pass the [b]new[/b] parameter which determines if the link is opened in a new window or not. (If it's one then the link will be shown in a new window)

[h3]anchor()[/h3]

{url type="anchor" url="http://example.com" text="Text of link" attr="title='Title'"}

//Return
<a href="http://example.com" title="Title">Text of link</a>

Creates a link. You can pass [b]text[/b] parameter to define the text of the link, and [b]attr[/b] parameter to define the attributes.

[h3]mail()[/h3]

{url type="mail" url="[email protected]" text="Text of link" attr="title='Title'"}

//Return
<a href="mailto:[email protected]" title="Title">Text of link</a>

Creates an email link. You can pass [b]text[/b] parameter to define the text of the link, and [b]attr[/b] parameter to define the attributes.

[h3]safe_mail()[/h3]

{url type="safemail" url="[email protected]" text="Text of link" attr="title='Title'"}

It works in the same way es mail, but it creates the link with JavaScript.

[h2]Good to know[/h2] If you want to know more about these functions then you can find the User Guide [url=http://codeigniter.com/user_guide/helpers/url_helper.html]here[/url].

If something is not clear, send me an email (or a PM), and I'll help.

PS: Sorry for my English.

Clone this wiki locally