跳到主要内容

🔨 系统调用和通用函数

应用可以直接使用 emlog 系统内置的类和方法,能够提高开发效率,可以直接用于模板和插件开发的通用方法和函数。

输入输出

Input类 :获取 GET、POST 变量

请使用核心的 Input 类来获取 GET 和 POST 提交的变量,不要直接使用 $a = $_POST['xxxx'] 的方式来获取,可能造成 SQL 注入等安全问题。

// 读取通过 POST 提交的字符串,默认值设置为空
$var_name = Input::postStrVar('var_name', '');
// 读取通过 POST 提交的数字类型,默认值设置为 0
$var_name = Input::postIntVar('var_name', 0);

// 读取通过 GET 提交的字符串,默认值设置为空
$var_name = Input::getStrVar('var_name', '');
// 读取通过 GET 提交的数字类型,默认值设置为 0
$var_name = Input::getIntVar('var_name', 0);

// 读取 POST 提交的数字类型的数组,如: name="ids[]",默认值为:[]
$logs = Input::postIntArray('blog');
// 读取 POST 提交的字符串类型的数组,如: name="someting[]",默认值为:[]
$logs = Input::postStrArray('blog');

// 读取通过 GET, POST, and COOKIE 提交的字符串,默认值设置为空
$var_name = Input::requestStrVar('var_name', '');
// 读取通过 GET, POST, and COOKIE 提交的数字类型,默认值设置为 0
$var_name = Input::requestNumVar('var_name', 0);

Output类: json输出类

可以快捷的输出json格式的成功和错误数据结构

Output::ok();

// 输出成功
Output::ok();

// 输出成功,带返回data数据
$data = ['id'=>1];
Output::ok($data);

Output::error();

// 输出错误
Output::error('id error');

// 输出错误,返回http状态200
Output::error('id error', 200);

输出json格式:

{
"code": 0,
"msg": "",
"data": ""
}

获取系统设置

使用 Option 类的静态方法 get 可以获取系统的一些设置选项,如下:

Option::get('att_maxsize') // 文件上传最大限制
Option::get('att_type') // 允许上传的文件类型
Option::get('att_imgmaxw') // 上传图片生成缩略图,最大尺寸:宽
Option::get('att_imgmaxh') // 上传图片生成缩略图,最大尺寸:高

获取URL路由

获取用户当前访问的URL路由信息, 方便主题等针对不同URL进行个性化输出。

$D = Dispatcher::getInstance();
echo $D->_path; // 当前访问的URL路径
echo $D->_model; // 系统路由到的模块
echo $D->_params; // 系统路由捕获到的参数

对接支付

订单系统

emlog核心内置了订单表及订单数据模型来管理订单,见: include/model/order_model.php

创建订单

// app_name:应用名称,如主题或者插件的英文别名
// pay_type:支付类型 如:alipay、wechat
// sku_name:商品类型,如:resource 、app、 vip 、 article
// sku_id:商品 ID
// price:价格
// UID :当前用户 ID
$pay_type = 'wechat';
$sku_name = 'app';
$sku_id = 1;
$price = 100;
$Order_Model = new Order_Model('app_name');
$order_id = $Order_Model->createOrder(UID, $pay_type, $sku_name, $sku_id, $price);

根据订单 ID 查询订单

$order_id = Input::postStrVar('order_id');
$Order_Model = new Order_Model('app_name');
$order = $Order_Model->getOrderById($order_id);

更新订单状态

$Order_Model = new Order_Model('app_name');
$data = [
'order_id' => $out_trade_no, // 支付平台回调的订单号
'pay_price' => $result['total_amount'], // 支付平台回调的支付金额
'out_trade_no' => $result['trade_no'], // 支付平台回调的交易号
'update_time' => time(),
];
$r = $Order_Model->updateOrder($out_trade_no, $data);

订单数据结构

以下表格展示了订单数据结构的字段及其对应的类型说明。

字段名类型说明
id整数订单ID
order_uid整数用户ID
sku_id整数商品ID
price浮点数订单价格
pay_price浮点数支付金额
refund_amount浮点数退款金额
update_timestamp时间戳更新时间戳
create_timestamp时间戳创建时间戳
update_time字符串更新日期时间
create_time字符串创建日期时间
out_trade_no字符串外部交易号
pay_type字符串支付方式
sku_name字符串商品名称

对接 AI

获取 AI 大模型配置

// 获取 AI 大模型配置
// 返回:api_url、api_key、model
AI::getCurrentModelInfo();

AI 对话

$prompt = 'hello';
$response = AI::chat($prompt);
echo $response;

用户信息、积分


$userModel = new User_Model();

// 获取用户信息
$user = $userModel->getOneUser($uid);
$avatar = $user['photo'];

// 为用户增加积分
$userModel->addCredits($uid, 100);

// 扣减用户积分
$userModel->reduceCredits($uid, 50);


应用可以使用核心的数据库模型来查询和处理文章、资源、用户等数据,相关模型和方法可以参考 include/model 目录下Model类。

全局函数

发送邮件通知

$mail = 'xxx@qq.com';
$title = '邮件标题';
$content = '邮件内容';
Notice::sendMail($mail, $title, $content);

截取指定长度的内容

//第一个参数:要截取的内容
//第二个参数:截取长度
//第三个参数:是否过滤内容中的html标签 1过滤 0不过滤
//如下:截取日志内容的前180个字符,并过滤html标签

echo subContent($value['log_description'], 180, 1);

获取文章URL

// 参数1:$article_id 文章ID
<?= Url::log($article_id)?>

获取文章分类页URL

// 参数1:$sort_id 分类ID
<?= Url::sort($sort_id)?>

获取用户IP

echo getIp();

获取内容中的第一张图片

// 参数$content:文章内容,可以是 markdown 或者 html 格式内容
// 返回:图片的 URL
$imageUrl = getFirstImage($content);

获取用户的Gravatar头像

// 参数:email
// 返回:头像 URL
$avatar = getGravatar($email);

友好的时间描述

// 参数:$timestamp unix 时间戳
// 返回:友好的时间描述,如:1分钟前
echo smartDate($timestamp);