SaaS 建站系统 - 模板标签开发指南

本文档详细列出了在 Smarty 模板中可用的所有变量、标签和自定义函数,方便前端开发人员查阅。


1. 全局标签 (所有页面可用)

这些标签在 header.html, footer.html, sidebar.html 以及任何内容页中均可直接使用。

标签变量

说明

示例 / 备注

{$title}

自适应标题 
首页显示站名,内页显示"页面标题 - 站名"

<title>{$title}</title>

{$keywords}

自适应关键词 
优先显示内容关键词,否则显示站点关键词

<meta name="keywords" content="{$keywords}">

{$description}

自适应描述 
优先显示内容摘要,否则显示站点描述

<meta name="description" content="{$description}">

{$og_image}

自适应分享图 
优先显示内容封面,否则显示 Logo

<meta property="og:image" content="{$og_image}">

{$site.name}

网站名称

{$site.name}

{$site.domain}

网站主域名

{$site.domain}

{$site.icp_filing}

ICP 备案号

<a href="https://beian.miit.gov.cn/">{$site.icp_filing}</a>

{$site.pl_filing}

公安备案号

{$site.pl_filing}

{$site.pl_link}

公安备案链接

通常为 http://www.beian.gov.cn

{$site.contact_name}

联系人

{$site.contact_name}

{$site.contact_tel}

座机/电话

{$site.contact_tel}

{$site.contact_mobile}

手机号码

{$site.contact_mobile}

{$site.contact_email}

联系邮箱

{$site.contact_email}

{$site.contact_address}

联系地址

{$site.contact_address}

{$site.contact_qq}

客服 QQ

{$site.contact_qq}

{$site.wechat_qr_url}

微信二维码 URL

<img src="{$site.wechat_qr_url}">

{$site.logo_url}

网站 Logo URL

<img src="{$site.logo_url}">

{$site.favicon_url}

网站 Favicon URL

<link rel="icon" href="{$site.favicon_url}">

{$base_url}

网站根地址 (带协议)

{$base_url} (如 https://example.com)

{$current_url}

当前页面完整 URL

<link rel="canonical" href="{$current_url}">

{$theme_url}

当前模板资源路径

<link rel="stylesheet" href="{$theme_url}/css/style.css">

{$current_year}

当前年份

© {$current_year} {$site.name}


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} 标签可以在任何位置调用指定的内容列表。

参数说明

参数

类型

默认值

说明

type

string

article

内容类型: article (文章), product (产品), page (单页)

limit

int

10

显示数量

cate_id

int

null

指定分类ID,不填则显示所有

is_featured

bool

null

是否只显示推荐内容 (1=推荐, 0=不推荐)

orderby

string

post_time

排序字段: post_time, view_count, sort_order

sort

string

DESC

排序方式: DESC (降序), ASC (升序)

assign

string

null

必填,将结果赋值给指定变量名

示例 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.htmlproduct-list.html 模板中,控制器已经默认注入了分页数据 {$contents},通常不需要手动调用此标签。此标签主要用于在首页或特殊单页中实现分页块。

参数说明

{kzb_content},额外增加:

参数

类型

默认值

说明

page

int

自动获取

当前页码,默认自动从 URL 参数 page 获取

assign

string

paged_data

赋值变量名

返回数据结构

返回的变量是一个数组,包含:

  • 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)

变量

说明

{$content.id}

内容 ID

{$content.title}

标题

{$content.content}

正文内容 (HTML)

{$content.keywords}

关键词

{$content.description}

描述/摘要

{$content.cover_image}

封面图 URL

{$content.post_time}

发布时间

{$content.view_count}

浏览量

{$content.price}

价格 (仅产品)

{$content.original_price}

原价 (仅产品)

{$content.cate_name}

所属分类名称

{$content.cate_slug}

所属分类别名

{$content.cate_id}

所属分类 ID

{$content.specs}

规格参数 (JSON/Array, 仅产品)

{$content.gallery_images}

图库 (JSON/Array, 仅产品)

{$prevContent}

上一篇 (包含 title, url)

{$nextContent}

下一篇 (包含 title, url)

{$breadcrumbs}

面包屑导航数据

分类列表页 (article-list.html, product-list.html)

变量

说明

{$category.title}

分类标题

{$category.description}

分类描述

{$category.image_url}

分类图片

{$contents}

当前页的内容列表 (Array)

{$page}

当前页码

{$breadcrumbs}

面包屑导航数据

单页 (page.html)

变量

说明

{$page.title}

单页标题

{$page.content}

单页内容

{$page.slug}

别名 (如 about, contact)


6. 特殊页面模块 (page.html)

系统为以下特殊 slug 的页面自动注入了开关变量。您可以在模板中使用 {if $var}...{/if} 来判断是否显示特定模块。

页面 Slug

注入变量

推荐用途

contact

{$show_contact_block}

显示联系方式、地图、表单

about

{$show_about_block}

显示关于我们介绍

message

{$show_message_board}

显示留言板输入框

faq

{$show_faq_block}

显示常见问题列表

sitemap

{$show_sitemap_block}

显示网站地图

link

{$show_link_block}

显示友情链接列表

示例用法:

<!-- 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> &gt;
        {else}
            <span>{$crumb.title}</span>
        {/if}
    {/foreach}
</nav>
{/if}

文档更新日期: {$smarty.now|date_format:"%Y-%m-%d"}

首页 业务 电话 微信
×
微信沟通
微信二维码
长按识别二维码
添加微信