本文档详细列出了在 Smarty 模板中可用的所有变量、标签和自定义函数,方便前端开发人员查阅。
1. 全局标签 (所有页面可用)
这些标签在 header.html, footer.html, sidebar.html 以及任何内容页中均可直接使用。
标签变量 | 说明 | 示例 / 备注 |
|---|---|---|
| 自适应标题 |
|
| 自适应关键词 |
|
| 自适应描述 |
|
| 自适应分享图 |
|
| 网站名称 |
|
| 网站主域名 |
|
| ICP 备案号 |
|
| 公安备案号 |
|
| 公安备案链接 | 通常为 |
| 联系人 |
|
| 座机/电话 |
|
| 手机号码 |
|
| 联系邮箱 |
|
| 联系地址 |
|
| 客服 QQ |
|
| 微信二维码 URL |
|
| 网站 Logo URL |
|
| 网站 Favicon URL |
|
| 网站根地址 (带协议) |
|
| 当前页面完整 URL |
|
| 当前模板资源路径 |
|
| 当前年份 |
|
2. 导航与菜单
导航数据在所有页面自动加载,无需额外查询。
主导航 ($navigation)
$navigation 是一个树状数组,支持二级下拉菜单。
<ul>
{foreach $navigation as $nav}
<li class="{if $nav.active}active{/if}">
<a href="{$nav.url}" target="{if $nav.target_blank}_blank{/if}">
{$nav.title}
</a>
<!-- 二级菜单 -->
{if !empty($nav.children)}
<ul>
{foreach $nav.children as $sub}
<li class="{if $sub.active}active{/if}">
<a href="{$sub.url}">{$sub.title}</a>
</li>
{/foreach}
</ul>
{/if}
</li>
{/foreach}
</ul>其他分类列表
系统预置了以下分类变量,可直接循环:
{$links}: 友情链接列表{$banners}: 轮播图列表{$products}: 产品分类列表 (一级){$articles}: 文章分类列表 (一级)
友情链接示例:
<div class="links">
{foreach $links as $link}
<a href="{$link.url}" target="_blank">
{if $link.image_url}<img src="{$link.image_url}">{/if}
{$link.title}
</a>
{/foreach}
</div>3. 内容调用标签 (万能标签)
使用 {kzb_content} 标签可以在任何位置调用指定的内容列表。
参数说明
参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| string |
| 内容类型: |
| int |
| 显示数量 |
| int |
| 指定分类ID,不填则显示所有 |
| bool |
| 是否只显示推荐内容 ( |
| string |
| 排序字段: |
| string |
| 排序方式: |
| string |
| 必填,将结果赋值给指定变量名 |
示例 1: 调用最新 5 篇推荐新闻
{kzb_content type="article" is_featured=1 limit=5 assign="hot_news"}
<ul>
{foreach $hot_news as $news}
<li>
<a href="{$news.link}" title="{$news.title}">
<span class="date">{$news.post_time|date_format:"%Y-%m-%d"}</span>
{$news.title|truncate:30:"..."}
</a>
</li>
{/foreach}
</ul>示例 2: 调用 8 个最新产品 (带图片)
{kzb_content type="product" limit=8 orderby="post_time" assign="new_products"}
<div class="product-grid">
{foreach $new_products as $p}
<div class="item">
<a href="{$p.link}">
<img src="{$p.cover_image|default:'/static/no-image.jpg'}" alt="{$p.title}">
<h3>{$p.title}</h3>
<p class="price">¥ {$p.price}</p>
</a>
</div>
{/foreach}
</div>4. 分页列表标签
使用 {kzb_pagelist} 标签可以在自定义页面实现分页功能。
注意: 在标准的
article-list.html和product-list.html模板中,控制器已经默认注入了分页数据{$contents},通常不需要手动调用此标签。此标签主要用于在首页或特殊单页中实现分页块。
参数说明
同 {kzb_content},额外增加:
参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| int | 自动获取 | 当前页码,默认自动从 URL 参数 |
| string |
| 赋值变量名 |
返回数据结构
返回的变量是一个数组,包含:
items: 内容列表 (数组)total: 总记录数per_page: 每页数量current_page: 当前页码last_page: 总页数has_more: 是否有下一页 (bool)next_page_url: 下一页 URL 参数 (如?page=2)prev_page_url: 上一页 URL 参数
示例: 手动实现分页列表
{kzb_pagelist type="article" limit=10 assign="news_data"}
<!-- 列表部分 -->
<div class="list">
{foreach $news_data.items as $item}
<article>
<h2><a href="{$item.link}">{$item.title}</a></h2>
<p>{$item.summary}</p>
</article>
{/foreach}
</div>
<!-- 分页条部分 -->
<div class="pagination">
{if $news_data.has_prev}
<a href="{$news_data.prev_page_url}">上一页</a>
{/if}
<span>第 {$news_data.current_page} / {$news_data.last_page} 页</span>
{if $news_data.has_more}
<a href="{$news_data.next_page_url}">下一页</a>
{/if}
</div>5. 页面级变量 (特定页面可用)
文章/产品详情页 (article.html, product.html)
变量 | 说明 |
|---|---|
| 内容 ID |
| 标题 |
| 正文内容 (HTML) |
| 关键词 |
| 描述/摘要 |
| 封面图 URL |
| 发布时间 |
| 浏览量 |
| 价格 (仅产品) |
| 原价 (仅产品) |
| 所属分类名称 |
| 所属分类别名 |
| 所属分类 ID |
| 规格参数 (JSON/Array, 仅产品) |
| 图库 (JSON/Array, 仅产品) |
| 上一篇 (包含 title, url) |
| 下一篇 (包含 title, url) |
| 面包屑导航数据 |
分类列表页 (article-list.html, product-list.html)
变量 | 说明 |
|---|---|
| 分类标题 |
| 分类描述 |
| 分类图片 |
| 当前页的内容列表 (Array) |
| 当前页码 |
| 面包屑导航数据 |
单页 (page.html)
变量 | 说明 |
|---|---|
| 单页标题 |
| 单页内容 |
| 别名 (如 about, contact) |
6. 特殊页面模块 (page.html)
系统为以下特殊 slug 的页面自动注入了开关变量。您可以在模板中使用 {if $var}...{/if} 来判断是否显示特定模块。
页面 Slug | 注入变量 | 推荐用途 |
|---|---|---|
|
| 显示联系方式、地图、表单 |
|
| 显示关于我们介绍 |
|
| 显示留言板输入框 |
|
| 显示常见问题列表 |
|
| 显示网站地图 |
|
| 显示友情链接列表 |
示例用法:
<!-- page.html -->
<div class="page-container">
<h1>{$page.title}</h1>
<!-- 1. 默认内容区域 (编辑器内容) -->
<div class="content">
{$page.content}
</div>
<!-- 2. 特殊功能模块 -->
<!-- 联系我们模块 -->
{if $show_contact_block}
<div class="contact-info">
<p>电话: {$site.contact_tel}</p>
<p>地址: {$site.contact_address}</p>
<!-- 这里可以放百度地图插件代码 -->
</div>
{/if}
<!-- 留言板模块 -->
{if $show_message_board}
<form action="/comment/submit" method="post">
<input type="hidden" name="type" value="page">
<input type="hidden" name="id" value="{$page.id}">
<textarea name="content" placeholder="请输入您的留言..."></textarea>
<button type="submit">提交留言</button>
</form>
{/if}
<!-- 友情链接模块 -->
{if $show_link_block}
<ul class="friend-links">
{foreach $links as $link}
<li><a href="{$link.url}" target="_blank">{$link.title}</a></li>
{/foreach}
</ul>
{/if}
<!-- 网站地图模块 -->
{if $show_sitemap_block}
<div class="sitemap">
<h3>产品分类</h3>
<ul>
{foreach $sitemap_data.products as $cat}
<li><a href="/{$cat.slug}/">{$cat.title}</a></li>
{/foreach}
</ul>
</div>
{/if}
</div>7. 面包屑导航示例
通用面包屑代码,适用于所有详情页和列表页:
<!-- 只有当面包屑层级大于1时才显示 -->
{if $breadcrumbs|count > 1}
<nav class="breadcrumbs">
{foreach $breadcrumbs as $crumb}
{if !$crumb@last}
<a href="{$crumb.url}">{$crumb.title}</a> >
{else}
<span>{$crumb.title}</span>
{/if}
{/foreach}
</nav>
{/if}文档更新日期: {$smarty.now|date_format:"%Y-%m-%d"}