[fastadmin] 第三十四篇 FastAdmin 商城模块标签使用详解
FastAdmin 商城模块标签使用详解
一、标签基本语法
1.1 基础语法格式
{shop:goodslist flag="参数值" id="变量名" row="数量"}<!-- 循环内容 -->
{/shop:goodslist}
1.2 常用参数说明
flag: 商品标记筛选id: 循环变量名row: 显示数量
1.3 flag 参数配置
在系统配置内,也可以自己定义配置文件和项目
![[fastadmin] 第三十四篇 FastAdmin 商城模块标签使用详解](https://i-blog.csdnimg.cn/img_convert/a5f57ffc3908e81d62787e18bdf923cd.png)
具体代码实现在这里:
![[fastadmin] 第三十四篇 FastAdmin 商城模块标签使用详解](https://i-blog.csdnimg.cn/img_convert/a40f75ac1fc41a121b5055fadcf76829.png)
![[fastadmin] 第三十四篇 FastAdmin 商城模块标签使用详解](https://i-blog.csdnimg.cn/img_convert/d59fe4ec699bbe13c98f651b8339e969.png)
二、标签使用示例
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 商城模块标签的使用方法和实现原理,希望对你有帮助!如果需要补充或修改,请告诉我。
相关文章:
[fastadmin] 第三十四篇 FastAdmin 商城模块标签使用详解
FastAdmin 商城模块标签使用详解 一、标签基本语法 1.1 基础语法格式 {shop:goodslist flag"参数值" id"变量名" row"数量"}<!-- 循环内容 --> {/shop:goodslist}1.2 常用参数说明 flag: 商品标记筛选id: 循环变量名row: 显示数量 1.…...
(2024,LLaVA-Bench (Wilder),LLaVA-NeXT,LLaMA3,Qwen-1.5,语言模型扩展)
LLaVA-NeXT: Stronger LLMs Supercharge Multimodal Capabilities in the Wild 目录 1. 简介 2. 探索大规模语言模型的能力极限 3. LLaVA-Bench (Wilder):日常生活视觉聊天基准 4. Benchmark 结果 1. 简介 我们通过引入近期更强大的开源大语言模型(…...
IPEX-LLM开发项目过程中的技术总结和心得
IPEX-LLM开发项目过程中的技术总结和心得 在人工智能快速发展的时代,高效地开发和部署大语言模型(LLM)已成为技术人员的必备技能。在我们的项目中,我们采用了 Intel Extension for PyTorch(简称 IPEX)和 L…...
HTTP/HTTPS ②-Cookie || Session || HTTP报头
这里是Themberfue 上篇文章介绍了HTTP报头的首行信息 本篇我们将更进一步讲解HTTP报头键值对的含义~~~ ❤️❤️❤️❤️ 报头Header ✨再上一篇的学习中,我们了解了HTTP的报头主要是通过键值对的结构存储和表达信息的;我们已经了解了首行的HTTP方法和UR…...
【软考】软件设计师
「学习路线」(推荐该顺序学习,按照先易后难排序) 1、上午题—计算机系统(5~6分)[1.8; ] 2、上午题—程序设计语言(固定6分)[1.9; ] 3、下午题—试题一(15分) 4、上午题—…...
K8s Pod OOMKilled,监控却显示内存资源并未打满
1. 问题现象 pod一直重启,通过grafana查看,发现内存使用率并没有100%。 2. 排查过程 2.1 describe查看pod最新一次的状态 可以明显看到,最近一次的重启就是因为内存不足导致的。 2.2 describe 查看node节点状态 找到原因了,原来…...
C++ 原子变量
C 原子变量 文章目录 C 原子变量1. 原子变量是什么?2. 原子操作的特点3. 原子变量的作用1. 多线程安全的共享数据访问2. 替代锁机制3. 实现低级同步算法 4. 原子变量的常见操作5. 内存顺序(Memory Ordering)内存顺序控制在原子变量中的作用如…...
linux网络 | http结尾、理解长连接短链接与cookie
前言:本节是http章节的最后一部分,主要解释一些小概念。讲解到了HTTP的方法,表单, 重定向等等。 现在废话不多说, 开始我们的学习吧。 ps:本节内容都是概念, 知道就行, 友友们放心观…...
金融项目实战 02|接口测试分析、设计以及实现
目录 ⼀、接口相关理论 二、接口测试 1、待测接口:投资业务 2、接口测试流程 3、设计用例理论 1️⃣设计方法 2️⃣工具 4、测试点提取 5、测试用例 ⼀、接口相关理论 1、ui功能测试和接⼝测试那个先执⾏?为什么? 结论:…...
二、智能体强化学习——深度强化学习核心算法
2.1 DQN 系列及其改进 2.1.1 背景与动机 在经典强化学习中(如 Q-Learning),如果状态空间或动作空间非常大乃至连续,那么用一个表格来存储 Q ( s , a ) Q(s,a) Q(s,a) 不再可行。为了解决该问题,可以使用神经网络来逼…...
Mysql--架构篇--存储引擎InnoDB(内存结构,磁盘结构,存储结构,日志管理,锁机制,事务并发控制等)
MySQL是一个多存储引擎的数据库管理系统,支持多种不同的存储引擎。每种存储引擎都有其独特的特性、优势和适用场景。选择合适的存储引擎对于优化数据库性能、确保数据完整性和满足业务需求至关重要。 注:在同一个Mysql的数据库中,对于不同的表…...
JVM实战—13.OOM的生产案例
大纲 1.每秒仅上百请求的系统为何会OOM(RPC超时时间设置过长导致QPS翻几倍) 2.Jetty服务器的NIO机制如何导致堆外内存溢出(S区太小 禁NIO的显式GC) 3.一次微服务架构下的RPC调用引发的OOM故障排查实践(MAT案例) 4.一次没有WHERE条件的SQL语句引发的OOM问题排查实践(使用MA…...
client-go 的 QPS 和 Burst 限速
1. 什么是 QPS 和 Burst ? 在 kubernetes client-go 中,QPS 和 Burst 是用于控制客户端与 Kubernetes API 交互速率的两个关键参数: QPS (Queries Per Second) 定义:表示每秒允许发送的请求数量,即限速器的平滑速率…...
使用docker-compose安装Redis的主从+哨兵模式
必看 本文是一主二从一哨兵模式;其余的单机/集群/多哨兵模式的话,不在本文... 本文的环境主要是:应用app在本地,redis在云服务器上; 图解 图如下:这个图很重要; 之所以要这样画图࿰…...
数据结构(Java版)第七期:LinkedList与链表(二)
专栏:数据结构(Java版) 个人主页:手握风云 一、链表的实现(补) 接上一期,下面我们要实现删除所有值为key的元素,这时候有的老铁就会想用我们上一期中讲到的remove方法,循环使用remove方法&#…...
ant-design-vue 1.X 通过id获取a-input组件失败
1.ant-design-vue 1.X 问题描述 当我在a-form组件中,以v-decorator指令绑定表单组件时,无法根据我设置的verify-code-input获取元素 <a-input type"text" id"verify-code-input" class"paIpt":placeholder"$t(…...
Flutter:吸顶效果
在分页中,实现tab吸顶。 TDNavBar的screenAdaptation: true, 开启屏幕适配。 该属性已自动对不同手机状态栏高度进行适配。我们只需关注如何实现吸顶。 view import package:ducafe_ui_core/ducafe_ui_core.dart; import package:flutter/material.dart; import p…...
MATLAB语言的数据类型
MATLAB语言的数据类型详解 MATLAB(矩阵实验室)是一种广泛应用于科学计算、数据分析、算法开发及模型构建的高性能语言和环境。MATLAB的强大之处不仅在于其丰富的数学工具和可视化功能,还有其灵活多变的数据类型。这篇文章将详细介绍MATLAB中…...
priority_queue优先队列
目录 1. 最短路径算法(Dijkstra算法) 应用场景: 优先队列的作用: 2. 最小生成树算法(Prim算法) 应用场景: 优先队列的作用: 3. 哈夫曼编码(Huffman Coding&#x…...
HarmonyOS 鸿蒙Next 预览pdf文件
HarmonyOS 鸿蒙Next 预览pdf文件 1、使用filePreview 2、使用web组件 在线pdf(网址是直接下载的,不是直接可以预览的),先下载再预览 import media from ohos.multimedia.media;import web_webview from ohos.web.webview;import …...
SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...
UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...
C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...
【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...
全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...
