Vojtech
Vojtech

Reputation: 2623

PHP. Write an anchor in the Smarty template. (Kohana 3 + KSmarty)

I'm learning Kohana 3.2.0 together with KSmarty for Kohana 3. I'd like to write an anchor on the page like this:

<a href="http://www.mysite.cz/page/list">Page list</a>

I can build the url in the controller and pass it to Smarty as a variable but. Is there a way to build the anchor or URL in Smarty template (including "http://www.mysite.cz" part)?

If it is not possible to build the anchor. Is it at least possible to build full URL?

The Reason: I have a main template which includes another template. The main template will be used by multiple controllers and I would like to avoid building the URL in each controller. Therefore I'll be happy if KSmarty will be able to do it for me.

Upvotes: 1

Views: 1157

Answers (1)

Vojtech
Vojtech

Reputation: 2623

The only solution I have found is to write custom function. Save following code into function.url.php file in Smarty plugins directory:

function smarty_function_url($params, &$smarty)
{
  $type = '';
  if(isset($params['type'])) $type = $params['type'];
  $protocol = 'http';
  if(isset($params['protocol'])) $protocol = $params['protocol'];
  $url = '';
  if(isset($params['url'])) $url = $params['url'];
  $text = '';
  if(isset($params['text'])) $text = $params['text'];

  switch($params['type'])
  {
    case 'url': 
      return Kohana_URL::site($url, $protocol);
    case 'anchor':
      $url = Kohana_URL::site($url, $protocol);    
      return "<a href='{$url}'>{$text}</a>";
    default: 
      return Kohana_URL::base('http');  
  }
}

Examples of use in Smarty template:

{url}
{url type='url' url='admin/categories' protocol='https'}
{url type='anchor' url='admin/articles' text='List of articles'}

The first block in which variables are set I had to write otherwise Smarty was generating notice "Undefined variable...". I'm just PHP student, suggestions for code improvement are welcome.

Hope it will help the others.

Upvotes: 2

Related Questions