第一部分:Destoon 调用基础
在开始之前,你需要了解几个核心概念:

- 模板文件: Destoon 网站的页面内容主要由 PHP 模板文件(位于
template/目录下)构成,你编辑这些.htm文件来设计网站的前端界面。 - 调用标签: 这些是 Destoon 的特殊语法,以大括号 包裹,当模板被解析时,Destoon 引擎会读取这些标签,并替换成从数据库中查询到的实际内容。
- 核心对象:
$DT: 全局配置对象,可以获取网站的基本设置,如网站名称 ($DT['sitename'])、网站地址 ($DT['siteurl']) 等。$db: 数据库操作对象,用于执行 SQL 查询,高级调用会用到它。$MODULE: 模块数组,包含了所有已安装模块的信息,如模块ID、名称、目录等。$CATEGORY: 分类数组,包含了所有分类的信息,如分类ID、名称、上级分类等。$COMPANY: 公司信息对象(主要用于企业模块)。$ITEM: 信息对象(主要用于信息模块)。
第二部分:最常用的调用标签
以下是最基础、最常用的调用,90% 的网站需求都可以通过它们实现。
调用网站基本信息
通常放在页头或页脚,如网站名称、Logo、版权信息等。
<!-- 网站名称 -->
{$DT['sitename']}
<!-- 网站Logo,通常会判断是图片还是文字 -->
{if $DT['logo']}
<a href="{$MODULE[1]['link']}"><img src="{$DT['logo']}" alt="{$DT['sitename']}" /></a>
{else}
<a href="{$MODULE[1]['link']}">{$DT['sitename']}</a>
{/if}
<!-- 网站版权信息 -->
{$DT['icp']} | Copyright © {$DT['copyyear']} {$DT['sitename']} All Rights Reserved.
调用导航菜单
Destoon 的导航分为“主导航”和“自定义导航”,主导航通常根据模块自动生成。
<!-- 调用主导航 -->
{loop $MODULE $m}
{if $m['ismenu']}
<a href="{$m['link']}">{$m['name']}</a>
{/if}
{/loop}
<!-- 调用自定义导航 (通常在后台设置) -->
{loop $nav $n}
<a href="{$n['link']}">{$n['title']}</a>
{/loop}
调用分类信息
这是 Destoon 的核心功能之一,用于展示产品、供求、资讯等模块的分类。
<!-- 调用指定模块(如产品模块,moduleid=2)的一级分类 -->
{loop category_select(2, 0) $c}
<a href="{$c['link']}">{$c['catname']}</a>
{/loop}
<!-- 调用指定分类(如分类ID=5)的子分类 -->
{loop category_select(2, 5) $c}
<a href="{$c['link']}">{$c['catname']}</a>
{/loop}
调用信息列表
这是最频繁使用的调用,用于首页、列表页、频道页等。
基本语法:
{loop list(条件, 数量, 排序, 缓存) $t}
- 条件: 可以是模块ID、分类ID、关键词等。
moduleid=2(产品模块),catid=5(分类ID为5),addtime>...等。 - 数量: 要显示多少条信息。
- 排序: 按什么字段排序,常用
id DESC(最新发布),hits DESC(点击最高),level DESC(级别最高)。 - 缓存: 是否开启缓存,
1为开启,0为关闭,开启可以提升性能。
示例:
<!-- 调用产品模块(moduleid=2)的最新8条产品 -->
{loop list('moduleid=2', 8, 'id DESC', 1) $t}
<li>
<a href="{$t['link']}">
<img src="{thumb($t['thumb'], 100, 100)}" alt="{$t['title']}" />
<h3>{$t['title']}</h3>
</a>
</li>
{/loop}
<!-- 调用供求模块(moduleid=3)中,分类ID为10下的,标题包含“采购”的,5条点击最高的信息 -->
{loop list("moduleid=3 AND catid=10 AND title LIKE '%采购%'", 5, 'hits DESC', 1) $t}
<a href="{$t['link']}">{$t['title']}</a>
{/loop}
常用信息字段说明:
$t['title']: 信息标题$t['link']: 信息链接$t['thumb']: 缩略图地址thumb($t['thumb'], 宽, 高): 生成指定尺寸的缩略图,非常常用$t['addtime']: 发布时间 (时间戳)$t['hits']: 点击次数$t['level']: 信息级别$t['company']: 发布公司名称
调用公司列表
用于展示企业黄页中的公司。
基本语法:
{loop company_list(条件, 数量, 排序, 缓存) $c}
示例:
<!-- 调用最新的8家认证企业 -->
{loop company_list('level>1', 8, 'id DESC', 1) $c}
<dl>
<dt><a href="{$c['link']}"><img src="{thumb($c['logo'], 60, 60)}" alt="{$c['company']}" /></a></dt>
<dd><a href="{$c['link']}">{$c['company']}</a></dd>
</dl>
{/loop}
常用公司字段说明:
$c['company']: 公司名称$c['link']: 公司链接$c['logo']: 公司Logo$c['address']: 公司地址$c['tel']: 联系电话
第三部分:进阶调用技巧
当基础调用无法满足需求时,可以使用更高级的方法。
使用 $db 对象直接执行 SQL 查询
这种方法最灵活,可以直接写 SQL 语句,但需要你对 Destoon 的表结构有一定了解。
语法:
$db->query("SQL语句");
while ($r = $db->fetch_array($query)) { ... }
示例: 调用“产品模块”和“供应模块”中所有最新的10条信息。
{php
$query = $db->query("SELECT * FROM `destoon_product` UNION SELECT * FROM `destoon_supply` ORDER BY addtime DESC LIMIT 10");
while($r = $db->fetch_array($query)) {
// 注意:这里需要手动生成链接,因为 $r['link'] 不存在
$link = $MODULE[$r['moduleid']]['link'].'-'.$r['itemid'].'.html';
$title = $r['title'];
// ... 其他字段
}
{/php}
<a href="{$link}">{$title}</a>
注意:
- 直接操作 SQL 有一定风险,请确保语句正确。
- 需要手动处理链接、标题等字段,不如
list()函数方便。 - 强烈建议在
{php}...{/php}标签内使用,并注意变量作用域。
使用 include 引入公共模板
对于重复出现的代码块,如页头、页脚、侧边栏,可以使用 include 来复用,避免代码冗余。
<!-- 在首页模板 index.htm 中 -->
{include template('header', 'php')}
<div class="main">
<div class="left">
<!-- 左侧主要内容 -->
</div>
<div class="right">
{include template('side_right', 'php')} <!-- 引入右侧边栏模板 -->
</div>
</div>
{include template('footer', 'php')}
模板文件 在 这对于调试非常有用,在 开启后,Destoon 会在页面底部打印出所有执行的 SQL 语句,你可以通过分析 SQL 来判断你的调用条件是否正确。 如果你的模块添加了自定义字段(如“规格”、“产地”等),调用方式与普通字段一样。
假设你添加了一个名为 Destoon 的调用并不复杂,核心在于理解并熟练运用 多练习,多看官方默认模板的写法,很快就能掌握 Destoon 的调用技巧。side_right.htm 存放在 template/你的模板目录/ 下,你可以在其中编写固定的调用代码,
side_right.htm
<div class="side_box">
<h3>热门产品</h3>
{loop list('moduleid=2', 10, 'hits DESC', 1) $t}
<a href="{$t['link']}">{$t['title']}</a>
{/loop}
</div>
条件判断与循环
{loop} 循环内部,经常需要用到条件判断。{loop list('moduleid=2', 5, 'id DESC', 1) $t}
{if $t['thumb']}
<!-- 如果有缩略图,则显示图片 -->
<a href="{$t['link']}"><img src="{thumb($t['thumb'], 120, 90)}" /></a>
{else}
<!-- 如果没有缩略图,则显示默认图片或文字 -->
<a href="{$t['link']}"><img src="images/default.jpg" /></a>
{/if}
{if $t['level'] > 1}
<!-- 如果是VIP或收费信息,显示一个标记 -->
<span class="vip-tag">VIP</span>
{/if}
{/loop}
第四部分:常见问题与调试
为什么调用不出来?
moduleid 和 catid 是否正确?可以在后台“模块管理”和“分类管理”中查看。0 (list(..., 0)) 来临时禁用缓存。如何查看 Destoon 的底层 SQL 语句?
config/config.inc.php 文件中,找到以下行并取消注释:// $db->debug = 1; // 开启数据库调试
如何调用自定义字段?
guige 的自定义字段:{loop list('moduleid=2', 5, 'id DESC', 1) $t}
<h3>{$t['title']}</h3>
<p>规格:{$t['guige']}</p> <!-- 直接调用字段名即可 -->
{/loop}
list() 和 category_select() 这两个最强大的函数,记住以下步骤:
list(),还是调用分类用 category_select()?moduleid, catid, 排序和数量等参数。{loop}...{/loop} 遍历数据,并用 $t['字段名'] 输出内容。
