35DIR网站目录系统 - 模板标签使用说明文档
Version 2.0 - 详细完整版
═══════════════════════════════════════════════════════════════════════════════
【系统概述】
35dir系统采用Smarty模板引擎,提供强大的模板标签功能。本文档详细介绍所有可用的模板标签、
函数和变量,帮助开发者快速掌握模板开发技巧。
【模板引擎配置】
- 模板引擎:Smarty 3.x/4.x(支持版本升级)
- 标签分隔符:{# 和 #}(可在 source/include/smarty.php 中修改)
- 模板目录:themes/default/(前台)、themes/system/(后台)
- 编译目录:data/compile/
- 缓存目录:data/cache/
- 升级方法:覆盖 source/extend/smarty 目录即可
【标签语法规则】
1. 变量输出:{#$变量名#}
2. 函数调用:{#函数名(参数1, 参数2)#}
3. 循环语句:{#foreach from=数组 item=项目#}...{#/foreach#}
4. 条件语句:{#if 条件#}...{#else#}...{#/if#}
5. 注释语法:{#* 这是注释 *#}
═══════════════════════════════════════════════════════════════════════════════
一、网站通用标签
═══════════════════════════════════════════════════════════════════════════════
【基础站点信息】
{#$site_root#} ─── 网站根目录路径(如:http://www.example.com/)
{#$site_name#} ─── 网站名称(后台设置的站点名称)
{#$site_title#} ─── 网站标题(浏览器标题栏显示)
{#$site_url#} ─── 网站完整URL地址
{#$site_keywords#} ─── 网站关键词(SEO用途)
{#$site_description#} ─── 网站描述信息(SEO用途)
{#$site_copyright#} ─── 网站版权信息(支持HTML代码)
{#$site_rss#} ─── RSS订阅链接
{#$site_path#} ─── 当前位置导航(面包屑导航)
【系统配置信息】
{#$cfg#} ─── 完整的系统配置数组(包含所有后台设置)
{#$cfg.参数名#} ─── 获取特定配置参数
{#$script_time#} ─── 页面执行时间和查询统计
{#$login_status#} ─── 用户登录状态信息
【使用示例】
{#$site_title#}
{#$site_copyright#}
═══════════════════════════════════════════════════════════════════════════════
二、网站函数标签
═══════════════════════════════════════════════════════════════════════════════
【1. 分类列表函数 - get_categories()】
函数原型:get_categories($cate_id = 0, $top_num = 0, $is_best = false)
参数说明:
- $cate_id:分类ID,默认0表示获取根分类,指定ID获取该分类下的子分类
- $top_num:显示数量,默认0表示显示全部,指定数字限制显示条数
- $is_best:是否只显示推荐分类,true显示推荐,false显示全部
返回字段:
- $cate_id:分类ID
- $cate_name:分类名称
- $cate_mod:分类模块(如webdir)
- $cate_childcount:子分类数量
- $cate_postcount:分类下网站数量
- $cate_link:分类链接地址
使用示例:
-
{#$cate.cate_name#}
({#$cate.cate_postcount#})
{#foreach from=get_categories(0, 10, false) item=cate#}
{#/foreach#}
【2. 网站列表函数 - get_websites()】
函数原型:get_websites($cate_id = 0, $top_num = 10, $is_pay = false, $is_best = false, $field = 'ctime', $order = 'desc')
参数说明:
- $cate_id:分类ID,0表示全部分类
- $top_num:显示数量,默认10条
- $is_pay:是否只显示付费网站
- $is_best:是否只显示推荐网站
- $field:排序字段(ctime-收录时间, views-浏览次数, instat-点入次数, outstat-点出次数)
- $order:排序方式(desc-降序, asc-升序)
返回字段:
- $web_id:网站ID
- $web_name:网站名称
- $web_url:网站URL
- $web_furl:格式化的URL
- $web_pic:网站缩略图
- $web_intro:网站简介
- $web_ai_intro:AI生成的简介
- $web_tags:网站标签数组
- $web_ctime:收录时间
- $web_utime:更新时间
- $web_views:浏览次数
- $web_grank:Google PageRank
- $web_brank:百度权重
- $web_srank:搜狗权重
- $web_arank:Alexa排名
- $web_link:网站详情页链接
- $cate_name:所属分类名称
使用示例:
{#foreach from=get_websites(0, 12, false, false, 'ctime', 'desc') item=site#}
{#/foreach#}
{#foreach from=get_websites(0, 8, false, true, 'views', 'desc') item=rec#}
{#$rec.web_name#}
{#/foreach#}
【3. 友情链接函数 - get_links()】
函数原型:get_links()
返回字段:
- $link_id:链接ID
- $link_name:链接名称
- $link_url:链接地址
- $link_logo:链接LOGO地址
使用示例:
友情链接
-
{#if $link.link_logo#}
{#else#}
{#$link.link_name#}
{#/if#}
{#foreach from=get_links() item=link#}
{#/foreach#}
【4. 数据归档函数 - get_archives()】
函数原型:get_archives()
返回格式:二维数组,年份->月份->网站数量
使用示例:
数据归档
{#foreach from=get_archives() key=year item=months#}
{#/foreach#}
【5. 广告代码函数 - get_adcode()】
函数原型:get_adcode($ad_id)
参数说明:
- $ad_id:广告位ID(后台广告管理中设置)
使用示例:
{#get_adcode(3)#}
【6. 自定义标签 - $label】
用法:{#$label.标签名称#}
说明:调用后台自定义标签管理中添加的标签内容
使用示例:
{#$label.google_analytics#}
{#$label.contact_info#}
【7. 站点统计 - $stat】
用法:{#$stat.统计项#}
可用统计项:
- category:分类总数
- website:网站总数(已审核)
- article:文章总数
- apply:待审核网站数
- vip:VIP网站数
- recommend:推荐网站数
- blacklist:黑名单网站数
- rejected:审核不通过网站数
- user:用户总数
- adver:广告总数
- link:友情链接总数
- feedback:反馈总数
- label:自定义标签总数
- page:单页总数
使用示例:
{#$stat.category#}
个分类
{#$stat.website#}
个网站
{#$stat.user#}
位用户
本站共收录 {#$stat.website#} 个网站,分布在 {#$stat.category#} 个分类中
其中推荐网站 {#$stat.recommend#} 个,VIP网站 {#$stat.vip#} 个
注册用户 {#$stat.user#} 位,待审核网站 {#$stat.apply#} 个
═══════════════════════════════════════════════════════════════════════════════
三、页面专用标签
═══════════════════════════════════════════════════════════════════════════════
【列表页通用标签】
适用页面:directory.html, update.html, archives.html, search.html
{#$weblist#} ─── 网站列表数组(包含分页后的网站数据)
{#$showpage#} ─── 分页导航HTML代码
使用示例:
{#foreach from=$weblist item=item name=list_website#}
PageRank:
{#$item.web_prank#}/10
AlexaRank:
{#$item.web_arank#}
人气指数:
{#$item.web_views#}
收录时间:
{#$item.web_utime#}
{#foreachelse#}
{#/foreach#}
{#$showpage#}
【首页专用标签 - index.html】
首页可以使用所有通用标签和函数标签,无特殊限制。
【分类页专用标签 - directory.html】
{#$category_name#} ─── 当前分类名称
{#$child_category#} ─── 当前分类下的子分类数组
子分类字段:
- $cate_id:分类ID
- $cate_name:分类名称
- $cate_postcount:分类下网站数量
- $cate_link:分类链接
使用示例:
{#$category_name#}
当前分类:{#$category_name#}
子分类
{#if $cate_id == $sub.cate_id#}
{#$sub.cate_name#} ({#$sub.cate_postcount#})
{#else#}
{#$sub.cate_name#} ({#$sub.cate_postcount#})
{#/if#}
{#/foreach#}
{#foreach from=$child_category item=sub#}
【更新页专用标签 - update.html】
{#$days#} ─── 当前选择的时间周期
{#$timescope#} ─── 时间范围选择数组
时间范围字段:
- $time_id:时间周期ID
- $time_text:时间周期名称(如:24小时内、3天内、1周内)
- $time_link:时间周期链接
使用示例:
最近更新
{#if $days == $time.time_id#}
{#$time.time_text#}
{#else#}
{#$time.time_text#}
{#/if#}
{#/foreach#}
{#foreach from=$timescope item=time key=k#}
【搜索页专用标签 - search.html】
{#$search_word#} ─── 搜索关键词
{#$search_type#} ─── 搜索类型(website-网站搜索, tags-标签搜索)
{#$total_found#} ─── 搜索结果总数
使用示例:
搜索结果
关键词:{#$search_word#},找到 {#$total_found#} 个相关网站
【网站详情页专用标签 - website.html】
{#$website#} ─── 当前网站的详细信息数组
网站详情字段:
- $web_id:网站ID
- $web_name:网站名称
- $web_url:网站URL
- $web_pic:网站缩略图
- $web_intro:网站简介
- $web_ai_intro:AI生成简介
- $web_tags:网站标签数组
- $web_ctime:收录时间
- $web_views:浏览次数
- $web_grank:Google PageRank
- $web_brank:百度权重
- $web_srank:搜狗权重
- $web_arank:Alexa排名
- $cate_name:所属分类
使用示例:
网站简介
{#$website.web_intro#}
{#if $website.web_ai_intro#}
AI智能简介
{#$website.web_ai_intro#}
{#/if#}
{#if $website.web_tags#}
{#/if#}
网站数据
Google PR
{#$website.web_grank#}/10
百度权重
{#$website.web_brank#}
搜狗权重
{#$website.web_srank#}
Alexa排名
{#$website.web_arank#}
═══════════════════════════════════════════════════════════════════════════════
四、Smarty内置标签
═══════════════════════════════════════════════════════════════════════════════
【循环控制】
{#foreach from=数组 item=项目 key=键名 name=循环名#}
{#if $smarty.foreach.循环名.first#}第一项{#/if#}
{#if $smarty.foreach.循环名.last#}最后一项{#/if#}
{#$smarty.foreach.循环名.iteration#}
{#$smarty.foreach.循环名.index#}
{#foreachelse#}
{#/foreach#}
【条件判断】
{#if 条件#}
{#elseif 其他条件#}
{#else#}
{#/if#}
【变量修饰符】
{#$变量|修饰符#}
{#$变量|修饰符:参数#}
常用修饰符:
- truncate:长度 - 截取字符串
- date_format:格式 - 格式化日期
- escape - HTML转义
- nl2br - 换行转
- strip_tags - 去除HTML标签
- upper - 转大写
- lower - 转小写
- capitalize - 首字母大写
使用示例:
{#$web_intro|truncate:100:"..."|escape#}
{#$web_ctime|date_format:"%Y-%m-%d %H:%M"#}
{#$web_name|upper#}
【包含文件】
{#include file="文件名.html"#}
{#include file="header.html" title="页面标题"#}
【赋值操作】
{#assign var="变量名" value="值"#}
{#assign var="current_time" value=$smarty.now#}
═══════════════════════════════════════════════════════════════════════════════
五、高级应用技巧
═══════════════════════════════════════════════════════════════════════════════
【1. 条件显示内容】
{#foreach from=get_websites(0, 10) item=site#}
{#$site.web_name#}
{#if $site.web_isbest#}推荐{#/if#}
{#if $site.web_ispay#}VIP{#/if#}
{#/foreach#}
【2. 多条件筛选】
{#assign var="tech_sites" value=get_websites(1, 8, false, true)#}
{#if $tech_sites#}
{#/if#}
【3. 数据统计显示】
{#foreach from=get_categories(0, 0, false) item=cate#}
{#if $cate.cate_postcount > 0#}
{#$cate.cate_name#}
{#$cate.cate_postcount#}
{#/if#}
{#/foreach#}
【4. 响应式布局】
{#assign var="site_count" value=12#}
{#* 移动端显示6个,桌面端显示12个 *#}
{#foreach from=get_websites(0, $site_count) item=site name=grid#}
{#if $smarty.foreach.grid.iteration % 3 == 0#}
{#/if#}
{#if $smarty.foreach.grid.iteration % 4 == 0#}
{#/if#}
{#if $smarty.foreach.grid.iteration % 6 == 0#}
{#/if#}
{#/foreach#}
【5. SEO优化】
{#if $category_name#}
{#assign var="page_title" value="`$category_name` - `$site_name`"#}
{#assign var="page_desc" value="`$category_name`分类下的优质网站推荐,包含`$stat.website`个精选网站"#}
{#else#}
{#assign var="page_title" value=$site_title#}
{#assign var="page_desc" value=$site_description#}
{#/if#}
{#$page_title#}
{#if $website#}
{#/if#}
【6. 缓存控制】
{#* 最新网站列表,缓存5分钟 *#}
{#assign var="cache_id" value="latest_sites_`$smarty.now|date_format:'%Y%m%d%H%i'`"#}
{#assign var="hot_cache" value="hot_sites_`$smarty.now|date_format:'%Y%m%d%H'`"#}
【7. 多语言支持】
{#assign var="lang" value=$smarty.get.lang|default:'zh'#}
{#if $lang == 'en'#}
{#assign var="site_title_lang" value=$cfg.site_title_en#}
{#else#}
{#assign var="site_title_lang" value=$cfg.site_title#}
{#/if#}
【8. 错误处理】
{#assign var="latest_sites" value=get_websites(0, 10)#}
{#if $latest_sites && count($latest_sites) > 0#}
{#foreach from=$latest_sites item=site#}
{#/foreach#}
{#else#}
暂无最新网站,请稍后再来查看。
{#/if#}
═══════════════════════════════════════════════════════════════════════════════
六、性能优化建议
═══════════════════════════════════════════════════════════════════════════════
【1. 合理使用缓存】
- 启用Smarty模板缓存:在 source/include/smarty.php 中设置
- 对于数据变化不频繁的页面,设置较长的缓存时间
- 使用 cache_id 区分不同的缓存版本
【2. 减少数据库查询】
- 在一个页面中,尽量减少函数调用次数
- 使用 assign 将函数结果赋值给变量,避免重复调用
- 合理设置函数参数,只获取需要的数据
示例:
{#assign var="hot_sites" value=get_websites(0, 8, false, true)#}
{#assign var="new_sites" value=get_websites(0, 10, false, false, 'ctime')#}
【3. 图片优化】
- 使用适当的图片尺寸
- 为图片添加 alt 属性
- 考虑使用懒加载
【4. 代码优化】
- 避免在循环中进行复杂计算
- 使用条件判断减少不必要的HTML输出
- 合理使用 strip 去除多余空白
═══════════════════════════════════════════════════════════════════════════════
七、常见问题解答
═══════════════════════════════════════════════════════════════════════════════
【Q1:如何修改模板标签分隔符?】
A:编辑 source/include/smarty.php 文件,修改以下两行:
$smarty->left_delimiter = "{#";
$smarty->right_delimiter = "#}";
【Q2:模板缓存如何清理?】
A:删除 data/cache/ 目录下的缓存文件,或在后台系统管理中清理缓存。
【Q3:如何在模板中调用自定义PHP函数?】
A:需要在相应的模块文件中定义函数,然后通过 $smarty->assign() 将结果传递给模板。
【Q4:为什么某些标签不显示内容?】
A:检查以下几点:
1. 标签语法是否正确
2. 数据是否存在
3. 权限设置是否正确
4. 缓存是否需要清理
【Q5:如何实现分页功能?】
A:使用 $weblist 和 $showpage 标签,系统会自动处理分页逻辑。
【Q6:如何自定义404页面?】
A:在模板目录中创建 404.html 文件,使用相应的模板标签。
═══════════════════════════════════════════════════════════════════════════════
八、版本更新说明
═══════════════════════════════════════════════════════════════════════════════
【Version 2.0 更新内容】
1. 新增AI智能简介字段 web_ai_intro
2. 增强网站违规检测功能
3. 优化搜索功能,支持标签搜索
4. 新增多种排序方式
5. 改进缓存机制
6. 增强SEO功能
【兼容性说明】
- 向下兼容旧版本模板
- 新增字段在旧模板中不会报错
- 建议升级模板以使用新功能
═══════════════════════════════════════════════════════════════════════════════
结语
═══════════════════════════════════════════════════════════════════════════════
本文档详细介绍了35DIR系统的所有模板标签和使用方法。在实际开发中,建议:
1. 先熟悉基础标签的使用
2. 根据页面需求选择合适的函数
3. 注意性能优化和缓存策略
4. 保持代码的可读性和维护性
5. 定期更新和备份模板文件
如有疑问,请参考Smarty官方文档或联系技术支持。
文档编写:95DIR开发团队
最后更新:2025年
版权所有:保留所有权利