Docs
系统里的说明
下面和后台「说明」是同一套:怎么用、后台每一栏、主题、模板标签,以及环境和安装。
前台只用 @cms*。循环类标签要成对写结束指令。循环变量默认 $item,嵌套时必须用 'as' => '别名'。换哪套外观见「主题」,文件放哪见「模板」。
常用例子
@cmsChannel(['type' => 'top', 'ismenu' => 1])
<a href="{{ $item->frontUrl() }}">{{ $item->t('title') }}</a>
@endcmsChannel
@cmsContent(['model' => 'article', 'num' => 6])
<a href="{{ $item->url }}">{{ $item->t('title') }}</a>
@endcmsContent
@cmsAdv(['name' => 'home_banner'])
<img src="{{ cms_media($item->image) }}" alt="{{ $item->t('title') }}">
@endcmsAdv
栏目列表页
@cmsContent(['page' => true, 'num' => $category->page_size ?: 10])
<article>
<div>@cmsDate(['name' => $item->published_at])</div>
<h3><a href="{{ $item->url }}">{{ $item->t('title') }}</a></h3>
<p>@cmsSubstr(['name' => $item->t('excerpt') ?: $item->t('content'), 'len' => 100])</p>
</article>
@endcmsContent
@cmsPaginate
详情页
@cmsBreadcrumb
<h1>{{ $entry->t('title') }}</h1>
<div>{!! $entry->linked_content ?? $entry->t('content') !!}</div>
<p>上一篇:@cmsPrev 下一篇:@cmsNext</p>
嵌套循环(必须改名)
@cmsChannel(['type' => 'top', 'as' => 'cat'])
<h2>{{ $cat->t('title') }}</h2>
@cmsContent(['catid' => $cat->id, 'num' => 4, 'as' => 'row'])
<a href="{{ $row->url }}">{{ $row->t('title') }}</a>
@endcmsContent
@endcmsChannel
指令一览
| 指令 | 作用 | 常用参数 |
|---|---|---|
@cmsSeo | 输出 title / keywords / description | 不用参数,放在 <head> |
@cmsChannel | 栏目循环 | type=top|son|peer|selftop,ismenu,num,name(栏目 id 或 slug) |
@cmsMenu | 后台导航;没有菜单时回退栏目 | location=header(默认) |
@cmsContent | 文档列表 | catid,model,flag,num,page,order,insub,related + related_field |
@cmsPaginate | 分页(配合 page=>true) | 可传入分页视图名 |
@cmsArcone | 指定一篇 | aid 或 id |
@cmsAdv | 推荐位 | name 必填;num;图片用 cms_media($item->image);HTML 条目输出 $item->html。首页友链用 partners 或 friend_links |
@cmsBreadcrumb | 面包屑 | symbol,class |
@cmsPrev / @cmsNext | 同栏目上下篇 | field,msg(没有时的文字) |
@cmsDate | 格式化日期 | name 或 value,format=Y-m-d |
@cmsSubstr | 截断纯文本 | name,len=80,dot |
@cmsFilter | 模型筛选字段 | model;配合地址栏 ?filter[字段]=值 |
@cmsOrder | 排序链接 | 输出 $item->url / label / current |
@cmsFileinfo | 附件信息 | field 或 name,aid |
@cmsForm | 整份表单(含验证码) | slug,captcha,submit |
@cmsFormFields | 只循环字段,自己画表单 | slug |
@cmsTaglist | 标签云 | num=20 |
@cmsMap | 嵌入 OpenStreetMap | point=经度,纬度,address,width,height |
@cmsContent 再说明
不写 catid 时,列表页默认当前栏目(含子栏目,insub=>false 可关掉)。catid=>0 或 'all' 不限栏目。model 可以是标识(如 article)或模型 id。flag 对推荐属性。related 按扩展字段找关联文档,例如漫画章节:related=>$entry->id, related_field=>'manga_id'。
辅助函数
| 函数 | 作用 |
|---|---|
cms_media($path) | 附件地址。走「设置」里的 CDN;.env 配了 CMS_MEDIA_DISK=s3 时指向对象存储 |
cms_route('download', $entry) | 带语言前缀的命名路由 |
cms_front_url('news') | 前台路径 |
cms_ui('search') | 主题短句。全站默认在「语言 → 主题文案」;某一套可在主题「配置」里覆盖。可写 cms_ui('hello', ['name' => $name]) 替换 :name。 |
cms_theme('home_notice') | 这一套主题的自定义参数,在主题「配置」里填。键名来自 theme.json 的 config,也有首页公告、按钮等默认项。 |
cms_t('中文', 'English') | 按当前内容语言选一句。只有中英时够用,新语言请改用 cms_ui()。 |
正文 HTML 不要用两个花括号(会转义标签),要用 Blade 的 raw 输出:{!! $entry->t('content') !!}。不要在主题里新写一套标签,也不要引用别的 CMS 指令。