iCMS:route 路由标签

``` ### 实用示例 #### 网站导航 ```html ``` #### 文章分享链接 ```html ```

iCMS 路由标签技术文档

路由标签 (route)

路由标签用于在模板中生成URL链接,支持多种URL生成方式和参数设置。

?️ 以下说明只是路由标签的使用举例,不是真实链接

iCMS:route 标签

支持参数

参数名 类型 默认值 说明
url 字符串 - 链接地址,可以是路由名称或URL
as 布尔值 false 是否返回URL而不直接输出
print 布尔值 true 是否输出URL
query 数组 - 附加到URL的查询参数
host 布尔值 false 是否添加域名前缀
set 布尔值 false 是否设置全局路由变量
self 字符串 - 使用当前页面URL

返回值

如果设置了as=true,则返回生成的URL;否则直接输出URL并返回URL字符串。

使用示例

<!-- 基本用法 -->
<a href="<!--{iCMS:route url='article/view/1'}-->">查看文章</a>

<!-- 使用as参数返回URL -->
<!--{iCMS:route url='article/list' as='true'}-->
<a href="<!--{$route}-->">文章列表</a>

<!-- 添加查询参数 -->
<a href="<!--{iCMS:route url='article/list' query=['cid'=>1,'page'=>2]}-->">分类文章</a>

<!-- 添加域名前缀 -->
<a href="<!--{iCMS:route url='article/view/1' host='true'}-->">完整链接</a>

<!-- 使用当前页面URL -->
<a href="<!--{iCMS:route url='self' query=['page'=>$page+1]}-->">下一页</a>

常见应用场景

1. 文章链接生成

<!--{foreach key="key" value="article" from="$article_list"}-->
  <div class="article-item">
    <h3>
      <a href="<!--{iCMS:route url='article/view/$article.id'}-->">
        <!--{$article.title}-->
      </a>
    </h3>
    <div class="meta">
      <span class="category">
        <a href="<!--{iCMS:route url='category/$article.cid'}-->">
          <!--{$article.category.name}-->
        </a>
      </span>
      <span class="author">
        <a href="<!--{iCMS:route url='user/home/$article.userid'}-->">
          <!--{$article.user.nickname}-->
        </a>
      </span>
    </div>
  </div>
<!--{/foreach}-->

2. 分页链接生成

<div class="pagination">
  <!--{if $page > 1}-->
    <a href="<!--{iCMS:route url='self' query=['page'=>1]}-->" class="first">首页</a>
    <a href="<!--{iCMS:route url='self' query=['page'=>$page-1]}-->" class="prev">上一页</a>
  <!--{/if}-->

  <!--{for $i=1 to $total_page}-->
    <!--{if $i == $page}-->
      <span class="current"><!--{$i}--></span>
    <!--{else}-->
      <a href="<!--{iCMS:route url='self' query=['page'=>$i]}-->"><!--{$i}--></a>
    <!--{/if}-->
  <!--{/for}-->

  <!--{if $page < $total_page}-->
    <a href="<!--{iCMS:route url='self' query=['page'=>$page+1]}-->" class="next">下一页</a>
    <a href="<!--{iCMS:route url='self' query=['page'=>$total_page]}-->" class="last">末页</a>
  <!--{/if}-->
</div>

3. 搜索表单链接

<form action="<!--{iCMS:route url='search' as='true'}-->" method="get">
  <input type="text" name="keywords" placeholder="请输入关键词">
  <select name="type">
    <option value="article">文章</option>
    <option value="tag">标签</option>
    <option value="user">用户</option>
  </select>
  <button type="submit">搜索</button>
</form>

4. 设置全局路由变量

<!-- 设置全局路由变量 -->
<!--{iCMS:route url='article/list' query=['cid'=>1] set='true'}-->

<!-- 在其他地方使用 -->
<div class="breadcrumb">
  <a href="/">首页</a> >
  <a href="<!--{$Route.url}-->"><!--{$category.name}--></a>
</div>

注意事项

  1. URL参数:url参数为必填项,如果为空将输出"javascript:;"
  2. 路由解析:非完整URL会通过Route::routing()方法解析为实际URL
  3. 查询参数:可以通过query参数添加查询字符串
  4. 域名前缀:设置host=true可以添加网站域名前缀,生成完整URL
  5. 当前页面:设置url='self'可以使用当前页面URL

高级用法

条件URL生成

<!--{if $condition}-->
  <a href="<!--{iCMS:route url='path/to/url1'}-->">链接1</a>
<!--{else}-->
  <a href="<!--{iCMS:route url='path/to/url2'}-->">链接2</a>
<!--{/if}-->

动态路由参数

<!--{assign var="article_id" value="123"}-->
<!--{assign var="category_id" value="5"}-->

<a href="<!--{iCMS:route url='article/view/$article_id/c$category_id'}-->">
  查看文章
</a>

多参数URL生成

<a href="<!--{iCMS:route 
  url='article/list' 
  query=[
    'cid' => $category.id,
    'tag' => $tag.id,
    'page' => $page,
    'orderby' => 'hot'
  ]
}-->">热门文章</a>

在JavaScript中使用

<script>
function goToArticle(id) {
  var url = "<!--{iCMS:route url='article/view' as='true'}-->";
  window.location.href = url + "/" + id;
}

function searchByTag(tag) {
  var baseUrl = "<!--{iCMS:route url='search' as='true'}-->";
  window.location.href = baseUrl + "?keywords=" + encodeURIComponent(tag) + "&type=tag";
}
</script>

实用示例

网站导航

<nav class="main-nav">
  <ul>
    <li><a href="<!--{iCMS:route url=''}-->">首页</a></li>
    <li><a href="<!--{iCMS:route url='article/list'}-->">文章</a></li>
    <li><a href="<!--{iCMS:route url='category/index'}-->">分类</a></li>
    <li><a href="<!--{iCMS:route url='tag/index'}-->">标签</a></li>
    <li><a href="<!--{iCMS:route url='user/index'}-->">用户</a></li>
    <li><a href="<!--{iCMS:route url='about'}-->">关于我们</a></li>
  </ul>
</nav>

文章分享链接

<div class="share-links">
  <span>分享到:</span>
  <!--{iCMS:route url='article/view/$article.id' host='true' as='true'}-->
  <a href="https://service.weibo.com/share/share.php?url=<!--{$route|urlencode}-->&title=<!--{$article.title|urlencode}-->" target="_blank" class="weibo">微博</a>
  <a href="https://connect.qq.com/widget/shareqq/index.html?url=<!--{$route|urlencode}-->&title=<!--{$article.title|urlencode}-->" target="_blank" class="qq">QQ</a>
  <a href="https://www.facebook.com/sharer/sharer.php?u=<!--{$route|urlencode}-->" target="_blank" class="facebook">Facebook</a>
  <a href="https://twitter.com/intent/tweet?url=<!--{$route|urlencode}-->&text=<!--{$article.title|urlencode}-->" target="_blank" class="twitter">Twitter</a>
</div>