找到
2
篇与
Typecho
相关的结果
-
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'; ?> 使用零步骤 隐藏内容,请前往内页查看详情
-
更换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. 主题更新失效 → 使用全局配置方法手机操作指南 复制代码: 长按代码区域 选择"全选" 点击"复制" 粘贴代码: 打开目标文件 长按编辑区域 选择"粘贴" 保存文件: 点击编辑器右上角保存图标 确认保存操作 本教程专为手机用户优化,所有代码块均可直接长按复制,无需复杂操作。