LeafCMS GitHub 开始安装
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嵌入 OpenStreetMappoint=经度,纬度,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 指令。

飞机群 @sanpang