第一部分:Destoon 调用基础

在开始之前,你需要了解几个核心概念:

destoon调用教程
(图片来源网络,侵删)
  1. 模板文件: Destoon 网站的页面内容主要由 PHP 模板文件(位于 template/ 目录下)构成,你编辑这些 .htm 文件来设计网站的前端界面。
  2. 调用标签: 这些是 Destoon 的特殊语法,以大括号 包裹,当模板被解析时,Destoon 引擎会读取这些标签,并替换成从数据库中查询到的实际内容。
  3. 核心对象:
    • $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 &copy; {$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')}

模板文件 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}

第四部分:常见问题与调试

为什么调用不出来?

  • 检查语法: 确保标签 正确,没有拼写错误。
  • 检查条件: moduleidcatid 是否正确?可以在后台“模块管理”和“分类管理”中查看。
  • 检查数据: 确保对应模块和分类下确实有数据。
  • 检查缓存: Destoon 有强大的缓存机制,修改模板后,需要到后台“更新缓存”才能看到效果,或者你在调用标签里把缓存设为 0 (list(..., 0)) 来临时禁用缓存。

如何查看 Destoon 的底层 SQL 语句?

这对于调试非常有用,在 config/config.inc.php 文件中,找到以下行并取消注释:

// $db->debug = 1; // 开启数据库调试

开启后,Destoon 会在页面底部打印出所有执行的 SQL 语句,你可以通过分析 SQL 来判断你的调用条件是否正确。

如何调用自定义字段?

如果你的模块添加了自定义字段(如“规格”、“产地”等),调用方式与普通字段一样。 假设你添加了一个名为 guige 的自定义字段:

{loop list('moduleid=2', 5, 'id DESC', 1) $t}
    <h3>{$t['title']}</h3>
    <p>规格:{$t['guige']}</p> <!-- 直接调用字段名即可 -->
{/loop}

Destoon 的调用并不复杂,核心在于理解并熟练运用 list()category_select() 这两个最强大的函数,记住以下步骤:

  1. 确定需求: 我要调用什么模块/分类下的什么信息?
  2. 选择函数: 是调用信息列表用 list(),还是调用分类用 category_select()
  3. 编写条件: 正确填写 moduleid, catid, 排序和数量等参数。
  4. 循环输出: 使用 {loop}...{/loop} 遍历数据,并用 $t['字段名'] 输出内容。
  5. 调试优化: 利用调试功能和缓存设置,确保调用结果正确。

多练习,多看官方默认模板的写法,很快就能掌握 Destoon 的调用技巧。