栏目与导航
栏目决定站点目录结构与导航。讲清 slug、父子级、排序、隐藏、绑定模板,以及导航怎么自定义。
约 9 分钟
建站
代码块右上角可一键复制
本页目录(9 分钟读完)
这一章只做两件事:怎么加栏目、怎么排菜单。
入口:后台 →「内容」→「栏目管理」(/admin/node)。
怎么加一个栏目#
作用:决定内容放在站点哪个位置,也决定导航上显示什么。
步骤:
- 点左侧「内容」→「栏目管理」
- 点「新建」
- 按下表填
- 点「保存」
| 填什么 | 填什么 | 说明 |
|---|---|---|
| 栏目名称 | 新闻中心 | 必填。导航上显示的字 |
| URL 别名 | news | 生成 /list/news;留空自动生成 |
| 上级栏目 | 顶级 | 要做二级就选父栏目 |
| 所属模型 | 文章 | 这个栏目下能发什么 |
| 页面标题 | 新闻中心 - 某某网 | 留空就用栏目名称 |
| 关键词 | 新闻,公司新闻 | SEO 用,可不填 |
| 描述 | 一句话说明 | SEO 用,可不填 |
| 排序值 | 100 | 数字越大越靠前 |
| 状态 | 显示 | 选「隐藏」就不出现在导航 |
slug 怎么起:
| 栏目 | 推荐 | 不要用 |
|---|---|---|
| 新闻中心 | news | xinwen、新闻 |
| 产品中心 | products | product_list、cp |
| 关于我们 | about | about-us-page |
| 下载中心 | download | down、下载 |
规则:
- 只用小写字母、数字、短横线
- 同一个父栏目下不能重名
- 改 slug 会让老链接打不开
栏目页 404?→ 看「常见问题」
怎么加二级栏目#
作用:做「产品中心 → 室内机」这种层级。
步骤:
- 先建好父栏目,比如「产品中心」
- 点「新建」
- 栏目名称填「室内机」
- 上级栏目选「产品中心」
- 所属模型选「产品」
- 点「保存」
顺序:先建父,再建子。反过来也能建,只是建的时候选不到父级。
一个典型的企业站结构:
| 一级栏目 | 二级栏目 | slug | 模型 |
|---|---|---|---|
| 关于我们 | — | about | 单页型 |
| 产品中心 | — | products | 产品 |
| 室内机 | indoor | 产品 | |
| 室外机 | outdoor | 产品 | |
| 配件 | parts | 产品 | |
| 新闻中心 | — | news | 文章 |
| 公司新闻 | company | 文章 | |
| 行业资讯 | industry | 文章 | |
| 服务支持 | — | support | 不指定 |
| 常见问题 | faq | 文章 | |
| 资料下载 | docs | 下载模型 | |
| 联系我们 | — | contact | 单页型 |
建的顺序:
- 先建一级:产品中心、新闻中心、服务支持
- 再建二级,上级选刚才建好的
- 最后改「排序值」,决定谁在前
怎么排菜单顺序#
作用:控制导航上谁先谁后。
步骤:
- 进「栏目管理」
- 点要调的栏目后面的「编辑」
- 改「排序值」
- 点「保存」
规则:
| 规则 | 说明 |
|---|---|
| 数字越大越靠前 | 100 在 90 前面 |
| 数字相同 | 按 id,先建的在前 |
| 建议用整十 | 100、90、80,方便以后插队 |
改完怎么生效:
- 进「缓存与维护」
- 点「重建缓存」
- 刷新前台
顺序没变?→ 缓存没清。去「缓存与维护」点一下
怎么把栏目从导航里藏起来#
作用:页面还在,只是导航上不显示。
步骤:
- 进「栏目管理」
- 点这个栏目后面的「编辑」
- 状态改成「隐藏」
- 点「保存」
隐藏 ≠ 删掉。
隐藏只是导航上没有,地址照样能打开。
适合:活动落地页、只从广告进来的页。
真要关掉页面:删栏目,或者把栏目下的内容全下线。怎么给栏目配图#
作用:列表卡片有图,栏目页头有横幅。
步骤:
- 进「栏目管理」→「编辑」
- 拉到最下面「栏目配图」
- 点「选择图片」上传
- 点「保存」
| 上传框 | 用在哪 | 建议尺寸 |
|---|---|---|
| 缩略图 | 列表卡片、搜索结果 | 400×400 以内 |
| 横幅图 | 栏目页头背景 | 1600×400 |
默认主题已经接好了,传完刷新就能看到:
| 传的 | 前台出现在 |
|---|---|
| 横幅图 | 栏目页最上面的页头背景 |
| 缩略图 | 页头面包屑下面的小图 |
图片地址只能用:
站内路径(以 / 开头),或者 http(s) 完整地址。
少写开头的斜杠会保存失败,这是故意的。
从「文件管理」里复制的地址一定是对的。怎么给栏目换模板#
作用:同一个模型,不同栏目用不同版式。
步骤:
- 进「栏目管理」→「编辑」
- 找到「列表模板」或「详情模板」
- 填模板文件名(不带
.html) - 点「保存」
| 输入框 | 填什么 | 结果 |
|---|---|---|
| 列表模板 | grid | 用 view/主题/node/grid.html |
| 详情模板 | news | 用 view/主题/article/news.html |
例子:
| 栏目 | 列表模板 | 效果 |
|---|---|---|
| 产品中心 | grid | 网格版式 |
| 案例 | masonry | 瀑布流 |
| 新闻 | 不填 | 用默认列表 |
只填文件名,不带 .html,不带目录。
找不到文件会自动用默认模板,不会白屏。
优先级:
内容自己的「内容模板」> 栏目的详情模板 > 默认模板模板没生效?→ 看 怎么换模板
导航是怎么出来的#
页头那排导航,现在由「导航组」决定,不是直接按栏目树排。
想在页头显示哪些栏目、叫什么名字、要不要加外链、做不做二级,都在后台「导航管理」里配。
最省事的用法:
- 后台「内容」→「导航管理」,新建一个导航组
- 把要显示的栏目放进去
- 勾「设为默认组」
- 前台页头就用这一套
想让不同大栏目显示不同导航:在「栏目编辑」里给顶级栏目选「导航组」。
详细步骤 → 看 导航组
页头模板里用的是 $primary_nav:
{loop $primary_nav as $nav}
<li>
<a href="{$nav.url}">{$nav.name}</a>
{if !empty($nav.children)}
<ul>
{loop $nav.children as $sub}
<li><a href="{$sub.url}">{$sub.name}</a></li>
{/loop}
</ul>
{/if}
</li>
{/loop}页脚 / 侧边栏想按栏目树列,继续用 $nodes:
{loop $nodes as $nav}
{if in_array($nav.slug, ['about', 'contact', 'faq'])}
<a href="/list/{$nav.slug}">{$nav.name}</a>
{/if}
{/loop}模板语法记不住?→ 看 模板标签速查
栏目页模板里能拿到什么#
| 变量 | 是什么 |
|---|---|
$node | 当前栏目:名称、slug、描述、配图 |
$model | 当前栏目绑的模型 |
$list | 本页内容列表 |
$pager | 分页信息 |
$primary_nav | 页头导航(导航组驱动,含二级与外链) |
$nodes | 栏目树(页脚 / 侧边栏用) |
$hot | 本页最热 5 条 |
$tags | 本页内容的标签 |
$seo | 标题、关键词、描述 |
常用写法:
{* 栏目描述 *}
{if !empty($node.description)}
<p>{$node.description}</p>
{/if}
{* 分页,直接用内置的 *}
{include common/pager}分页两个规则:
1) 翻页链接用 ?page=N,不是 /list/xxx/2
2) 页码用 $pager.pages,不要写 range(1, $pager.last_page)
页多了会生成巨大的空白 HTML,页面会很慢。常见问题#
| 问题 | 怎么办 |
|---|---|
| 栏目页 404 | 看 slug 是不是空的、模型有没有选、内容是不是全是草稿 |
| 导航顺序乱 | 排序值越大越靠前。批量改成 100、90、80 |
| 删了栏目,内容去哪了 | 内容还在,但进不了任何列表页。删之前先移走 |
| 想让栏目只给会员看 | 在模板里判断,或用会员插件的 VIP 功能 |
只给会员看的写法:
{if !empty($user) && $user.level >= 2}
{$article.content|raw}
{else}
<div>本节内容仅会员可见,<a href="/member/vip">开通会员</a></div>
{/if}下一步#
没找到答案?
在后台「缓存与维护 → 系统体检」里看环境是否正常;仍无解就打开
server_debug.php 复现一次,页面会直接告诉你异常文件与行号。