yunzer/app/index/controller/IndexController.php

422 lines
14 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/**
* 后台管理系统-首页
*/
namespace app\index\controller;
use app\index\controller\BaseController;
use think\facade\Db;
use think\facade\View;
use think\facade\Env;
use think\facade\Config;
use app\index\model\Banner;
use app\index\model\Resources\ResourcesCategory;
use app\index\model\Articles\ArticlesCategory;
use app\index\model\Resources\Resources;
use app\index\model\Articles\Articles;
use PHPMailer\PHPMailer\PHPMailer;
class IndexController extends BaseController
{
/**
* 首页
*/
public function index()
{
// 获取banner列表
$bannerList = Banner::where('delete_time', null)
->order('sort DESC, id DESC')
->select()
->toArray();
View::assign('bannerList', $bannerList);
return View::fetch();
}
/**
* 获取站点资讯列表
*/
public function siteNewslist()
{
// 获取站点资讯分类顶级分类id为1的子分类
$categories = ArticlesCategory::where('cid', 1)
->where('delete_time', null)
->select()
->toArray();
$articles = [];
$categoryData = [];
// 提取分类名称和ID用于前端tab显示
foreach ($categories as $category) {
$categoryData[] = [
'id' => $category['id'],
'name' => $category['name']
];
// 获取该分类下的文章限制4条
$articles = Articles::where('cate', $category['id'])
->where('delete_time', null)
->where('status', 2)
->order('id', 'desc')
->field('id, cate, title, image, author, publishdate, views')
->limit(4)
->select()
->toArray();
}
return json([
'code' => 1,
'msg' => '获取成功',
'articles' => $articles,
'categories' => $categoryData
]);
}
/**
* 获取技术文章列表
*/
public function technicalArticleslist()
{
// 获取技术文章分类顶级分类id为3的子分类
$categories = ArticlesCategory::where('cid', 3)
->where('delete_time', null)
->select()
->toArray();
// 组装分类数据,方便后续查找
$categoryData = [];
$categoryImageMap = [];
$articlesByCategory = [];
foreach ($categories as $category) {
$categoryData[] = [
'id' => $category['id'],
'name' => $category['name']
];
$categoryImageMap[$category['id']] = $category['image'] ?? '';
// 获取每个分类下的文章限制12条
$articles = Articles::where('cate', $category['id'])
->where('delete_time', null)
->where('status', 2)
->order('id', 'desc')
->field('id, cate, title, image, author, publishdate, views')
->limit(12)
->select()
->toArray();
// 替换image为空的文章
foreach ($articles as &$article) {
if (empty($article['image']) && !empty($categoryImageMap[$article['cate']])) {
$article['image'] = $categoryImageMap[$article['cate']];
}
}
unset($article);
$articlesByCategory[$category['id']] = $articles;
}
return json([
'code' => 1,
'msg' => '获取成功',
'articles' => $articlesByCategory,
'categories' => $categoryData
]);
}
/**
* 获取banner列表
*/
public function bannerlist()
{
// 获取启用状态的banner列表按排序倒序
$bannerList = Banner::where('delete_time', null)
->order('sort DESC, id DESC')
->select()
->toArray();
return json(['code' => 1, 'msg' => '获取成功', 'banner' => $bannerList]);
}
/**
* 获取资源下载列表
*/
public function resourcesList()
{
// 获取资源分类顶级分类id为2的子分类
$categories = ResourcesCategory::where('cid', 2)
->where('delete_time', null)
->select()
->toArray();
// 组装分类数据
$categoryData = [];
$categoryImageMap = [];
$resourcesByCategory = [];
foreach ($categories as $category) {
$categoryData[] = [
'id' => $category['id'],
'name' => $category['name']
];
$categoryImageMap[$category['id']] = $category['image'] ?? '';
// 获取每个分类下的资源限制8条
$resources = Resources::where('cate', $category['id'])
->where('delete_time', null)
->where('status', 1)
->order('id', 'desc')
->field('id, cate, title, desc, downloads, create_time, icon, views, uploader')
->limit(8)
->select()
->toArray();
// 替换thumbnail为空的资源
foreach ($resources as &$resource) {
if (empty($resource['thumbnail']) && !empty($categoryImageMap[$resource['cate']])) {
$resource['thumbnail'] = $categoryImageMap[$resource['cate']];
}
}
unset($resource);
$resourcesByCategory[$category['id']] = $resources;
}
// 合并所有分类的资源
$allResources = [];
foreach ($resourcesByCategory as $resources) {
$allResources = array_merge($allResources, $resources);
}
// 按上传时间排序
usort($allResources, function ($a, $b) {
return $b['create_time'] - $a['create_time'];
});
// 只取最新的8条
$allResources = array_slice($allResources, 0, 8);
return json([
'code' => 1,
'msg' => '获取成功',
'resources' => $allResources,
'categories' => $categoryData
]);
}
/**
* 获取程序下载列表
*/
public function programList()
{
// 获取程序分类顶级分类id为4的子分类
$categories = ResourcesCategory::where('cid', 1)
->where('delete_time', null)
->select()
->toArray();
// 组装分类数据
$categoryData = [];
$categoryImageMap = [];
$programsByCategory = [];
foreach ($categories as $category) {
$categoryData[] = [
'id' => $category['id'],
'name' => $category['name']
];
$categoryImageMap[$category['id']] = $category['image'] ?? '';
// 获取每个分类下的程序限制8条
$programs = Resources::where('cate', $category['id'])
->where('delete_time', null)
->where('status', 1)
->order('id', 'desc')
->field('id, cate, title, desc, downloads, create_time, icon, views, uploader')
->limit(8)
->select()
->toArray();
// 替换thumbnail为空的程序
foreach ($programs as &$program) {
if (empty($program['thumbnail']) && !empty($categoryImageMap[$program['cate']])) {
$program['thumbnail'] = $categoryImageMap[$program['cate']];
}
}
unset($program);
$programsByCategory[$category['id']] = $programs;
}
// 合并所有分类的程序
$allPrograms = [];
foreach ($programsByCategory as $programs) {
$allPrograms = array_merge($allPrograms, $programs);
}
// 按上传时间排序
usort($allPrograms, function ($a, $b) {
return $b['create_time'] - $a['create_time'];
});
// 只取最新的8条
$allPrograms = array_slice($allPrograms, 0, 8);
return json([
'code' => 1,
'msg' => '获取成功',
'programs' => $allPrograms,
'categories' => $categoryData
]);
}
/**
* 获取游戏下载列表
*/
public function gameList()
{
// 获取游戏分类顶级分类id为8的子分类
$categories = ResourcesCategory::where('cid', 8)
->where('delete_time', null)
->select()
->toArray();
// 组装分类数据
$categoryData = [];
$categoryImageMap = [];
$programsByCategory = [];
foreach ($categories as $category) {
$categoryData[] = [
'id' => $category['id'],
'name' => $category['name'],
'image' => $category['image'] ?? ''
];
// 获取每个分类下的游戏限制8条
$programs = Resources::where('cate', $category['id'])
->where('delete_time', null)
->where('status', 1)
->order('id', 'desc')
->field('id, cate, title, desc, downloads, create_time, icon, views, uploader, number, url, code')
->limit(8)
->select()
->toArray();
// 处理游戏数据
foreach ($programs as &$program) {
// 如果没有图标,使用分类图片
if (empty($program['icon']) && !empty($category['image'])) {
$program['icon'] = $category['image'];
}
// 格式化时间
$program['create_time'] = date('Y-m-d H:i:s', $program['create_time']);
}
unset($program);
$programsByCategory[$category['id']] = $programs;
}
// 合并所有分类的游戏
$allPrograms = [];
foreach ($programsByCategory as $programs) {
$allPrograms = array_merge($allPrograms, $programs);
}
// 按上传时间排序
usort($allPrograms, function ($a, $b) {
return strtotime($b['create_time']) - strtotime($a['create_time']);
});
// 只取最新的8条
$allPrograms = array_slice($allPrograms, 0, 8);
return json([
'code' => 0,
'msg' => '获取成功',
'data' => [
'games' => $allPrograms,
'categories' => $categoryData
]
]);
}
function sendEmail($email, $to, $content, $title)
{
// 邮件内容
//实例化PHPMailer核心类
$mail = new PHPMailer();
//是否启用smtp的debug进行调试 开发环境建议开启 生产环境注释掉即可 默认关闭debug调试模式
$mail->SMTPDebug = 1;
//使用smtp鉴权方式发送邮件
$mail->isSMTP();
//smtp需要鉴权 这个必须是true
$mail->SMTPAuth = true;
//链接qq域名邮箱的服务器地址
$mail->Host = 'smtp.qq.com';//如果是163邮箱 就把qq换成163
//设置使用ssl加密方式登录鉴权
$mail->SMTPSecure = 'ssl';
//设置ssl连接smtp服务器的远程服务器端口号以前的默认是25但是现在新的好像已经不可用了 可选465或587
$mail->Port = 465;
//设置smtp的helo消息头 这个可有可无 内容任意
// $mail->Helo = 'Hello smtp.qq.com Server';
//设置发件人的主机域 可有可无 默认为localhost 内容任意,建议使用你的域名
$mail->Hostname = $email;
//设置发送的邮件的编码 可选GB2312 我喜欢utf-8 据说utf8在某些客户端收信下会乱码
$mail->CharSet = 'UTF-8';
//设置发件人姓名(昵称) 任意内容,显示在收件人邮件的发件人邮箱地址前的发件人姓名
$mail->FromName = '学创网络';
//smtp登录的账号 这里填入字符串格式的qq号即可
$mail->Username = $email;
//smtp登录的密码 使用qq邮箱生成的授权码qq邮箱生成授权码参考网址http://www.huochewu.com/show_1609305/
$mail->Password = '';
//设置发件人邮箱地址 这里填入上述提到的“发件人邮箱”
$mail->From = $email;
//邮件正文是否为html编码 注意此处是一个方法 不再是属性 true或false
$mail->isHTML(true);
//设置收件人邮箱地址 该方法有两个参数 第一个参数为收件人邮箱地址 第二参数为给该地址设置的昵称 不同的邮箱系统会自动进行处理变动 这里第二个参数的意义不大
$mail->addAddress($to, '666');
//添加多个收件人 则多次调用方法即可
// $mail->addAddress('xxx@163.com','');
//添加该邮件的主题
$mail->Subject = $title;
//添加邮件正文 上方将isHTML设置成了true则可以是完整的html字符串 如使用file_get_contents函数读取本地的html文件
$mail->Body = $content;
//为该邮件添加附件 该方法也有两个参数 第一个参数为附件存放的目录(相对目录、或绝对目录均可) 第二参数为在邮件附件中该附件的名称
// $mail->addAttachment('./d.jpg','mm.jpg');
//同样该方法可以多次调用 上传多个附件
// $mail->addAttachment('./Jlib-1.1.0.js','Jlib.js');
$status = $mail->send();
//简单的判断与提示信息
if ($status) {
return '发送成功';
} else {
return '发送失败';
}
}
}