80 lines
3.6 KiB
HTML
80 lines
3.6 KiB
HTML
|
|
<!doctype html>
|
||
|
|
[#escape x as (x)!?html]
|
||
|
|
<html lang="zh-CN">
|
||
|
|
<head>
|
||
|
|
<meta charset="utf-8">
|
||
|
|
<title>${channel.title} - ${site.title}</title>
|
||
|
|
<meta name="keywords" content="${channel.seoKeywords}">
|
||
|
|
<meta name="description" content="${channel.seoDescription}">
|
||
|
|
[#include 'inc_meta.html'/]
|
||
|
|
[#include 'inc_css.html'/]
|
||
|
|
[#include 'inc_js.html'/]
|
||
|
|
</head>
|
||
|
|
<body>
|
||
|
|
[#include 'inc_header.html'/]
|
||
|
|
<div class="bg-gray-200">
|
||
|
|
<div class="container">
|
||
|
|
<nav class="row" aria-label="breadcrumb">
|
||
|
|
<ol class="col list-inline my-2">
|
||
|
|
[#assign parent = channel.parent!channel/]
|
||
|
|
<li class="list-inline-item"><a class="btn btn-sm [#if parent.id == channel.id]btn-primary[#else]btn-link[/#if]" href="${parent.url}">全部</a></li>
|
||
|
|
[@ChannelList parentId=parent.id isNav='true'; list]
|
||
|
|
[#list list as bean]
|
||
|
|
<li class="list-inline-item"><a class="btn btn-sm [#if channel.id == bean.id]btn-primary[#else]btn-link[/#if]" href="${bean.url}">${bean.name}</a></li>
|
||
|
|
[/#list]
|
||
|
|
[/@ChannelList]
|
||
|
|
</ol>
|
||
|
|
</nav>
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
<div class="container mt-3">
|
||
|
|
<div class="row">
|
||
|
|
<div class="col-lg-8">
|
||
|
|
<div>
|
||
|
|
[#assign customsQueryMap={}/]
|
||
|
|
[#list channel.articleModel.fieldList?filter(field->['radio','checkbox','select','multipleSelect']?seqContains(field.type)) as field]
|
||
|
|
<div class="py-1 border-bottom">
|
||
|
|
[#assign param=field.code+'Key'/]
|
||
|
|
<a href="${addParam(channel.url, channel.dynamicUrl, param)}" class="btn btn-sm[#if !Params[param]??] btn-secondary[#else] btn-link text-reset[/#if]">全部${field.name}</a>
|
||
|
|
[@DictList typeId=field.dictTypeId; list]
|
||
|
|
[#list list as dict]
|
||
|
|
<a href="${addParam(channel.url, channel.dynamicUrl, param, dict.value)}" class="btn btn-sm [#if Params[param]! == dict.value]btn-secondary[#else]btn-link text-reset[/#if]">${dict.name}</a>
|
||
|
|
[/#list]
|
||
|
|
[/@DictList]
|
||
|
|
</div>
|
||
|
|
[#assign customsQueryMap=customsQueryMap + {'ArrayEQ_@articleExt-mainsJson$'+param+(field.dataType != 'string')?string('_Int',''): Params[param]!}/]
|
||
|
|
[/#list]
|
||
|
|
</div>
|
||
|
|
[@ArticlePage channelId=channel.id isIncludeSubChannel="true" Q_=customsQueryMap orderBy=channel.orderDesc?string("sticky_desc,order_desc","sticky_desc,order_asc"); pagedList]
|
||
|
|
<ul class="list-unstyled">
|
||
|
|
[#list pagedList.content as bean]
|
||
|
|
<li class="mt-3 media border-bottom position-relative pb-3">
|
||
|
|
[#if bean.image??][@A bean=bean class="mr-3"]<img src="${bean.image}" class="rounded-sm cm-media-img" alt="${bean.title}">[/@A][/#if]
|
||
|
|
<div class="media-body">
|
||
|
|
<p class="mt-0 mb-1">[@A bean=bean class="cm-link text-decoration-none"/]</p>
|
||
|
|
<p class="text-muted d-none d-sm-block mb-2">
|
||
|
|
[@A bean=bean class="text-reset small text-decoration-none"]${substring(bean.description,60,'...')}[/@A]
|
||
|
|
</p>
|
||
|
|
<div class="small text-muted mt-3 clearfix">
|
||
|
|
<div class="float-left">
|
||
|
|
<span>[#list bean.channel.paths as c][@A bean=c/][#if c_has_next] > [/#if][/#list]</span>
|
||
|
|
<i class="ml-2 far fa-eye"></i> ${bean.views}
|
||
|
|
</div>
|
||
|
|
<div class="float-right"><i class="ml-2 far fa-clock"></i> ${format(bean.publishDate, 'yyyy-MM-dd')}</div>
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
</li>
|
||
|
|
[/#list]
|
||
|
|
</ul>
|
||
|
|
[#include 'inc_page.html'/]
|
||
|
|
[/@ArticlePage]
|
||
|
|
</div>
|
||
|
|
[#include 'inc_right.html'/]
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
[#include 'inc_footer.html'/]
|
||
|
|
<script>axios.get('${api}/channel/view/${channel.id?c}');</script>
|
||
|
|
</body>
|
||
|
|
</html>
|
||
|
|
[/#escape]
|