找到
8
篇与
菜鸟教程
相关的结果
-
joe主题再续前缘1.4版增加后台订单统计总额 title: Joe主题再续前缘1.4版:后台订单统计总额功能详解 date: 2025-09-18 12:00:00 tags: [joe主题, 再续前缘, 订单统计, typecho] category: 主题教程 cover: https://www.3cym.com/usr/uploads/2025/09/2409291984.jpg 功能一句话 后台「订单管理」顶部实时显示:总订单数、已支付金额、未支付金额等 6 项关键数据,无需插件,开箱即用。 效果预览 后台订单统计总额展示图图片 核心代码(已内置) 📎 点击查看 /admin/orders.php 完整源码(已折叠) <?php require_once TYPECHO_ADMIN_ROOT . 'header.php'; require_once TYPECHO_ADMIN_ROOT . 'menu.php'; require_once __DIR__ . '/widget.php'; $orders_url = '../themes/' . THEME_NAME . '/admin/orders.php'; $panel_url = $options->adminUrl . 'extending.php?panel=' . urlencode($orders_url); /* ========================================================= * 把整张表一次性读出来,用 PHP 算数字 * ========================================================= */ $db = Typecho_Db::get(); $rows = $db->fetchAll($db->select()->from('table.orders')); $totalOrders = $totalPaidOrders = $totalUnpaidOrders = 0; $totalAmount = $totalPaidAmount = $totalUnpaidAmount = 0; // 单位:分 foreach ($rows as $r) { $totalOrders++; $money = intval(round(floatval($r['money']) * 100)); $pay = intval(round(floatval($r['pay_price']) * 100)); $status = (int)$r['status']; // 1 已支付,0 未支付 $totalAmount += $money; if ($status === 1) { $totalPaidOrders++; $totalPaidAmount += $pay; } else { $totalUnpaidOrders++; $totalUnpaidAmount += ($money - $pay); } } // 转回元 $totalAmountYuan = number_format($totalAmount / 100, 2, '.', ''); $totalPaidAmountYuan = number_format($totalPaidAmount / 100, 2, '.', ''); $totalUnpaidAmountYuan = number_format($totalUnpaidAmount / 100, 2, '.', ''); /* ========================================================= * 下面负责展示 * ========================================================= */ $orders = Typecho\Widget::widget('JoeOrders\Widget'); ?> <style> .stats{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:15px;padding:10px;background:#f9f9f9;border:1px solid #ddd;font-size:13px} .stats>div{flex:1 1 110px;text-align:center} .stats strong{display:block;font-size:15px;color:#333} </style> <div class="main"> <div class="body container"> <div class="typecho-page-title"><h2>订单管理</h2></div> <div class="row typecho-page-main" role="main"> <div class="col-mb-12 typecho-list"> <!-- 统计卡片(使用 PHP 计算好的结果) --> <div class="stats"> <div>总订单 <strong><?php echo $totalOrders; ?></strong></div> <div>已支付订单 <strong><?php echo $totalPaidOrders; ?></strong></div> <div>未支付订单 <strong><?php echo $totalUnpaidOrders; ?></strong></div> <div>订单总额 <strong><?php echo $totalAmountYuan; ?>元</strong></div> <div>已支付金额 <strong><?php echo $totalPaidAmountYuan; ?>元</strong></div> <div>未支付金额 <strong><?php echo $totalUnpaidAmountYuan; ?>元</strong></div> </div> <!-- 以下保持你原先的业务代码,一字未改 --> <div class="typecho-list-operate clearfix"> <form method="get" action="<?php $options->adminUrl('extending.php'); ?>"> <input type="hidden" name="panel" value="<?= '../themes/' . THEME_NAME . '/admin/orders.php' ?>" /> <div class="operate"> <label><i class="sr-only"><?php _e('全选'); ?></i><input type="checkbox" class="typecho-table-select-all" /></label> <div class="btn-group btn-drop"> <button class="btn dropdown-toggle btn-s" type="button"><i class="sr-only"><?php _e('操作'); ?></i><?php _e('选中项'); ?> <i class="i-caret-down"></i></button> <ul class="dropdown-menu"> <li><a lang="<?php _e('你确认要删除这些订单吗?'); ?>" href="<?= $panel_url . '&action=delete' ?>"><?php _e('删除') ?></a></li> </ul> <button lang="你确认要清理所有未支付订单吗?" class="btn btn-s btn-warn btn-operate" href="<?= $panel_url . '&action=clear' ?>">清理所有未支付订单</button> </div> </div> <div class="search" role="search"> <?php if ('' != $request->keywords): ?> <a href="<?= $panel_url ?>"><?php _e('« 取消筛选'); ?></a> <?php endif; ?> <input type="text" class="text-s" placeholder="<?php _e('请输入关键字'); ?>" value="<?php echo $request->filter('html')->keywords; ?>" name="keywords" /> <select class="search-type" name="type"> <option value=""><?php _e('支付方式'); ?></option> <?php foreach (['wxpay' => '微信', 'alipay' => '支付宝', 'qqpay' => 'QQ'] as $id => $name) : ?> <option value="<?php echo $id; ?>" <?php if ($request->get('type') == $id) : ?> selected="true" <?php endif; ?>><?php echo $name; ?></option> <?php endforeach; ?> </select> <select class="search-status" name="status"> <option value=""><?php _e('支付状态'); ?></option> <?php foreach (['1' => '已支付', '0' => '未支付'] as $id => $name) : ?> <option value="<?php echo $id; ?>" <?= $request->get('status', 2) == $id ? 'selected="true"' : null ?>><?php echo $name; ?></option> <?php endforeach; ?> </select> <button type="submit" class="search-btn btn btn-s"><?php _e('筛选'); ?></button> </div> </form> </div><!-- end .typecho-list-operate --> <form method="post" name="manage_users" class="operate-form"> <div class="typecho-table-wrap"> <table class="typecho-list-table"> <colgroup> <col width="25px" /> <col width="130px" /> <col width="150px" /> <col width="200px" /> <col width="60px" /> <col width="60px" /> <col width="100px" /> <col width="50px" /> <col width="60px" /> <col width="60px" /> <col width="60px" /> <col width="130px" /> </colgroup> <thead> <tr> <th></th> <th>订单号</th> <th>接口订单号</th> <th>文章标题</th> <th>支付方式</th> <th>订单金额</th> <th>用户IP</th> <th>用户ID</th> <th>实付金额</th> <th>通知管理</th> <th>通知用户</th> <th>创建时间</th> </tr> </thead> <tbody> <?php if ($orders->have()) : ?> <?php while ($orders->next()) : ?> <tr id="<?php $orders->id(); ?>"> <td><input type="checkbox" value="<?php $orders->id(); ?>" name="id[]" /></td> <td><?php $orders->trade_no(); ?></td> <td><?php $orders->api_trade_no(); ?></td> <td><?php $orders->content_title(); ?></td> <td><?php $orders->typeName(); ?></td> <td><?php $orders->money(); ?></td> <td><?php $orders->ip(); ?></td> <td><?php $orders->user_id(); ?></td> <td><?php $orders->pay_price(); ?></td> <td><?php $orders->admin_email(); ?></td> <td><?php $orders->user_email(); ?></td> <td><?php $orders->create_time(); ?></td> </tr> <?php endwhile; ?> <?php else : ?> <tr class="even"> <td colspan="12"> <h6 class="typecho-list-table-title"><?php _e('当前无订单'); ?></h6> </td> </tr> <?php endif; ?> </tbody> </table><!-- end .typecho-list-table --> </div><!-- end .typecho-table-wrap --> </form><!-- end .operate-form --> <div class="typecho-list-operate clearfix"> <form method="get"> <?php if ($orders->have()): ?> <ul class="typecho-pager"> <?php $orders->pageNav(); ?> </ul> <?php endif; ?> </form> </div> <!-- end .typecho-list-operate --> </div><!-- end .typecho-list --> </div><!-- end .typecho-page-main --> </div> </div> <?php include 'copyright.php'; include 'common-js.php'; include 'table-js.php'; include 'footer.php'; ?> 使用零步骤 隐藏内容,请前往内页查看详情
-
再续前缘Joe1.4主题自定义导航教程 一、功能简介 Joe主题V1.33已经版本引入了全新的自定义导航栏功能,具有以下特色: 灵活管理: 支持随意添加、删除导航按钮,并可自由排序 高度自定义: 每个按钮支持自定义图标、文字及尺寸 丰富图标库: 主题预置了大量精美的多彩SVG图标,开箱即用 标签支持: 可为链接添加标签进行显示 精心设计: UI美观,颜色、背景、间距、尺寸等都经过精心设计 完美兼容: 细节出色,适配所有PC设备,在任何尺寸的电脑上均可完美显示 二、设置指南 进入 主题设置 → 全局设置 → 自定义全新导航栏,即可开启功能、添加链接并进行相关配置。 添加格式 格式为:导航文字(可添加SVG图标代码) || 跳转链接 || 打开方式 打开方式参数说明 参数说明_self默认值。在当前框架或窗口打开链接_blank在新窗口或新标签页中打开链接_parent在父框架中打开链接_top在整个窗口的顶层框架中打开链接三、图标使用指南 1. 使用内置图标 主题提供了丰富的内置图标,可直接在导航文字前使用以下图标代码: icon-view icon-comment icon-time icon-search icon-money icon-right icon-left icon-reply icon-circle icon-close icon-add icon-add-ring icon-post icon-posts icon-favorite icon-menu icon-d-qq icon-d-weibo icon-d-wechat icon-d-email icon-user icon-theme icon-signout icon-set icon-signup icon-user_rp icon-pan_baidu icon-lanzou icon-onedrive icon-tianyi icon-menu_2 icon-alipay icon-baidu icon-dingtalk icon-xunlei icon-123pan icon-alipan icon-quark icon-360yunpan icon-huawei icon-xiaomi icon-gitee icon-comment-fill icon-private icon-hot-fill icon-hot icon-topping icon-topic icon-plate-fill icon-extra-points icon-deduct-points icon-tags icon-user-auth icon-vip_1 icon-vip_2 icon-qzone-color icon-qq-color icon-weibo-color icon-poster-color icon-copy-color icon-user-color icon-user-color-2 icon-add-color icon-home-color icon-money-color icon-order-color icon-gift-color icon-security-color icon-trend-color icon-msg-color icon-tag-color icon-comment-color icon-wallet-color icon-money-color-2 icon-merchant-color icon-medal-color icon-points-color icon-book-color icon-ontop-color2. 使用自定义图标 如需使用自定义HTML图标(如Font Awesome),请参考相关教程。通常格式为:[fa-icon-name]。 四、配置示例 [icon-home-color] 首页 || / [icon-book-color] 文章分类 [icon-plate-fill] 源码资源 || /category/yuanma/ [icon-post] 官方公告 || /category/default/ [icon-tags] 游戏 || /category/youxi/ [icon-security-color] 技术 || /category/jishu/ [icon-poster-color] 壁纸 || /category/bizhi/ [icon-user-color] 日常 || /category/rchang/ [icon-tag-color] 其他页面 [icon-trend-color] 网站统计 || /tongji.html [icon-copy-color] 友情链接 || /yl.html [icon-order-color] 用户留言 || /# [icon-poster-color] 高清壁纸 || /4Kbz.html [icon-wallet-color] 娱乐直播 || /zhibo.html [fa-video-camera] 在线影视 || /cms.html [fa-comments] 闲聊灌水 || /archives/250 [icon-user-auth] 关于本站 || /start-page.html [icon-tags] 推荐 [icon-order-color] 公益目录 || https://file.bl01.cn/ || _blank [icon-money-color] 易支付 || https://codepay.3cym.com/ || _blank [icon-points-color] 码支付 || https://codepay.3cym.com/ || _blank [icon-home-color] 雨云科技 || https://www.rainyun.com/NDc3ODE4_/ || _blank [icon-hot] 挪车二维码 || https://cs.bl01.cn/001/7/ || _blank [icon-copy-color] 毒蘑菇 || //cs.bl01.cn/001/1/ || _blank [icon-book-color] 随机点名 || https://cs.bl01.cn/001/2/%8F%8C%E8%89%B2%E7%90%83%E7%8F%AD%E7%BA%A7%E7%82%B9%E5%90%8D%E7%B3%BB%E7%BB%9F.html || _blank
-
更换Typecho后台博客头像链接的方法 📱 Typecho Joe主题头像更换教程 - 手机友好版 专为手机用户设计 | 代码块直接复制 | 操作步骤清晰方法一:修改全局配置(推荐) 操作步骤: 打开网站根目录 找到 config.inc.php 文件 在文件开头添加以下代码: define('__TYPECHO_GRAVATAR_PREFIX__', 'https://cravatar.cn/avatar/');📋 复制代码: define('__TYPECHO_GRAVATAR_PREFIX__', 'https://cravatar.cn/avatar/');方法二:修改主题文件 操作步骤: 进入主题目录:/usr/themes/joe/ 打开 common.php 文件 找到以下代码(约120行): $url = $isSecure ? 'https://secure.gravatar.com' : 'http://www.gravatar.com'; 替换为: $url = 'https://cravatar.cn/avatar/'; 📋 复制替换代码: $url = 'https://cravatar.cn/avatar/';备选镜像地址 📋 腾讯镜像: define('__TYPECHO_GRAVATAR_PREFIX__', 'https://gravatar.loli.net/avatar/');📋 V2EX镜像: define('__TYPECHO_GRAVATAR_PREFIX__', 'https://cdn.v2ex.com/gravatar/');常见问题解决 📋 解决方案: 1. 修改后不生效 → 清除浏览器缓存 2. 文件无法保存 → 检查文件权限(644) 3. 主题更新失效 → 使用全局配置方法手机操作指南 复制代码: 长按代码区域 选择"全选" 点击"复制" 粘贴代码: 打开目标文件 长按编辑区域 选择"粘贴" 保存文件: 点击编辑器右上角保存图标 确认保存操作 本教程专为手机用户优化,所有代码块均可直接长按复制,无需复杂操作。
-
小呆支付系统6.8.3/6.8.7解决ThinkPHP方法弃用问题 小呆支付系统修复指南 卡片描述 - 解决 ThinkPHP 方法弃用导致的 500 错误 宝塔计划任务 shell 无法执行,监控断线 依赖 "topthink/think-captcha": "2.0.*" & "endroid/qrcode": "^2.5" 无法直接升级 ThinkPHP,所以给出完整 6 步修复计划 问题背景 小呆支付系统在生产环境突然 500: Fatal error: ReflectionParameter::getClass() is deprecated … 根源:PHP 8.x 把 getClass() 标为弃用,ThinkPHP 旧核心仍在调用,同时宝塔计划任务中断。 不及时修复 → 订单与回调全面停摆。 修复思路 不升级整站框架,仅替换 2 个核心函数 + 批量修改变量写法 + 清缓存,全程 6 步,约 5 分钟,零业务侵入,兼容 PHP 7.4 → 8.2。 适用人群 正在使用 ThinkPHP 5.x/6.x 的支付系统 宝塔计划任务出现 curl / Reflection 报错 手机 / 电脑均可按步骤操作 修复步骤(手机长按即可复制) ① 备份 cp -r /www/wwwroot/你的根目录 /path/to/backup② 替换 thinkphp/library/think/Container.php(第 453 行) protected function bindParams(\ReflectionFunctionAbstract $reflect, $vars = []) { if ($reflect->getNumberOfParameters() == 0) return []; reset($vars); $type = key($vars) === 0 ? 1 : 0; $params = $reflect->getParameters(); $args = []; foreach ($params as $param) { $name = $param->getName(); $reflectionType = $param->getType(); if ($reflectionType && $reflectionType instanceof \ReflectionNamedType && !$reflectionType->isBuiltin()) { $args[] = $this->getObjectParam($reflectionType->getName(), $vars); } elseif ($type == 1 && !empty($vars)) { $args[] = array_shift($vars); } elseif ($type == 0 && isset($vars[$name])) { $args[] = $vars[$name]; } elseif ($param->isDefaultValueAvailable()) { $args[] = $param->getDefaultValue(); } else { throw new \InvalidArgumentException('参数缺失: ' . $name); } } return $args; } ③ 修改 application/common.php第 1771 行 function doCurl($url, $header, $data = [], $timeout = 30, $bankId = "", $POST = true) { $ch = curl_init(); if (substr($url, 0, 5) === 'https') { curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); } $atad = Db::name("pay_sz")->find(); $use_agent = $atad['ip_hfw'] != 2; } application/common.php第 1913 行 function sign($type, $api = '', $data1 = '', $data2 = '') { $cls = pay($data2['duijei'] == 1 ? 'mr' : 'yzf'); return $type == 'sign' ? $cls->sign($api, $data1) : $cls->ybhd($api, $data1, $data2['key']); } 隐藏内容,请前往内页查看详情 ⑤ 手动检查 # 检查替换后的文件 grep -rn --include=\*.php '\$[a-zA-Z_]\w*\s*\[' /www/wwwroot/你的根目录/⑥ 清缓存 rm -rf /www/wwwroot/你的根目录/runtime/*
-
教你使用小呆支付系统在app监控离线状态下唤起支付并回调方法 前言描述 - 本教程是教你如何用呆呆支付系统,在app监控离线情况下唤起起支付并回调,不使用任何云端产品,自己的常用手机就可以实现回调支付,不耗电,不耗流量 大家都知道app监控端,离线状态下是不会唤起支付,并不出码的,必须保证app不掉线,要开启亮屏,这样太麻烦了,还要不停地充电。 下面我就教大家方法 一、首先将app监控用MT进行反编译得到AndroidManifest.xml这个文件,参考以下图片 1640005264-13c899074adc7f8.jpg图片 用反编译把文件打开将: uses-permission android:name="android.permission.FOREGROUND\_SERVICE" 这段代码复制粘贴过去保存,如图: 1640005442-dbd23da2cf5d86b.jpg图片 然后进行打包安装 二、安装好后后,必须开启通知权限和后台启动以及关联启动如图: 教你使用小呆支付系统在app监控离线状态下唤起支付并回调方法4图片 教你使用小呆支付系统在app监控离线状态下唤起支付并回调方法5图片 三、还有个最重要的开关要开启,那就是来锁屏通知时亮屏,这样收到钱包通知时亮屏,激活app监控端联网并回调, 如图: 1640006156-a3ead676c74a3e4.jpg图片 四、修改小呆呆数据库表 ‘pay_gfg’将其增加一个字段为 jkstate1 varchar(32) DEFAULT '1' COMMENT '监控端状态1', 如图: 教你使用小呆支付系统在app监控离线状态下唤起支付并回调方法6图片 添加 jkstate1 教你使用小呆支付系统在app监控离线状态下唤起支付并回调方法7图片 先改为"0"在改回"1" 教你使用小呆支付系统在app监控离线状态下唤起支付并回调方法8图片 五、修改支付系统源码文件,这是最关键的一步,否则不能唤起支付 修改文件路径为:application/pay/controller/index.php和application/index/controller/pay.php 将这段代码 pay.php的 行 148 和 248 index.php 的行145和249 原代码 - $jie = Db::name("pay\_jie")->where("pid", $data['pid'])->where("id", $data\['typec\_id'\])->where("state", 1)->find();//获取通道 if($data['jkstate']==0){ $this->success('1017',null,'监控状态异常,请检查是否挂监控回调'); 改为: $jie = Db::name("pay_jie")->where("pid", $data['pid'])->where("id", $data['typec_id'])->where("state", 1)->find();//获取通道 if($data['jkstate']==3){ $this->success('1017',null,'监控状态异常,请检查是否挂监控回调'); 将代码:行290 原代码 - $cou = Db::name("pay\_gfg")->where("pid", $pid)->where("type", $type)->where("jkstate", 1)->where("state", 1)->where("land\_lx", 1)->where("ds\_status", 0)->find(); if($cou==false){ $this->success('1009',null,'暂无账户可用,请稍后再试'); } $table = "pay\_gfg"; //需要抽取的数据表 $pk = Db::name("$table")->getPK();//获取主键 $countcus = Db::name($table)->where("pid", $pid)->where("type", $type)->where("jkstate", 1)->where("state", 1)->where("land\_lx", 1)->where("ds\_status", 0)->field($pk)->select();//查询数据 $con = ''; 改为: 隐藏内容,请前往内页查看详情 如果你还有更高的方法,欢迎投稿!!!