1

Kohana 3.2.0 を KSmarty for Kohana 3 と一緒に学習しています。次のようにページにアンカーを書きたいと思います。

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

コントローラーで URL を作成し、それを変数として Smarty に渡すことができます。Smarty テンプレート(「http://www.mysite.cz」部分を含む)でアンカーまたは URLを作成する方法はありますか?

アンカーを構築できない場合。少なくとも完全な URL を構築することは可能ですか?

理由:別のテンプレートを含むメイン テンプレートがあります。 メイン テンプレートは複数のコントローラーで使用されるため、各コントローラーで URL を構築することは避けたいと考えています。ですので、KSmartyでやっていただけると嬉しいです。

4

1 に答える 1

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 の学生です。コードの改善に関する提案は大歓迎です。

それが他の人を助けることを願っています。

于 2012-01-22T08:18:36.000 に答える