当前位置: 首页 > news >正文

[fastadmin] 第三十四篇 FastAdmin 商城模块标签使用详解

FastAdmin 商城模块标签使用详解

一、标签基本语法

1.1 基础语法格式

{shop:goodslist flag="参数值" id="变量名" row="数量"}<!-- 循环内容 -->
{/shop:goodslist}

1.2 常用参数说明

  • flag: 商品标记筛选
  • id: 循环变量名
  • row: 显示数量

1.3 flag 参数配置

在系统配置内,也可以自己定义配置文件和项目
[fastadmin] 第三十四篇 FastAdmin 商城模块标签使用详解

具体代码实现在这里:

[fastadmin] 第三十四篇 FastAdmin 商城模块标签使用详解

[fastadmin] 第三十四篇 FastAdmin 商城模块标签使用详解

二、标签使用示例

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();}
}

四、标签渲染流程

  1. 模板解析

    • 识别 {shop:goodslist} 标签
    • 调用 tagGoodslist 方法处理
  2. 参数处理

    • 解析标签参数(flag、row等)
    • 转换为查询条件
  3. 数据查询

    • 调用 Goods::getGoodsList
    • 根据条件筛选商品
  4. 结果渲染

    • 循环输出商品数据
    • 替换模板变量

五、使用注意事项

  1. flag 参数组合

    • 多个标记使用逗号分隔
    • 组合查询是"与"的关系
  2. 性能优化

    • 合理设置 row 数量
    • 适当使用缓存
  3. 数据完整性

    • 确保商品字段完整
    • 处理空值情况

六、实际应用案例

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)&#xff1a;日常生活视觉聊天基准 4. Benchmark 结果 1. 简介 我们通过引入近期更强大的开源大语言模型&#xff08;…...

IPEX-LLM开发项目过程中的技术总结和心得

IPEX-LLM开发项目过程中的技术总结和心得 在人工智能快速发展的时代&#xff0c;高效地开发和部署大语言模型&#xff08;LLM&#xff09;已成为技术人员的必备技能。在我们的项目中&#xff0c;我们采用了 Intel Extension for PyTorch&#xff08;简称 IPEX&#xff09;和 L…...

HTTP/HTTPS ②-Cookie || Session || HTTP报头

这里是Themberfue 上篇文章介绍了HTTP报头的首行信息 本篇我们将更进一步讲解HTTP报头键值对的含义~~~ ❤️❤️❤️❤️ 报头Header ✨再上一篇的学习中&#xff0c;我们了解了HTTP的报头主要是通过键值对的结构存储和表达信息的&#xff1b;我们已经了解了首行的HTTP方法和UR…...

【软考】软件设计师

「学习路线」&#xff08;推荐该顺序学习&#xff0c;按照先易后难排序&#xff09; 1、上午题—计算机系统&#xff08;5~6分&#xff09;[1.8; ] 2、上午题—程序设计语言&#xff08;固定6分&#xff09;[1.9; ] 3、下午题—试题一&#xff08;15分&#xff09; 4、上午题—…...

K8s Pod OOMKilled,监控却显示内存资源并未打满

1. 问题现象 pod一直重启&#xff0c;通过grafana查看&#xff0c;发现内存使用率并没有100%。 2. 排查过程 2.1 describe查看pod最新一次的状态 可以明显看到&#xff0c;最近一次的重启就是因为内存不足导致的。 2.2 describe 查看node节点状态 找到原因了&#xff0c;原来…...

C++ 原子变量

C 原子变量 文章目录 C 原子变量1. 原子变量是什么&#xff1f;2. 原子操作的特点3. 原子变量的作用1. 多线程安全的共享数据访问2. 替代锁机制3. 实现低级同步算法 4. 原子变量的常见操作5. 内存顺序&#xff08;Memory Ordering&#xff09;内存顺序控制在原子变量中的作用如…...

linux网络 | http结尾、理解长连接短链接与cookie

前言&#xff1a;本节是http章节的最后一部分&#xff0c;主要解释一些小概念。讲解到了HTTP的方法&#xff0c;表单&#xff0c; 重定向等等。 现在废话不多说&#xff0c; 开始我们的学习吧。 ps&#xff1a;本节内容都是概念&#xff0c; 知道就行&#xff0c; 友友们放心观…...

金融项目实战 02|接口测试分析、设计以及实现

目录 ⼀、接口相关理论 二、接口测试 1、待测接口&#xff1a;投资业务 2、接口测试流程 3、设计用例理论 1️⃣设计方法 2️⃣工具 4、测试点提取 5、测试用例 ⼀、接口相关理论 1、ui功能测试和接⼝测试那个先执⾏&#xff1f;为什么&#xff1f; 结论&#xff1a…...

二、智能体强化学习——深度强化学习核心算法

2.1 DQN 系列及其改进 2.1.1 背景与动机 在经典强化学习中&#xff08;如 Q-Learning&#xff09;&#xff0c;如果状态空间或动作空间非常大乃至连续&#xff0c;那么用一个表格来存储 Q ( s , a ) Q(s,a) Q(s,a) 不再可行。为了解决该问题&#xff0c;可以使用神经网络来逼…...

Mysql--架构篇--存储引擎InnoDB(内存结构,磁盘结构,存储结构,日志管理,锁机制,事务并发控制等)

MySQL是一个多存储引擎的数据库管理系统&#xff0c;支持多种不同的存储引擎。每种存储引擎都有其独特的特性、优势和适用场景。选择合适的存储引擎对于优化数据库性能、确保数据完整性和满足业务需求至关重要。 注&#xff1a;在同一个Mysql的数据库中&#xff0c;对于不同的表…...

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 &#xff1f; 在 kubernetes client-go 中&#xff0c;QPS 和 Burst 是用于控制客户端与 Kubernetes API 交互速率的两个关键参数&#xff1a; QPS (Queries Per Second) 定义&#xff1a;表示每秒允许发送的请求数量&#xff0c;即限速器的平滑速率…...

使用docker-compose安装Redis的主从+哨兵模式

必看 本文是一主二从一哨兵模式&#xff1b;其余的单机/集群/多哨兵模式的话&#xff0c;不在本文... 本文的环境主要是&#xff1a;应用app在本地&#xff0c;redis在云服务器上&#xff1b; 图解 图如下&#xff1a;这个图很重要&#xff1b; 之所以要这样画图&#xff0…...

数据结构(Java版)第七期:LinkedList与链表(二)

专栏&#xff1a;数据结构(Java版) 个人主页&#xff1a;手握风云 一、链表的实现&#xff08;补&#xff09; 接上一期&#xff0c;下面我们要实现删除所有值为key的元素&#xff0c;这时候有的老铁就会想用我们上一期中讲到的remove方法&#xff0c;循环使用remove方法&#…...

ant-design-vue 1.X 通过id获取a-input组件失败

1.ant-design-vue 1.X 问题描述 当我在a-form组件中&#xff0c;以v-decorator指令绑定表单组件时&#xff0c;无法根据我设置的verify-code-input获取元素 <a-input type"text" id"verify-code-input" class"paIpt":placeholder"$t(…...

Flutter:吸顶效果

在分页中&#xff0c;实现tab吸顶。 TDNavBar的screenAdaptation: true, 开启屏幕适配。 该属性已自动对不同手机状态栏高度进行适配。我们只需关注如何实现吸顶。 view import package:ducafe_ui_core/ducafe_ui_core.dart; import package:flutter/material.dart; import p…...

MATLAB语言的数据类型

MATLAB语言的数据类型详解 MATLAB&#xff08;矩阵实验室&#xff09;是一种广泛应用于科学计算、数据分析、算法开发及模型构建的高性能语言和环境。MATLAB的强大之处不仅在于其丰富的数学工具和可视化功能&#xff0c;还有其灵活多变的数据类型。这篇文章将详细介绍MATLAB中…...

priority_queue优先队列

目录 1. 最短路径算法&#xff08;Dijkstra算法&#xff09; 应用场景&#xff1a; 优先队列的作用&#xff1a; 2. 最小生成树算法&#xff08;Prim算法&#xff09; 应用场景&#xff1a; 优先队列的作用&#xff1a; 3. 哈夫曼编码&#xff08;Huffman Coding&#x…...

HarmonyOS 鸿蒙Next 预览pdf文件

HarmonyOS 鸿蒙Next 预览pdf文件 1、使用filePreview 2、使用web组件 在线pdf&#xff08;网址是直接下载的&#xff0c;不是直接可以预览的&#xff09;&#xff0c;先下载再预览 import media from ohos.multimedia.media;import web_webview from ohos.web.webview;import …...

OpenClaw技能市场探秘:Qwen3-32B-Chat镜像赋能10大自动化场景

OpenClaw技能市场探秘&#xff1a;Qwen3-32B-Chat镜像赋能10大自动化场景 1. 为什么需要技能市场&#xff1f; 第一次接触OpenClaw时&#xff0c;我误以为它只是个"高级版按键精灵"。直到在ClawHub技能市场看到wechat-publisher这个模块——它能直接将Markdown文章…...

技术视域下人的类本质异化复归:返璞归真与转识成智的同构性探索

摘要&#xff1a; 本文立足于技术哲学与认知科学的交叉地带&#xff0c;审视现代技术环境&#xff08;如算法主导的信息流、虚拟社交、自动化决策&#xff09;中人的类本质异化现象。文章深入剖析“返璞归真”作为克服异化、回归本真状态的路径内涵&#xff0c;并揭示其与“转识…...

DeepSeek R1 本地部署企业级实战(附Ollama及CherryStudio客户端安装包)

1、DeepSeek 双系列定位 DeepSeek 作为国内对标 GPT-4 的顶尖大模型,核心分为两大技术系列,精准覆盖不同业务场景: 系列 定位 核心能力 典型模型 小模型覆盖 R1(推理增强) 深度思考、复杂逻辑 数学、代码、长链推理 R1-671B、R1-32B、R1-7B 1.5B/7B/8B/14B/32B(Ollama 主…...

ExplorerPatcher使用指南:3步恢复Windows经典界面体验

ExplorerPatcher使用指南&#xff1a;3步恢复Windows经典界面体验 【免费下载链接】ExplorerPatcher This project aims to enhance the working environment on Windows 项目地址: https://gitcode.com/GitHub_Trending/ex/ExplorerPatcher ExplorerPatcher是一款强大的…...

温度场与锂枝晶生长的相场电势场及浓度场耦合仿真研究

comsol 锂枝晶仿真——耦合温度场 在相场&#xff0c;电势场和浓度场的基础上耦合了温度场&#xff0c;可以看不同温度对锂枝晶的影响指尖的金属晶体在电解液中野蛮生长&#xff0c;就像寒冬玻璃上的冰花。当我们盯着显微镜观察锂枝晶时&#xff0c;常忽略了一个重要变量——温…...

保姆级教程:用AutoDL租4090显卡,在PyCharm里远程复现具身智能论文PAI0(附完整避坑清单)

零基础实战&#xff1a;AutoDLPyCharm复现PAI0具身智能论文全流程指南 第一次接触云端GPU服务器和远程开发&#xff1f;别担心&#xff0c;这篇教程会手把手带你用AutoDL租用4090显卡&#xff0c;并通过PyCharm实现无缝远程开发&#xff0c;完整复现具身智能领域的前沿论文PAI0…...

为什么选择Apache NetBeans?完整对比主流IDE的优势与特色

为什么选择Apache NetBeans&#xff1f;完整对比主流IDE的优势与特色 【免费下载链接】netbeans Apache NetBeans 项目地址: https://gitcode.com/gh_mirrors/ne/netbeans Apache NetBeans是一款由Apache软件基金会开发的开源集成开发环境&#xff08;IDE&#xff09;&a…...

智能抢票新纪元:MaxBot如何突破票务平台限制?2025革新攻略

智能抢票新纪元&#xff1a;MaxBot如何突破票务平台限制&#xff1f;2025革新攻略 【免费下载链接】tix_bot Max搶票機器人(maxbot) help you quickly buy your tickets 项目地址: https://gitcode.com/gh_mirrors/ti/tix_bot 在数字票务时代&#xff0c;热门活动门票往…...

Qwen3-14B WebUI权限分级:管理员/普通用户/只读访客三类角色配置

Qwen3-14B WebUI权限分级&#xff1a;管理员/普通用户/只读访客三类角色配置 1. 权限分级的重要性与场景需求 在私有化部署Qwen3-14B模型时&#xff0c;企业或团队通常需要根据不同成员的职责分配不同的操作权限。合理的权限分级能够&#xff1a; 保障系统安全&#xff1a;防…...

2025最权威的十大降AI率方案推荐榜单

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 人工智慧写作工具凭借自然语言生成这项技术&#xff0c;能够快速产出契合语法规则的文本内容…...