[fastadmin] 第三十四篇 FastAdmin 商城模块标签使用详解
FastAdmin 商城模块标签使用详解
一、标签基本语法
1.1 基础语法格式
{shop:goodslist flag="参数值" id="变量名" row="数量"}
<!-- 循环内容 -->
{/shop:goodslist}
1.2 常用参数说明
flag
: 商品标记筛选id
: 循环变量名row
: 显示数量
1.3 flag 参数配置
在系统配置内,也可以自己定义配置文件和项目
具体代码实现在这里:
二、标签使用示例
2.1 基础用法
<!-- 获取推荐商品 -->
{shop:goodslist flag="recommend" id="goods" row="4"}
<div class="goods-item">
<img src="{$goods.image|cdnurl}" alt="{$goods.title}">
<h3>{$goods.title}</h3>
<p>¥{$goods.price}</p>
</div>
{/shop:goodslist}
2.2 多条件筛选
<!-- 获取推荐且热销的商品 -->
{shop:goodslist flag="recommend,hot" id="goods" row="4"}
<!-- 循环内容 -->
{/shop:goodslist}
2.3 常用 flag 参数值
recommend
: 推荐商品hot
: 热销商品new
: 新品discount
: 特价商品flag
: 可组合使用,用逗号分隔
三、代码实现原理
3.1 标签解析位置
文件路径:application/common/taglib/Shop.php
class Shop extends TagLib
{
protected $tags = [
'goodslist' => ['attr' => 'flag,id,row', 'close' => 1]
];
public function tagGoodslist($tag, $content)
{
$id = $tag['id'];
$empty = isset($tag['empty']) ? $tag['empty'] : '';
$key = !empty($tag['key']) ? $tag['key'] : 'i';
$mod = isset($tag['mod']) ? $tag['mod'] : '2';
// 处理参数
$params = [];
foreach ($tag as $k => & $v) {
$origin = $v;
if (in_array($k, ['category', 'condition', 'tags'])) {
$this->autoBuildVar($v);
}
$v = $origin == $v ? '"' . $v . '"' : $v;
$params[] = '"' . $k . '"=>' . $v;
}
// 生成查询代码
$var = Random::alnum(10);
$parse = '<?php ';
$parse .= '$__' . $var . '__ = \addons\shop\model\Goods::getGoodsList([' . implode(',', $params) . ']);';
$parse .= ' ?>';
$parse .= '{volist name="$__' . $var . '__" id="' . $id . '" empty="' . $empty . '" key="' . $key . '" mod="' . $mod . '"}';
$parse .= $content;
$parse .= '{/volist}';
$parse .= '{php}$__LASTLIST__=$__' . $var . '__;{/php}';
return $parse;
}
}
3.2 商品查询实现
文件路径:addons/shop/model/Goods.php
namespace addons\shop\model;
class Goods extends Model
{
public static function getGoodsList($params)
{
$query = self::where('status', 'normal');
// 处理 flag 参数
if (isset($params['flag'])) {
$flags = explode(',', $params['flag']);
foreach ($flags as $flag) {
$query->where($flag, 1);
}
}
// 处理显示数量
if (isset($params['row'])) {
$query->limit(intval($params['row']));
}
return $query->select();
}
}
四、标签渲染流程
模板解析:
- 识别
{shop:goodslist}
标签 - 调用
tagGoodslist
方法处理
- 识别
参数处理:
- 解析标签参数(flag、row等)
- 转换为查询条件
数据查询:
- 调用
Goods::getGoodsList
- 根据条件筛选商品
- 调用
结果渲染:
- 循环输出商品数据
- 替换模板变量
五、使用注意事项
flag 参数组合:
- 多个标记使用逗号分隔
- 组合查询是”与”的关系
性能优化:
- 合理设置 row 数量
- 适当使用缓存
数据完整性:
- 确保商品字段完整
- 处理空值情况
六、实际应用案例
6.1 首页推荐商品
<div class="recommend-section">
{shop:goodslist flag="recommend" id="goods" row="4"}
<div class="goods-item">
<a href="{$goods.url}">
<img src="{$goods.image|cdnurl}" alt="{$goods.title}">
<div class="info">
<h3>{$goods.title}</h3>
<div class="price">
<span class="current">¥{$goods.price}</span>
<span class="original">¥{$goods.marketprice}</span>
</div>
</div>
</a>
</div>
{/shop:goodslist}
</div>
6.2 热销新品组合
<div class="hot-new-section">
{shop:goodslist flag="hot,new" id="goods" row="6"}
<div class="goods-card">
<!-- 商品展示内容 -->
</div>
{/shop:goodslist}
</div>
总结
FastAdmin 商城模块的标签系统提供了灵活的商品列表获取方式,通过简单的标签语法就能实现复杂的商品筛选和展示功能。理解其实现原理对于二次开发和功能扩展都很有帮助。
这篇博客详细介绍了 FastAdmin 商城模块标签的使用方法和实现原理,希望对你有帮助!如果需要补充或修改,请告诉我。
本作品采用《CC 协议》,转载必须注明作者和本文链接