PHP。在 Smarty 模板中编写一个锚点。 (小花 3 + KSmarty)

发布于 2024-12-27 20:31:10 字数 431 浏览 1 评论 0原文

我正在学习 Kohana 3.2.0 和 KSmarty for Kohana 3。我想在页面上编写一个锚点,如下所示:

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

我可以在控制器中构建 url 并将其作为变量传递给 Smarty,但是。有没有办法在Smarty模板中构建锚点或URL(包括“http://www.mysite.cz”部分)?

如果无法建立锚点。 至少可以构建完整的 URL 吗?

原因: 我有一个主模板,其中包含另一个模板。 主模板将由多个控制器使用,我希望避免在每个控制器中构建 URL。因此,如果 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.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

天暗了我发光 2025-01-03 20:31:10

我找到的唯一解决方案是编写自定义函数。将以下代码保存到 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 学生,欢迎提出代码改进的建议。

希望它能帮助其他人。

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文