系统使用
使用该系列标签可调用文章列表或文章分类、详情等数据到模板。
基础调用示例,默认会调用 20 条文章,其中 $list
为被赋值的列表数据变量,后面的方法则为文章数据调用。
调用文章列表,并且赋值给 $list 变量。
{var $list = \App\Content\Service\Article::lists()}
循环出文章列表
{foreach $list as $vo}
<div>文章标题:{$vo->title}</div>
{/foreach}
我们可以给文章列表调用中传递不同的参数来进行内容过滤。
示例调用分类 id 为 1 的文章列表,如下:
{var $list = \App\Content\Service\Article::lists(classId: 1)}
当然你也可以使用变量作为条件值:
{var $classId = 1}
{var $list = \App\Content\Service\Article::lists(classId: $classId)}
使用 limit 参数可以调整条数,如下调用 10 条数据:
{var $list = \App\Content\Service\Article::lists(classId:1, limit: 10)}
参数名 | 参数类型 | 说明 | 示例值 |
---|---|---|---|
where | 数组 | Eloquent ORM 条件 | ['class_id' => 1] |
classId | 整数 | 分类ID,会同时调用子分类 | 1 |
recId | 整数 | 推荐位ID | 1 |
top | 布尔 | 文章是否按照置顶优先排序,默认开启 | true |
image | 布尔 | 是否调用包含封面文章,不传参为全部 | true |
keyword | 字符串 | 搜索关键词 | '文章' |
tag | 字符串 | 标签关联的文章 | '新闻' |
limit | 整数 | 调用条数 | 10 |
order | 字符串 | Sql 排序规则,默认安装 id 倒序 | 'id desc' |
如果文章详情页面模板为 info.latte
则文章详情页面链接为 /page/info/1
, 其中1为文章id。
你可以设置不同的模板名称,也可以把模板放到子目录中,这样需要链接也使用模板的路径名称。
{foreach $list as $vo}
<a href='/page/info/{$vo->id}'>{$vo->title}</a>
{/foreach}
在需要分页的页面可以使用文章分页标签来调用分页数据,默认为每页 20 条,分页可使用列表相同的调用参数。
{var $data = \App\Content\Service\Article::page()}
<div>
{foreach $data->items() as $vo}
<div>文章标题:{$vo->title}</div>
{/foreach}
</div>
<div class="flex justify-center mt-8">
分页链接: {include 'paginate.latte', paginator: $data, prefix: '/list'}
</div>
上面代码中通过 include
标签嵌入一个模板进来,并且把分页数据和链接前缀传递了过去,这样我们可以清晰的来定义通用分页样式。
分页链接样式需要自行处理,下面是 paginate.latte
的示例:
<nav class="">
{* Previous Page Link *}
{var $paginator = $paginator->withPath($prefix) }
{var $totalPage = $paginator->lastPage()}
{var $currentPage = $paginator->currentPage()}
{var $startPage = max(1, $currentPage - 2)}
{var $endPage = min($totalPage, $currentPage + 2)}
{if $endPage - $startPage < 4}
{var $startPage =max(1, $endPage - 4)}
{/if}
{if $totalPage > 1}
<ul class="flex flex-row gap-2 text-center">
<li n:class="$paginator->onFirstPage() ? 'bg-base-100 opacity-50' : 'bg-base-100 hover:bg-base-100', rounded">
<a class="py-2 px-4 block" href="{$paginator->onFirstPage() ? 'javascript:;' : $paginator->previousPageUrl()}" aria-hidden="true">‹‹</a>
</li>
{* List Page Link *}
{for $page = $startPage; $page <= $endPage; $page++}
<li n:class="$currentPage == $page ? 'bg-blue-600 text-white' : 'bg-base-100 hover:bg-base-200', rounded"><a class="py-2 px-4 block" href="{$paginator->url($page)}">{$page}</a></li>
{/for}
{if $endPage < $totalPage}
{if ($endPage < $totalPage - 1) }
<li class="bg-base-100 hover:bg-base-200 rounded"><span class="py-2 px-4 block">...</span></li>
{/if}
<li class="bg-base-100 hover:bg-base-200 rounded"><a class="py-2 px-4 block" href="{$paginator->url($paginator->lastPage())}">{$paginator->lastPage()}</a></li>
{/if}
{* Next Page Link *}
<li n:class="!$paginator->hasMorePages() ? 'bg-base-100 opacity-50' : 'bg-base-100 hover:bg-base-200', rounded">
<a class="py-2 px-4 block" href="{!$paginator->hasMorePages() ? 'javascript:;' : $paginator->nextPageUrl()}" rel="next"
aria-label="@lang('pagination.next')">››</a>
</li>
</ul>
{/if}
</nav>
可以配合路由参数来调用单篇文章数据,详情模板默认可直接使用 $id 变量来获取到当前文章 ID。
通过文章列表配合文章链接跳转到详情页面。
{var $info = \App\Content\Service\Article::info($id)}
<h1>文章标题:{$info->title}</h1>
少数情况下需要自行控制数据查询和条件,可以使用以下标签,query方法可以使用列表调用的参数,返回原始 ORM 对象。
ORM 使用了 Eloquent ORM 作为数据库查询,你可以使用全部查询方法。
{var $query = \App\Content\Service\Article::query()}
循环文章列表内可以调用除文章内的各种字段。
调用名 | 类型 | 说明 |
---|---|---|
id | 整数 | 文章 ID |
title | 字符串 | 文章标题 |
subtitle | 字符串 | 文章副标题 |
images | 数组 | 封面组图 |
content | 字符串 | 文章正文 |
source | 字符串 | 文章来源 |
virtual_view | 整数 | 虚拟访问量 |
view | 整数 | 访问量 |
collect | 整数 | 收藏量 |
comment | 整数 | 评论量 |
praise | 整数 | 点赞量 |
文章内可调用出文章分类的数据。
调用名 | 类型 | 说明 |
---|---|---|
class_id | 整数 | 分类ID |
class->name | 字符串 | 分类名称 |
文章标签是数组对象,通过循环获取
{foreach $vo->tags as $v}
<div>{$v->name}</div>
{/foreach}
根据文章关联来查找相关的文章,$info
是文章详情的数据
{var $list = \App\Content\Service\Article::recommend(info: $info, limit: 5)}
{foreach $list as $v}
<div>{$v->title}</div>
{/foreach}
通过传递文章id来调用
上一篇
{var $prevInfo = \App\Content\Service\Article::prev(id: 1)}
下一篇
{var $nextInfo = \App\Content\Service\Article::next(id: 1)}
该功能会调用置顶文章分类id的目录索引,包含分类与文章的树形结构。
{var $list = \App\Content\Service\Article::catalogs(id: 1)}