1. 栏目列表 ms:channel
1.1. 适用模版
首页模版、列表模版、内容模版、自定义页面模版
[!tip]主页面模版使用:如果不设置typeid会取出所有顶级(第一级)栏目; 列表模版使用:typid参数值为当前访问的栏目ID 内容模版使用: typeid为当前文章的所属栏目id
1.2. 格式
{ms:channel 参数1=值1 参数2=值2}
${field.*}
{/ms:channel}
[!tip]栏目的显示的排序可以通过排序字段设置
1.2.1. 嵌套格式
{ms:channel type="nav" }
<!--第一级-->
+${field.typetitle} <br/>
{ms:channel typeid=field.id}
<!--第二级-->
+++${field.typetitle}<br/>
{ms:channel typeid=field.id}
<!--第三级-->
++++++${field.typetitle}<br/>
{/ms:channel}
{/ms:channel}
{/ms:channel}
1.3. 参数
参数名称 | 类型 | 必须 | 示例值 | 默认值 | 描述 |
---|---|---|---|---|---|
type | 字符串 | 否 | son top level self path parent nav |
son | nav:该标签用于首页导航取第一级栏目 son:取下级栏目; top:获取栏目的平级的顶级栏目,typeid参数不为空才有效; level:取同级栏目,顶级栏目无效; self: 取当前指定 typeid 本身;path:取当前栏目的路径,通常用于详情页,显示隶属栏目位置,例如:新闻中心 > 行业新闻; parent:上一级栏目; |
typeid | 整型 | 否 | >0 | 所有父级栏目 | typeid有值时,取所指栏目的子级 |
typeids | 字符串 | 否 | 1,2,3 | typeids参数值,多个以逗号隔开,当typeids有值时,type参数无效,只取指定栏目id数据(该参数只在5.4.2及以上版本支持) | |
size | 整型 | 否 | >0 | 所有栏目 | 返回既定条件下的栏目个数,不使用则默认返回全部(5.3.1及以上版本支持) |
flag | 字符串 | 否 | 在自定义字典中定义好对应的值,具体属性值请在栏目属性进行查看,使用方式参考文章列表的flag使用 | ||
noflag | 字符串 | 否 | 参考文章列表的noflag | ||
orderby | 字符串 | 否 | date 更新时间 sort 排序 |
id | 栏目排序,sort排序需要在自定义顺序设置才能看到效果 |
order | 字符串 | 否 | 升序 | desc:按照倒序排列,asc:按照正序排列 |
[!tip] order参数必须要与orderby一起使用才有效 属性类型为字符串,使用需要使用引号 例如 type="son" order="desc"
1.4. 输出字段
[!tip] 在栏目绑定的列表模板,如开源的news-list模板;${field.栏目相关字段}即可输出当前栏目对应数据;不需要被{ms:channel}标签包裹
字段名称 | 描述 |
---|---|
${field.index} | 序号,根据显示条数显示的序号1 2 …..10 |
${field.type} | 栏目类型,1:列表 2:单篇 3:链接与栏目链接一起使用 |
${field.typetitle} | 栏目名称,与栏目链接一起使用 |
${field.typeshorttitle} | 栏目副标题 |
${field.typepath} | 栏目拼音路径 |
${field.typelink} | 栏目链接:{ms:global.html/}${field.typelink};注意栏目属性为外连接标签显示为外连接的内容与${field.typeurl}一致 |
${field.typekeyword} | 栏目关键字 |
${field.typedescrip} | 栏目描述 |
${field.id} | 栏目id,单篇文章情况为文章id,需使用${field.typeid}获取栏目id |
{@ms:file field.typelitpic/} | 栏目banner图:{@ms:file field.typelitpic/} |
{@ms:file field.typeico/} | 栏目小图:{@ms:file field.typeico/} |
${field.typeurl} | 栏目自定义链接,需要配合if条件来决定跳转自定义链接 |
${field.flag} | 栏目属性 |
${field.childsize} | 子分类数量 |
${field.parentid} | 父级编号 |
${field.parentids} | 父级编号集合 |
${field.typeleaf} | 子节点标识,返回 1 表示该栏目下没有任何子栏目,返回 0 则表示是有子栏目 |
[!tip]当栏目为单篇时,需要选择静态化生成栏目,页面才会生成。且单篇栏目下,需要发布文章,才可用标签获取
2. 范例
下面列举一些常用的使用场景
2.1. 顶级栏目导航
{ms:channel type='nav'}
<a href="{ms:global.html/}${field.typelink}">${field.typetitle}</a>
{/ms:channel}
2.2. 栏目链接为外链接
{ms:channel type='nav'}
<a href="<#if field.type==3>${field.typeurl}<#else>{ms:global.html/}${field.typelink}</#if>">
${field.typetitle}
</a>
{/ms:channel}
field.type==3 为外链接类型
2.3. 当前位置
主要用在列表模版、内容模版上,可以实现例如:当前位置:首页 > 新闻中心 > 行业新闻
的效果
当前位置: <a href="{ms:global.html/}/index.html">首页 </a>
{ms:channel type="path"}
<a href="">> ${field.typetitle}</a>
{/ms:channel}
2.4. channel中使用include
主要用于父栏目和子栏目绑定不是相同模板的情况,在父栏目页面include子栏目的模板,方便维护和简化模板;
<!-- 父栏目列表模板 -->
<#assign curTypeId=field.id>
{ms:channel typeid="son1的id" type="self"}
<#include "son1.htm" />
{/ms:channel}
...
<!-- 子栏目son1的列表模板 -->
include获取传参:${curTypeId}
{ms:arclist size=10 ispaging=true }
${field.title}==${field.typetitle}==${field.typeid} <br>
{/ms:arclist}
<#if page.total?number gt 0>
<ul>
<li><a href="{ms:global.html/}{ms:page.index/}">首页</a></li>
<li><a href="{ms:global.html/}{ms:page.pre/}">上一页</a></li>
<li><a href="{ms:global.html/}{ms:page.next/}">下一页</a></li>
<li><a href="{ms:global.html/}{ms:page.last/}">末页</a></li>
<li>当前页/总页数<span>{ms:page.cur/}/{ms:page.total/}</span></li>
<li>共有:<span>{ms:page.rcount/}</span>篇文章</li>
</ul>
</#if>
[!tip] 注意: 此种用法,父栏目不支持分页;分页子栏目在父栏目只显示第一页的数据,在自身栏目列表页分页正常; 可在父栏目定义变量(如curTypeId)传递给include的子栏目页面,定义的变量值在父栏目页面的子栏目模板中可以获取到;在子栏目自身的列表页面无法获取;如访问parent.html,能输出curTypeId的值;访问son.html,子栏目输出的curTypeId为空
2.5. 当前栏目的子栏目
{ms:channel type="son" }
<a href="{ms:global.html/}${field.typelink}">${field.typetitle}</a>》
{/ms:channel}
2.6. 默认显示第一个子栏目的列表页
可以将父栏目设置为链接,在自定义链接中填写具体的子栏目对应静态文件链接 样例代码片段,具体可以参考默认皮肤。
<a href="<#if field.type == 3>{ms:global.html/}${field.typeurl}<#else>{ms:global.html/}${field.typelink}</#if>">${field.typetitle}</a>
2.7. 栏目选中效果
<!-- 定义typeid变量 field为当前栏目对象-->
<#assign typeid=field.typeid>
<#assign ids=field.parentids>
{ms:channel type="nav" }
<!-- if标签中直接使用typeid-->
<#if field.typeid == typeid || (ids?has_content && ids?index_of('${field.typeid}') gt -1)>
<a href="${field.typelink}" class="选中样式">${field.typetitle}</a>
<#else>
<a href="{ms:global.html/}${field.typelink}">${field.typetitle}</a>
</#if>
{/ms:channel}
2.8. 每个栏目不同banner的效果
栏目上传不同的缩略图就可以实现不同顶部banner图的效果
[!tip]如果存在子栏目需要显示顶级栏目的图片,可以通过
if
逻辑来实现[!tip]注意
#assign
定义变量filed.typeid
值为当前预览页面的栏目id(全局栏目id),而ms:channel
循环里面的filed.typeid
只是当前循环的栏目id(局部栏目id)
2.9. 常用组合代码片段
2.9.1. 当前父亲+当前子栏目+选择效果
下面是 default\news-list.htm
默认模版里面的代码片段
<!--通过type='parent'获取当前页面父栏目-->
{ms:channel type='parent'}
<span class="title"> ${field.typetitle}</span>
{/ms:channel}
<!-- 定义typeid变量 field为当前栏目对象-->
<#assign typetitle=field.typetitle>
<!-- 判断当前是否已经是子节点-->
<#if field.typeleaf == 1>
{ms:channel type='level'}
<a href="{ms:global.html/}${field.typelink}"
class="<#if typetitle==field.typetitle>sub-title-sel<#else>sub-title</#if>"><!-- 选中效果 -->
${field.typetitle}
</a>
{/ms:channel}
<#else>
{ms:channel type='son'}
<a href="{ms:global.html/}${field.typelink}"
class="<#if typetitle==field.typetitle>sub-title-sel<#else>sub-title</#if>"><!-- 选中效果 -->
${field.typetitle}
</a>
{/ms:channel}
</#if>
[!tip]
field.typeleaf
子节点标识,表示该栏目下没有子栏目。就获取平级栏目,相反就获取子栏目
2.9.2. 自定义栏目跳转链接
{ms:channel }
<!-- if标签中直接使用typeid-->
<#if field.typeurl?has_content>
<a href="{ms:global.html/}${field.typeurl}">${field.typetitle}</a>
<#else>
<a href="{ms:global.html/}${field.typelink}">${field.typetitle}</a>
</#if>
{/ms:channel}
2.9.3. 指定获取parentids中的某个id
<#assign typeid>
<!--指定某个栏目-->
{ms:channel typeid=栏目id type='self'}
<#list field.parentids.split(",") as item>
<!--取parentids中的第二个parentid-->
<#if item?index = 1>
${item}
</#if>
</#list>
{/ms:channel}
</#assign>
${typeid}