2012-01-19 44 views
1

我與KSmarty學習的Kohana 3.2.0在一起的Kohana 3.我想在網頁這樣寫上一個錨:PHP。在Smarty模板中寫一個錨點。 (Kohana的3 + KSmarty)

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

我可以生成URL中控制器並將其作爲變量傳遞給Smarty,但是。有什麼方法可以在Smarty模板(包括「http://www.mysite.cz」部分)中構建錨點或URL的

如果無法構建錨點。 至少可以建立完整的URL嗎?

原因:我有一個包含另一個模板的主模板。 主模板將由多個控制器使用,我想避免在每個控制器中構建URL。因此,如果KSmarty能夠爲我做到這一點,我會很高興。

+0

不幸的是,我不能回答你的問題,因爲我以前沒有使用KSmarty,我只是覺得我會推薦一個不同的Smarty模塊,因爲KSmarty似乎最後在2009年更新過。我將推薦:https:/ /github.com/MrAnchovy/Kohana_Smarty3 –

+0

謝謝Davgothic,我不知道這個模塊。我一定會嘗試。 – Vojtech

回答

2

我發現的唯一解決方案是編寫自定義函數。下面的代碼保存到Smarty的插件目錄function.url.php文件:

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'); 
    } 
} 

在Smarty的模板使用的例子:

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

在哪些變量設定的第一階梯,我不得不寫,否則的Smarty正在產生通知「未定義變量...」。我只是PHP的學生,對代碼改進的建議值得歡迎。

希望它能幫助別人。