本文介绍文章模板及文章函数的调用,文章系统是系统的重点部分,请详细阅读。

前言

列表文章的结构定义:

type Article struct {
  Id          int64             //文章
  CateId      int               //栏目id
  ParentId    int               //父栏目id
  RootId      int               //根栏目id
  Uid         int64             //发布人
  Username    string            //发布人
  Title       string            //标签
  Photo       string            //标题图
  Author      string            //作者
  Tag         string            //标签 1,2,3
  Views       int               //点击量
  Month       int               //月份
  State       int               //文章状态 0/1
  IsHot       int               //是否热门 0/1
  Description string            //文章简介
  Updated     int               //更新时间
  Created     int               //创建时间
  CateName    string            //栏目名称
  CateLink    string            //栏目链接
  MonthLink   string            //月份的链接
  Link        string            //文章链接地址
  SimpleTag   []*SimpleTag      //展示用的标签列表,即当前文章有哪些标签
}

模板函数

函数指,在页面上可调用的,需要在页面上赋值后,再使用。

1. 最新文章列表

名称:fn_new_article_list
参数:limit(条数)

演示代码:

<% $list:=fn_new_article_list 5 %>
  <ul>
     <% range $list%>
       <li><a href="<% .Link%>"><% .Title%></a></li>
     <% end %>
  </ul>

代码说明:

  • 取5条最新的文章列表,赋值给 $list 变量, 循环 $list 把文章显示在网页上。

2.热门的文章列表

名称:fn_hot_article_list
参数:limit(条数)

演示代码:

<% $list:=fn_hot_article_list 5 %>
  <ul>
    <% range $list%>
      <li><a href="<% .Link%>"><% .Title%></a> / <% fn_date_format .Created%> </li>
    <% end %>
  </ul>

代码说明:

  • 取5条最热门的文章列表,赋值给 $list 变量, 循环 $list 把文章显示在网页上。
  • fn_date_format 用于把格式为数字格式的时间,转化为常见的时间格式

3.按分类读取最新文章列表

名称:fn_new_article_list_by_category
参数:limit(条数) cateId(栏目id)

演示代码:

<% $list:=fn_new_article_list_by_category 5 2 %>
  <ul>
    <% range $list%>
      <li><a href="<% .Link%>"><% .Title%></a> / <% fn_date_format .Created%> </li>
    <% end %>
  </ul>

代码说明:

  • 取5条栏目id=2的最新文章列表。

4.按分类读取热门文章列表

名称:fn_hot_article_list_by_category
参数:limit(条数) cateId(栏目id)

演示代码:

<% $list:=fn_hot_article_list_by_category 5 2 %>
  <ul>
    <% range $list%>
      <li><a href="<% .Link%>"><% .Title%></a> / <% .Author %> </li>
    <% end %>
  </ul>

代码说明:

  • 取5条栏目id=2的热门文章列表;
  • .Author为后台发布的作者;

4.栏目列表

名称:fn_publish_category_list
参数:无

演示代码:

<% $list:=fn_publish_category_list%>
  <ul>
      <li><% range $list%><a href="<% .Link%>"> <% .CateName%></a> <% end %> </li>
  </ul>

代码说明:

  • 取所有发布栏目到到变量 $list,同时循环显示;
  • .CateName为栏目名称,.Link 为栏目的地址;

5.某个栏目的信息

名称:fn_category
参数:cateId (栏目id)

演示代码:

<% $cate:=fn_category 1 %>
<a href="<% $cate.Link %>"><% $cate.CateName %></a>

代码说明:

  • 取出栏目id=1的栏目信息,赋值给 $cate 变量;
  • $cate.CateName 为栏目名称;
  • $cate.Link 为栏目地址;

6.某个栏目的翻页文章列表

名称:fn_article_page_by_category
参数:page(当前页码)、limit(每页条数)、cateId(栏目id)

演示代码:

<div class="box">
    <% $cate:=fn_category 1 %>
    <h2>Article: </h2>
    <% $pageList:=fn_article_page_by_category .page.Page 5 $cate.CateId %>
    <ul>
        <%range $pageList.Data%>
        <li><a href="<% .Link%>"> <% .Title%> </a> </li>
        <% end %>
    </ul>
    <p>
       翻页: <% fn_pager .page.Page 5 $pageList.Count $cate.Link | str2html %>
    </p>
</div>

代码说明:

  • 取出栏目id=1的栏目信息,赋值给 $cate 变量;
  • 调用  fn_article_page_by_category 函数,传入3个参数,后,赋值给$pageList变量;
  • 使用 range 循环取出 $pageList.Data ,即文章列表;
  • 调用翻页函数 fn_pager,显示翻页的效果。

7.翻页函数

名称:fn_pager
参数:page(当前页码)、limit(每页条数)、count(文章总条数)、link(当前页地址)

演示代码:

<div class="box">
    <% $cate:=fn_category 1 %>
    <h2>Article: </h2>
    <% $pageList:=fn_article_page_by_category .page.Page 5 $cate.CateId %>
    <ul>
        <%range $pageList.Data%>
        <li><a href="<% .Link%>"> <% .Title%> </a> </li>
        <% end %>
    </ul>
    <p>
       翻页: <% fn_pager .page.Page 5 $pageList.Count $cate.Link | str2html %>
    </p>
</div>

代码说明:

  • 调用翻页函数,把翻页输出的字串,使用 | str2html  转换成html代码;
  • 此处 str2html是把字串转换成html代码的函数,| 符号,和linux下的 ls | grep a 表达的意义一样。

7.上一篇、下一篇文章

名称:fn_article_last_next
参数:created(文章发布时间)

演示代码:

<% $ta:=fn_article_last_next .article.Created %>
<!-- Previous article -->
<div class="col-12 col-sm-6 prev-post-start">
    <span class="d-block text-muted mb-2">上一篇文章</span> «
    <% if $ta.Last %>
    <a href="<% $ta.Last.Link %>" rel="prev"><% $ta.Last.Title %></a>
    <% else %>
    没有上一篇..
    <% end %>
</div>
<!-- Next article -->
<div class="col-12 col-sm-6 next-post-end">
    <span class="d-block text-muted mb-2">下一篇文章</span>
    <% if $ta.Next %>
    <a href="<% $ta.Next.Link %>" rel="next"><% $ta.Next.Title %></a>
    <% else %>
    没有下一篇了..
    <% end %>
    »
</div>

代码说明:

  • 调用 fn_article_last_next 函数,并把当前文章(主要用在文章详情页)的发布时间传入;
  • <% if $ta.Last %> 判断是否有上一篇文章,如果有,就显示它。
  • <% if $ta.Next %> 判断是否有下一篇文章,如果有,就显示它。

8.某篇文章的标签列表

名称:fn_tag_list_by_article
参数:tag(标签字串,比如1,2,3)

演示代码:

<% $tags:=fn_tag_list_by_article .article.Tag %>
<% if $tags %>
     <div class="grey-rule"></div>
      <div class="tags">
         标签:
         <% range $tags %>
          <a href="<%.Link%>" target="_blank"><% .TagName %></a>
         <% end %>
      </div>
<% end %>

代码说明:

  • 调用标签函数 fn_tag_list_by_article ,传入 某一篇文章的标签字串;
  • 如果 $tags 有数据,则遍历标签的信息;
  • <% .Link %> 是标签的链接,<% .TagName %>是标签的名称。

9.某个标签对应的文章翻页列表

名称:fn_article_page_by_tag
参数:page(当前页码)、limit(每页条数)、tagId(标签id)

演示代码:

<div class="box">
   <% $tag:=fn_tag 1 %>
    <h2>Tag Article: </h2>
    <% $pageList:=fn_article_page_by_tag .page.Page 30 $tag.TagId %>
    <ul>
        <%range $pageList.Data%>
        <li><a href="<% .Link%>"> <% .Title%> </a> </li>
        <% end %>
    </ul>
    <p>
       翻页: <% fn_pager .page.Page 30 $pageList.Count $cate.Link | str2html %>
    </p>
</div>

代码说明:

  • 取出栏目标签id=1的标签信息,赋值给 $tag 变量;
  • 调用  fn_article_page_by_tag 函数,传入3个参数,后,赋值给$pageList变量;
  • 使用 range 循环取出 $pageList.Data ,即文章列表;
  • 调用翻页函数 fn_pager,显示翻页的效果。

10.某个月份对应的文章翻页列表

名称:fn_article_page_by_month
参数:page(当前页码)、limit(每页条数)、month(月份:202408)

演示代码:

<div class="box">
    <h2>Month Article: </h2>
    <% $pageList:=fn_article_page_by_month .page.Page 30 202407 %>
    <ul>
        <%range $pageList.Data%>
        <li><a href="<% .Link%>"> <% .Title%> </a> </li>
        <% end %>
    </ul>
    <p>
       翻页: <% fn_pager .page.Page 30 $pageList.Count $cate.Link | str2html %>
    </p>
</div>

代码说明:

  • 调用  fn_article_page_by_month 函数,传入3个参数,后,赋值给$pageList变量;
  • 使用 range 循环取出 $pageList.Data ,即文章列表;
  • 调用翻页函数 fn_pager,显示翻页的效果。