DUX

帮助中心

系统使用

文章标签

更新时间:2024-10-17 21:30
阅读量:1145

使用该系列标签可调用文章列表或文章分类、详情等数据到模板。

文章列表

基础调用示例,默认会调用 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)}
开发者交流
如果您是开发者 可以加入微信群和我们进行讨论
© copyright 2013-2023 Dux. All rights reserved. 陇ICP备2023003718号-1