tag表增加keywords、description、title字段

This commit is contained in:
taoser 2022-09-07 15:20:00 +08:00
parent 43013c2e39
commit 89ece07993
31 changed files with 502 additions and 325 deletions

View File

@ -292,24 +292,36 @@ abstract class BaseController
/** /**
* 关键词 * 关键词
* 通过百度分词接口获取关键词或者标签
* flag 1.为word时获取分词2.为tag时获取标签
* *
* @return void * @return void
*/ */
public function setKeywords($data) public function setKeywords($data)
{ {
$keywords = []; $keywords = [];
if($data['flag'] == 'on') {
// 百度分词自动生成关键词 // 百度分词自动生成关键词
if(!empty(config('taoler.baidu.client_id')) == true) { if(!empty(config('taoler.baidu.client_id')) == true) {
$url = 'https://aip.baidubce.com/rpc/2.0/nlp/v1/lexer?charset=UTF-8&access_token='.config('taoler.baidu.access_token');
//headers数组内的格式 //headers数组内的格式
$headers = array(); $headers = array();
$headers[] = "Content-Type:application/json"; $headers[] = "Content-Type:application/json";
$body = array(
"text" => $data['$keywords'] switch($data['flag']) {
); //分词
case 'word':
$url = 'https://aip.baidubce.com/rpc/2.0/nlp/v1/lexer?charset=UTF-8&access_token='.config('taoler.baidu.access_token');
$body = ["text" => $data['keywords']];
break;
//标签
case 'tag':
$url = 'https://aip.baidubce.com/rpc/2.0/nlp/v1/keyword?charset=UTF-8&access_token='.config('taoler.baidu.access_token');
$body = ['title' => $data['keywords'], 'content'=>$data['content']];
break;
default:
$url = 'https://aip.baidubce.com/rpc/2.0/nlp/v1/lexer?charset=UTF-8&access_token='.config('taoler.baidu.access_token');
$body = ["text" => $data['keywords']];
}
$postBody = json_encode($body); $postBody = json_encode($body);
$curl = curl_init(); $curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_URL, $url);
@ -329,9 +341,23 @@ abstract class BaseController
// 数据正常 // 数据正常
$items = $dataItem->items; $items = $dataItem->items;
foreach($items as $item) { foreach($items as $item) {
switch($data['flag']) {
case 'word':
if($item->pos == 'n' && !in_array($item->item,$keywords)){ if($item->pos == 'n' && !in_array($item->item,$keywords)){
$keywords[] = $item->item; $keywords[] = $item->item;
} }
break;
case 'tag':
if(!in_array($item->tag,$keywords)){
$keywords[] = $item->tag;
}
break;
default:
if($item->pos == 'n' && !in_array($item->item,$keywords)){
$keywords[] = $item->item;
}
}
} }
} else { } else {
// 接口正常但获取数据失败可能参数错误重新获取token // 接口正常但获取数据失败可能参数错误重新获取token
@ -358,18 +384,6 @@ abstract class BaseController
} }
} }
} }
} else {
// 手动添加关键词
// 中文一个或者多个空格转换为英文空格
$str = preg_replace('/\s+/',' ',$data['keywords']);
$att = explode(' ', $str);
foreach($att as $v){
if ($v !='') {
$keywords[] = $v;
}
}
}
return json(['code'=>0,'data'=>$keywords]); return json(['code'=>0,'data'=>$keywords]);
} }

View File

@ -409,11 +409,11 @@ class Forum extends AdminController
public function edit($id) public function edit($id)
{ {
$article = Article::find($id); $article = Article::find($id);
if(Request::isAjax()){ if(Request::isAjax()){
$data = Request::only(['id','cate_id','title','title_color','content','upzip','keywords','description','captcha']); $data = Request::only(['id','cate_id','title','title_color','content','upzip','keywords','description','captcha']);
$tagId = input('tagid'); $tagId = input('tagid');
$data['user_id'] = 1;
//调用验证器 //调用验证器
$validate = new \app\common\validate\Article(); $validate = new \app\common\validate\Article();
$res = $validate->scene('Artadd')->check($data); $res = $validate->scene('Artadd')->check($data);
@ -466,20 +466,8 @@ class Forum extends AdminController
return $editRes; return $editRes;
} }
} }
// 查询标签
$tag = $article->tags;
$tags = [];
if(!is_null($tag)) {
$attr = explode(',',$tag);
foreach($attr as $key => $v){
if ($v !='') {
$tags[] = $v;
}
}
} View::assign(['article'=>$article]);
View::assign(['article'=>$article,'tags'=>$tags]);
//1.查询分类表获取所有分类 //1.查询分类表获取所有分类
$cateList = Db::name('cate')->where(['status'=>1,'delete_time'=>0])->order('sort','asc')->cache('catename',3600)->select(); $cateList = Db::name('cate')->where(['status'=>1,'delete_time'=>0])->order('sort','asc')->cache('catename',3600)->select();

View File

@ -336,7 +336,7 @@ class Set extends AdminController
$arr['url_rewrite'][$k] = ''; $arr['url_rewrite'][$k] = '';
} }
} }
if(empty($arr['url_rewrite']['cate_as'])) return json(['code'=>-1,'msg'=>'分类不能为空']); // if(empty($arr['url_rewrite']['cate_as'])) return json(['code'=>-1,'msg'=>'分类不能为空']);
if(!array_key_exists('url_rewrite',config('taoler'))){ if(!array_key_exists('url_rewrite',config('taoler'))){
$result = SetArr::name('taoler')->add($arr); $result = SetArr::name('taoler')->add($arr);

View File

@ -41,7 +41,7 @@ class Tag extends AdminController
if(count($tags)) { if(count($tags)) {
$arr = ['code'=>0, 'msg'=>'', 'count' => count($tags)]; $arr = ['code'=>0, 'msg'=>'', 'count' => count($tags)];
foreach($tags as $k=>$v) { foreach($tags as $k=>$v) {
$arr['data'][] = ['id'=>$v['id'],'name'=>$v['name'], 'ename'=>$v['ename'],'time'=>$v['create_time']]; $arr['data'][] = ['id'=>$v['id'],'name'=>$v['name'], 'ename'=>$v['ename'], 'keywords'=>$v['keywords'], 'description'=>$v['description'], 'title'=>$v['title'],'time'=>$v['create_time']];
} }
} else { } else {
$arr = ['code'=>-1, 'msg'=>'没有数据']; $arr = ['code'=>-1, 'msg'=>'没有数据'];
@ -52,7 +52,10 @@ class Tag extends AdminController
public function add() public function add()
{ {
if(Request::isAjax()) { if(Request::isAjax()) {
$data = Request::only(['name','ename']); $data = Request::only(['name','ename','keywords','description','title']);
// 把,转换为,并去空格->转为数组->去掉空数组->再转化为带,号的字符串
$data['keywords'] = implode(',',array_filter(explode(',',trim(str_replace('',',',$data['keywords'])))));
$tagModel = new TagModel; $tagModel = new TagModel;
$res = $tagModel->saveTag($data); $res = $tagModel->saveTag($data);
if($res == true){ if($res == true){
@ -67,13 +70,17 @@ class Tag extends AdminController
$tagModel = new TagModel; $tagModel = new TagModel;
if(Request::isAjax()) { if(Request::isAjax()) {
$data = Request::only(['name','ename','id']); $data = Request::only(['name','ename','id','keywords','description','title']);
// 把,转换为,并去空格->转为数组->去掉空数组->再转化为带,号的字符串
$data['keywords'] = implode(',',array_filter(explode(',',trim(str_replace('',',',$data['keywords'])))));
$res =$tagModel::update($data); $res =$tagModel::update($data);
if($res == true){ if($res == true){
return json(['code'=>0,'msg'=>'设置成功']); return json(['code'=>0,'msg'=>'设置成功']);
} }
} }
$tag = $tagModel->getTag(input('id')); $tag = $tagModel->getTag(input('id'));
View::assign('tag',$tag); View::assign('tag',$tag);
return view(); return view();
} }

View File

@ -378,7 +378,7 @@ class Upgrade extends AdminController
*/ */
public function database_operation($file) public function database_operation($file)
{ {
$mysqli = new mysqli('localhost','root','root','test'); $mysqli = new \mysqli('localhost','root','root','test');
if($mysqli->connect_errno) if($mysqli->connect_errno)
{ {
return json(['code'=>0,'msg'=>'Connect failed:'.$mysqli->connect_error]); return json(['code'=>0,'msg'=>'Connect failed:'.$mysqli->connect_error]);

View File

@ -21,6 +21,4 @@ Route::get("$detail_as<id>$", '\app\index\controller\Article@detail')
]) ])
->name('article_detail'); ->name('article_detail');
//tag

View File

@ -104,14 +104,14 @@ var artId = "{$article.id}";
var addTags = xmSelect.render({ var addTags = xmSelect.render({
el: '#tag', el: '#tag',
name: 'tagid', name: 'tagid',
layVerify: 'required', layVerify: '',
layVerType: 'msg', layVerType: 'msg',
paging: true, paging: true,
pageSize: 5, pageSize: 5,
data: [] data: []
}); });
//2.动态赋值 //2.动态赋值
$.get("{:url('tag/getArtTag')}",{id:artId},function(res){ $.get("{:url('tag/getArticleTag')}",{id:artId},function(res){
if(res.code == 0){ if(res.code == 0){
addTags.setValue( addTags.setValue(
res.data res.data

View File

@ -339,16 +339,16 @@
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">Index前端</label> <label class="layui-form-label">Index前端</label>
<div class="layui-input-inline"> <div class="layui-input-inline">
<input type="text" name="index" value="{$index}" class="layui-input"> <input type="text" name="index" required lay-verify="required" placeholder="只需填写子域如www" value="{$index}" class="layui-input">
</div> </div>
<div class="layui-form-mid layui-word-aux">如:www.aieok.com</div> <div class="layui-form-mid layui-word-aux">访问则为www.aieok.com</div>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">Admin后端</label> <label class="layui-form-label">Admin后端</label>
<div class="layui-input-inline"> <div class="layui-input-inline">
<input type="text" name="admin" value="{$admin}" class="layui-input"> <input type="text" name="admin" required lay-verify="required" placeholder="只需填写子域如admin" value="{$admin}" class="layui-input">
</div> </div>
<div class="layui-form-mid layui-word-aux">如:admin.aieok.com</div> <div class="layui-form-mid layui-word-aux">访问则为admin.aieok.com</div>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item">
@ -388,14 +388,14 @@
<div class="layui-tab-item"> <div class="layui-tab-item">
<div class="layui-form" wid100 lay-filter="url_rewrite"> <div class="layui-form" wid100 lay-filter="url_rewrite">
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">帖子别名</label> <label class="layui-form-label">帖子url字段</label>
<div class="layui-input-inline"> <div class="layui-input-inline">
<input type="text" name="article_as" required value="{$url_re['article_as']}" class="layui-input"> <input type="text" name="article_as" required value="{$url_re['article_as']}" class="layui-input">
</div> </div>
<div id="artdesc" class="layui-form-mid layui-word-aux">www.aieok.com/article/1.html</div> <div id="artdesc" class="layui-form-mid layui-word-aux">www.aieok.com/article/1.html</div>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">分类别名</label> <label class="layui-form-label">分类url字段</label>
<div class="layui-input-inline"> <div class="layui-input-inline">
<input type="text" name="cate_as" required value="{$url_re['cate_as']}" class="layui-input"> <input type="text" name="cate_as" required value="{$url_re['cate_as']}" class="layui-input">
</div> </div>

View File

@ -25,6 +25,24 @@
<input type="text" name="ename" lay-verify="required" placeholder="英文或者拼音别名" autocomplete="off" class="layui-input" > <input type="text" name="ename" lay-verify="required" placeholder="英文或者拼音别名" autocomplete="off" class="layui-input" >
</div> </div>
</div> </div>
<div class="layui-form-item">
<label class="layui-form-label">关键词</label>
<div class="layui-input-inline">
<input type="text" name="keywords" lay-verify="required" placeholder="关键词 多个以逗号,隔开" autocomplete="off" class="layui-input" >
</div>
</div>
<div class="layui-form-item layui-form-text">
<label class="layui-form-label">摘要</label>
<div class="layui-input-block">
<textarea type="text" name="description" lay-verify="required" placeholder="请输入内容" autocomplete="off" class="layui-textarea"></textarea>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">seo标题</label>
<div class="layui-input-inline">
<input type="text" name="title" lay-verify="required" placeholder="tag标题" autocomplete="off" class="layui-input" >
</div>
</div>
<div class="layui-form-item layui-hide"> <div class="layui-form-item layui-hide">
<input type="button" lay-submit lay-filter="Tag-submit" id="Tag-submit" value="确认"> <input type="button" lay-submit lay-filter="Tag-submit" id="Tag-submit" value="确认">
</div> </div>

View File

@ -23,6 +23,24 @@
<input type="text" name="ename" lay-verify="required" placeholder="英文或者拼音别名" class="layui-input" value="{$tag.ename}" > <input type="text" name="ename" lay-verify="required" placeholder="英文或者拼音别名" class="layui-input" value="{$tag.ename}" >
</div> </div>
</div> </div>
<div class="layui-form-item">
<label class="layui-form-label">关键词</label>
<div class="layui-input-inline">
<input type="text" name="keywords" lay-verify="required" placeholder="关键词 多个以逗号,隔开" autocomplete="off" class="layui-input" value="{$tag.keywords}">
</div>
</div>
<div class="layui-form-item layui-form-text">
<label class="layui-form-label">摘要</label>
<div class="layui-input-block">
<textarea type="text" name="description" lay-verify="required" placeholder="请输入内容" autocomplete="off" class="layui-textarea">{$tag.description}</textarea>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">seo标题</label>
<div class="layui-input-inline">
<input type="text" name="title" lay-verify="required" placeholder="tag标题" autocomplete="off" class="layui-input" value="{$tag.title}">
</div>
</div>
<div class="layui-form-item layui-hide"> <div class="layui-form-item layui-hide">
<input type="text" name="id" class="layui-input layui-hide" value="{$tag.id}"> <input type="text" name="id" class="layui-input layui-hide" value="{$tag.id}">
<input type="button" lay-submit lay-filter="Tag-submit" id="Tag-submit" value="确认"> <input type="button" lay-submit lay-filter="Tag-submit" id="Tag-submit" value="确认">

View File

@ -56,8 +56,11 @@
,page: true //开启分页 ,page: true //开启分页
,cols: [[ //表头 ,cols: [[ //表头
{type: 'numbers', fixed: 'left'} {type: 'numbers', fixed: 'left'}
,{field: 'name', title: '名称', width:200} ,{field: 'name', title: '名称', width:100}
,{field: 'ename', title: '别名', minWidth:300} ,{field: 'ename', title: '别名', width:100}
,{field: 'keywords', title: '关键词', width:150}
,{field: 'description', title: '摘要', minWidth:300}
,{field: 'title', title: 'seo标题', width:200}
,{field: 'time', title: '时间', minWidth:100} ,{field: 'time', title: '时间', minWidth:100}
,{fixed: 'right', title:'操作', toolbar: '#barDemo', width:150} ,{fixed: 'right', title:'操作', toolbar: '#barDemo', width:150}
]] ]]
@ -105,7 +108,7 @@
title: '编辑Tag', title: '编辑Tag',
content: 'edit.html?id='+ id, content: 'edit.html?id='+ id,
maxmin: true, maxmin: true,
area : ['400px' , '300px'], area : ['450px' , '80%'],
btn: ['确定', '取消'], btn: ['确定', '取消'],
yes: function(index, layero){ yes: function(index, layero){
var iframeWindow = window['layui-layer-iframe'+ index] var iframeWindow = window['layui-layer-iframe'+ index]
@ -144,7 +147,7 @@
title: '添加Tag', title: '添加Tag',
content: 'add.html', content: 'add.html',
maxmin: true, maxmin: true,
area : ['400px' , '300px'], area : ['450px' , '80%'],
btn: ['确定', '取消'], btn: ['确定', '取消'],
yes: function(index, layero){ yes: function(index, layero){
var iframeWindow = window['layui-layer-iframe'+ index] var iframeWindow = window['layui-layer-iframe'+ index]

View File

@ -324,7 +324,13 @@ class Article extends Model
} }
} }
// 标签列表 /**
* 标签列表
*
* @param [type] $tagId 标签id
* @param [type] $limit 输出数量
* @return void
*/
public function getAllTags($tagId) public function getAllTags($tagId)
{ {
$allTags = $this::hasWhere('taglist',['tag_id'=>$tagId]) $allTags = $this::hasWhere('taglist',['tag_id'=>$tagId])
@ -335,7 +341,6 @@ class Article extends Model
}]) }])
->where(['status'=>1]) ->where(['status'=>1])
->order('pv desc') ->order('pv desc')
->limit(50)
->append(['url']) ->append(['url'])
->select() ->select()
->toArray(); ->toArray();
@ -343,6 +348,60 @@ class Article extends Model
return $allTags; return $allTags;
} }
/**
* 相关文章(标签)
* 相同标签文章,不包含自己
* @param [type] $tagId
* @param [type] $limit
* @return void
*/
public function getRelationTags($tagId,$id,$limit)
{
$allTags = $this::hasWhere('taglist',['tag_id'=>$tagId])
->with(['user' => function($query){
$query->field('id,name,nickname,user_img,area_id,vip');
},'cate' => function($query){
$query->where('delete_time',0)->field('id,catename,ename');
}])
->where(['status'=>1])
// ->where('article.id', '<>', $id)
->order('pv desc')
->limit($limit)
->append(['url'])
->select()
->toArray();
return $allTags;
}
/**
* 上下文
*
* @param [type] $id 当前文章ID
* @param [type] $cid 当前分类ID
* @return void
*/
public function getPrevNextArticle($id,$cid)
{
//上一篇
$previous = $this::field('id,title,cate_id')
->where([
['id', '<', $id],
['cate_id', '=', $cid],
['status', '=',1]
])->order('id desc')->limit(1)->append(['url'])->select()->toArray();
//下一篇
$next = $this::field('id,title,cate_id')
->where([
['id', '>', $id],
['cate_id', '=', $cid],
['status', '=',1]
])->limit(1)->append(['url'])->select()->toArray();
return ['previous' => $previous, 'next' => $next];
}
// 获取url // 获取url
public function getUrlAttr($value,$data) public function getUrlAttr($value,$data)
{ {

View File

@ -2,7 +2,7 @@
/* /*
* @Author: TaoLer <alipay_tao@qq.com> * @Author: TaoLer <alipay_tao@qq.com>
* @Date: 2021-12-06 16:04:50 * @Date: 2021-12-06 16:04:50
* @LastEditTime: 2022-08-15 13:37:58 * @LastEditTime: 2022-08-16 12:18:29
* @LastEditors: TaoLer * @LastEditors: TaoLer
* @Description: 评论模型 * @Description: 评论模型
* @FilePath: \TaoLer\app\common\model\Comment.php * @FilePath: \TaoLer\app\common\model\Comment.php
@ -83,9 +83,9 @@ class Comment extends Model
public function getUserCommentList(int $id) { public function getUserCommentList(int $id) {
$userCommList = $this::field('id,user_id,create_time,delete_time,article_id,content') $userCommList = $this::field('id,user_id,create_time,delete_time,article_id,content')
->with(['article' => function(\think\model\Relation $query){ ->with(['article' => function(\think\model\Relation $query){
$query->withField('id,title,cate_id,delete_time')->where(['status' => 1,'delete_time' => 0]); $query->withField('id,title,cate_id,delete_time')->where(['status' => 1]);
}]) }])
->where(['user_id' => $id,'status' => 1,'delete_time'=>0]) ->where(['user_id' => $id,'status' => 1])
//->append(['url']) //->append(['url'])
->order(['create_time' => 'desc']) ->order(['create_time' => 'desc'])
//->cache(3600) //->cache(3600)

View File

@ -2,17 +2,16 @@
/* /*
* @Author: TaoLer <317927823@qq.com> * @Author: TaoLer <317927823@qq.com>
* @Date: 2021-12-06 16:04:50 * @Date: 2021-12-06 16:04:50
* @LastEditTime: 2022-07-27 21:25:14 * @LastEditTime: 2022-08-16 12:01:52
* @LastEditors: TaoLer * @LastEditors: TaoLer
* @Description: 优化版 * @Description: 优化版
* @FilePath: \github\TaoLer\app\common\model\MessageTo.php * @FilePath: \TaoLer\app\common\model\MessageTo.php
* Copyright (c) 2020~2022 https://www.aieok.com All rights reserved. * Copyright (c) 2020~2022 https://www.aieok.com All rights reserved.
*/ */
namespace app\common\model; namespace app\common\model;
use think\Model; use think\Model;
use think\model\concern\SoftDelete; use think\model\concern\SoftDelete;
use think\Db;
class MessageTo extends Model class MessageTo extends Model
{ {
@ -34,9 +33,11 @@ class MessageTo extends Model
//得到消息数 //得到消息数
public function getMsgNum($id) public function getMsgNum($id)
{ {
$msg = $this::field('id')->where(['receve_id'=>$id,'is_read'=>0])->column('id'); $msg = $this::where(['receve_id'=>$id,'is_read'=>0])->column('id');
if(!is_null($msg)) { if($num = count($msg)) {
return count($msg); return $num;
} else {
return 0;
} }
} }

View File

@ -2,18 +2,15 @@
/* /*
* @Author: TaoLer <317927823@qq.com> * @Author: TaoLer <317927823@qq.com>
* @Date: 2021-12-06 16:04:50 * @Date: 2021-12-06 16:04:50
* @LastEditTime: 2022-08-14 07:32:32 * @LastEditTime: 2022-08-16 12:20:49
* @LastEditors: TaoLer * @LastEditors: TaoLer
* @Description: 签到模型 * @Description: 签到模型
* @FilePath: \github\TaoLer\app\common\model\Sign.php * @FilePath: \TaoLer\app\common\model\Sign.php
* Copyright (c) 2020~2022 https://www.aieok.com All rights reserved. * Copyright (c) 2020~2022 https://www.aieok.com All rights reserved.
*/ */
namespace app\common\model; namespace app\common\model;
use think\Model; use think\Model;
use think\model\concern\SoftDelete;
use think\Db;
use think\facade\Session;
class Sign extends Model class Sign extends Model
{ {

View File

@ -2,7 +2,7 @@
/* /*
* @Author: TaoLer <alipay_tao@qq.com> * @Author: TaoLer <alipay_tao@qq.com>
* @Date: 2021-12-06 16:04:50 * @Date: 2021-12-06 16:04:50
* @LastEditTime: 2022-06-28 13:54:55 * @LastEditTime: 2022-08-16 12:21:14
* @LastEditors: TaoLer * @LastEditors: TaoLer
* @Description: 链接设置 * @Description: 链接设置
* @FilePath: \TaoLer\app\common\model\Slider.php * @FilePath: \TaoLer\app\common\model\Slider.php
@ -43,7 +43,7 @@ class Slider extends Model
{ {
$sliders = Cache::get('slider'.$type); $sliders = Cache::get('slider'.$type);
if(!$sliders){ if(!$sliders){
$sliders = $this::where(['slid_status'=>1,'delete_time'=>0,'slid_type'=>$type])->whereTime('slid_over','>=',time())->select()->toArray(); $sliders = $this::where(['slid_status'=>1,'slid_type'=>$type])->whereTime('slid_over','>=',time())->select()->toArray();
Cache::tag('tagSlider'.$type)->set('slider'.$type,$sliders,3600); Cache::tag('tagSlider'.$type)->set('slider'.$type,$sliders,3600);
} }
return $sliders; return $sliders;

View File

@ -91,22 +91,29 @@ class Article extends BaseController
//赞列表 //赞列表
$userZanList = []; $userZanList = [];
$userZan = UserZan::where(['article_id'=>$id,'type'=>1])->select(); $userZan = UserZan::where(['article_id'=>$id,'type'=>1])->select();
if(count($userZan)) {
foreach($userZan as $v){ foreach($userZan as $v){
$userZanList[] = ['userImg'=>$v->user->user_img,'name'=>$v->user->name]; $userZanList[] = ['userImg'=>$v->user->user_img,'name'=>$v->user->name];
} }
}
// 设置内容的tag内链 // 设置内容的tag内链
$artDetail['content'] = $this->setArtTagLink($artDetail['content']); $artDetail['content'] = $this->setArtTagLink($artDetail['content']);
// 标签 // 标签
$tags = []; $tags = [];
$relationArticle = [];
$artTags = Db::name('taglist')->where('article_id',$id)->select(); $artTags = Db::name('taglist')->where('article_id',$id)->select();
// halt($artTags); if(count($artTags)) {
foreach($artTags as $v) { foreach($artTags as $v) {
$tag = Db::name('tag')->find($v['tag_id']); $tag = Db::name('tag')->find($v['tag_id']);
if(!is_null($tag))
$tags[] = ['name'=>$tag['name'],'url'=> (string) url('tag_list',['ename'=>$tag['ename']])]; $tags[] = ['name'=>$tag['name'],'url'=> (string) url('tag_list',['ename'=>$tag['ename']])];
} }
//相关帖子
$relationArticle = $article->getRelationTags($artTags[0]['tag_id'],$id,5);
}
$tpl = Db::name('cate')->where('id', $artDetail['cate_id'])->value('detpl'); $tpl = Db::name('cate')->where('id', $artDetail['cate_id'])->value('detpl');
$download = $artDetail['upzip'] ? download($artDetail['upzip'],'file') : ''; $download = $artDetail['upzip'] ? download($artDetail['upzip'],'file') : '';
@ -115,6 +122,19 @@ class Article extends BaseController
Db::name('article')->where('id',$id)->inc('pv')->update(); Db::name('article')->where('id',$id)->inc('pv')->update();
$pv = Db::name('article')->field('pv')->where('id',$id)->value('pv'); $pv = Db::name('article')->field('pv')->where('id',$id)->value('pv');
//上一篇下一篇
$upDownArt = $article->getPrevNextArticle($id,$artDetail['cate_id']);
if(empty($upDownArt['previous'][0])) {
$previous = '前面已经没有了!';
} else {
$previous = '<a href="' . $upDownArt['previous'][0]['url'] . '" rel="prev">' . $upDownArt['previous'][0]['title'] . '</a>';
}
if(empty($upDownArt['next'][0])) {
$next = '已经是最新的内容了!';
} else {
$next = '<a href="' . $upDownArt['next'][0]['url'] . '" rel="prev">' . $upDownArt['next'][0]['title'] . '</a>';
}
//评论 //评论
$comments = $this->getComments($id, $page); $comments = $this->getComments($id, $page);
//最新评论时间 //最新评论时间
@ -128,7 +148,7 @@ class Article extends BaseController
//分类钻展赞助 //分类钻展赞助
$ad_comm = $ad->getSliderList(7); $ad_comm = $ad->getSliderList(7);
//push //push
$push_js = Db::name('push_jscode')->where(['delete_time'=>0])->cache(true)->select(); $push_js = Db::name('push_jscode')->where(['delete_time'=>0,'type'=>1])->cache(true)->select();
View::assign([ View::assign([
'article' => $artDetail, 'article' => $artDetail,
@ -137,6 +157,9 @@ class Article extends BaseController
'ad_art' => $ad_artImg, 'ad_art' => $ad_artImg,
'ad_comm' => $ad_comm, 'ad_comm' => $ad_comm,
'tags' => $tags, 'tags' => $tags,
'relationArticle' => $relationArticle,
'previous' => $previous,
'next' => $next,
'page' => $page, 'page' => $page,
'comments' => $comments, 'comments' => $comments,
'push_js' => $push_js, 'push_js' => $push_js,
@ -311,7 +334,6 @@ class Article extends BaseController
$data = Request::only(['id','cate_id','title','title_color','user_id','content','upzip','keywords','description','captcha']); $data = Request::only(['id','cate_id','title','title_color','user_id','content','upzip','keywords','description','captcha']);
$tagId = input('tagid'); $tagId = input('tagid');
// 验证码 // 验证码
if(Config::get('taoler.config.post_captcha') == 1) if(Config::get('taoler.config.post_captcha') == 1)
{ {
@ -372,20 +394,8 @@ class Article extends BaseController
return $editRes; return $editRes;
} }
} }
// 查询标签
$tag = $article->tags;
$tags = [];
if(!is_null($tag)) {
$attr = explode(',',$tag);
foreach($attr as $key => $v){
if ($v !='') {
$tags[] = $v;
}
}
} View::assign(['article'=>$article,'jspage'=>'jie']);
View::assign(['article'=>$article,'tags'=>$tags,'jspage'=>'jie']);
// 编辑多模板支持 // 编辑多模板支持
$tpl = Db::name('cate')->where('id', $article['cate_id'])->value('detpl'); $tpl = Db::name('cate')->where('id', $article['cate_id'])->value('detpl');
$appName = $this->app->http->getName(); $appName = $this->app->http->getName();
@ -471,7 +481,7 @@ class Article extends BaseController
*/ */
public function keywords() public function keywords()
{ {
$data = Request::only(['keywords','flag']); $data = Request::only(['flag','keywords','content']);
return $this->setKeywords($data); return $this->setKeywords($data);
} }

View File

@ -2,10 +2,10 @@
/* /*
* @Author: TaoLer <317927823@qq.com> * @Author: TaoLer <317927823@qq.com>
* @Date: 2021-12-06 16:04:50 * @Date: 2021-12-06 16:04:50
* @LastEditTime: 2022-07-27 21:29:43 * @LastEditTime: 2022-08-16 12:12:11
* @LastEditors: TaoLer * @LastEditors: TaoLer
* @Description: 优化版 * @Description: 优化版
* @FilePath: \github\TaoLer\app\index\controller\Message.php * @FilePath: \TaoLer\app\index\controller\Message.php
* Copyright (c) 2020~2022 https://www.aieok.com All rights reserved. * Copyright (c) 2020~2022 https://www.aieok.com All rights reserved.
*/ */
namespace app\index\controller; namespace app\index\controller;
@ -25,10 +25,10 @@ class Message extends BaseController
{ {
$messgeto = new MessageTo(); $messgeto = new MessageTo();
$num = $messgeto->getMsgNum($this->uid); $num = $messgeto->getMsgNum($this->uid);
if(!is_null($num)){ if($num){
$res = ['status' =>0,'count' => $num, 'msg' => 'ok']; $res = ['status' =>0,'count' => $num, 'msg' => 'ok'];
} else { } else {
$res = ['status' =>-1,'count' => 0, 'msg' => 'message error']; $res = ['status' =>0,'count' => 0, 'msg' => 'no message'];
} }
return json($res); return json($res);
} }
@ -37,18 +37,18 @@ class Message extends BaseController
public function find() public function find()
{ {
$msg = MessageApi::receveMsg($this->uid); $msg = MessageApi::receveMsg($this->uid);
$count = $msg->count();
$count = count($msg);
$res = []; $res = [];
if($count){ if($count){
$res = ['status'=>0,'msg'=>'','count'=>$count]; $res = ['status'=>0,'msg'=>'','count'=>$count];
foreach ($msg as $k => $v){ foreach ($msg as $k => $v){
$data = ['id'=>$v['id'],'name'=>$v['name'],'title'=>$v['title'],'content'=>$v['content'],'time'=>date("Y-m-d H:i",$v['create_time']),'link'=>$v['link'],'read'=>$v['is_read'] ? '已读':'未读','type'=>$v['message_type']]; $res['rows'][] = ['id'=>$v['id'],'name'=>$v['name'],'title'=>$v['title'],'content'=>$v['content'],'time'=>date("Y-m-d H:i",$v['create_time']),'link'=>$v['link'],'read'=>$v['is_read'] ? '已读':'未读','type'=>$v['message_type']];
$res['rows'][] = $data;
} }
} else { } else {
$res = ['status'=>-1,'msg'=>'message find error','rows'=>''];; $res = ['status'=>0,'msg'=>'message find error','rows'=>''];;
} }
//var_dump($res);
return json($res); return json($res);
} }
@ -57,9 +57,12 @@ class Message extends BaseController
{ {
$id =input('id'); $id =input('id');
if($id){ if($id){
$msg = MessageTo::field('id,message_id')->with(['messages' => function($query){ $msg = MessageTo::field('id,message_id')
$query->where('delete_time',0)->field('id,content'); ->with(['messages' => function($query){
}])->where('id',$id)->find(); $query->field('id,content');
}])
->where('id',$id)
->find();
//改变读状态 //改变读状态
if($msg->is_read == 0){ if($msg->is_read == 0){
$result = $msg->update(['id'=>$id,'is_read'=>1]); $result = $msg->update(['id'=>$id,'is_read'=>1]);

View File

@ -31,9 +31,9 @@ class Tag extends BaseController
{ {
// //
$tagEname = Request::param('ename'); $tagEname = Request::param('ename');
$tagId = Db::name('tag')->where('ename',$tagEname)->value('id'); $tag = Db::name('tag')->where('ename',$tagEname)->find();
$artList = Article::getAllTags($tagId); $artList = Article::getAllTags($tag['id']);
$slider = new Slider(); $slider = new Slider();
//首页右栏 //首页右栏
$ad_comm = $slider->getSliderList(2); $ad_comm = $slider->getSliderList(2);
@ -41,7 +41,7 @@ class Tag extends BaseController
$artHot = Article::getArtHot(10); $artHot = Article::getArtHot(10);
$assign = [ $assign = [
'tag'=>$tagEname, 'tag'=>$tag,
'artList'=>$artList, 'artList'=>$artList,
'ad_comm'=>$ad_comm, 'ad_comm'=>$ad_comm,
'artHot'=>$artHot, 'artHot'=>$artHot,

View File

@ -88,6 +88,8 @@ return [
'special column' => '选择专栏', 'special column' => '选择专栏',
'tags' => '标签', 'tags' => '标签',
'add tags' => '添加标签', 'add tags' => '添加标签',
'add keywords' => '添加关键词',
'description' => '描述',
//Sign in/up //Sign in/up
'username' => '用户', 'username' => '用户',
@ -107,7 +109,7 @@ return [
'register now' => '立即注册', 'register now' => '立即注册',
'mail/username/mobile' => '邮箱/用户名/手机号', 'mail/username/mobile' => '邮箱/用户名/手机号',
'6-16 characters' => '6-16 字符', '6-16 characters' => '6-16 字符',
'strong type encryption' => '经过强类型加密', 'strong type encryption' => '强类型加密',
'it cannot be changed' => '不能更改', 'it cannot be changed' => '不能更改',
'the only way to get back your password' => '找回密码唯一途径', 'the only way to get back your password' => '找回密码唯一途径',
'please input the password' => '请输入密码', 'please input the password' => '请输入密码',

View File

@ -489,7 +489,7 @@ CREATE TABLE `tao_system` (
`uptype` varchar(255) NOT NULL DEFAULT '0' COMMENT '上传文件类型', `uptype` varchar(255) NOT NULL DEFAULT '0' COMMENT '上传文件类型',
`copyright` varchar(100) NOT NULL DEFAULT '' COMMENT '版权', `copyright` varchar(100) NOT NULL DEFAULT '' COMMENT '版权',
`keywords` tinytext NOT NULL COMMENT '网站关键字', `keywords` tinytext NOT NULL COMMENT '网站关键字',
`descript` tinytext NOT NULL COMMENT '网站描述', `descript` text NOT NULL COMMENT '网站描述',
`state` tinytext CHARACTER SET utf8 COLLATE utf8_general_ci COMMENT '网站声明', `state` tinytext CHARACTER SET utf8 COLLATE utf8_general_ci COMMENT '网站声明',
`is_open` enum('0','1') NOT NULL DEFAULT '1' COMMENT '是否开启站点1开启0关闭', `is_open` enum('0','1') NOT NULL DEFAULT '1' COMMENT '是否开启站点1开启0关闭',
`is_comment` enum('0','1') NOT NULL DEFAULT '1' COMMENT '是否开启评论1开启0关闭', `is_comment` enum('0','1') NOT NULL DEFAULT '1' COMMENT '是否开启评论1开启0关闭',
@ -519,6 +519,9 @@ CREATE TABLE `tao_tag` (
`id` int(10) NOT NULL AUTO_INCREMENT COMMENT 'tag自增id', `id` int(10) NOT NULL AUTO_INCREMENT COMMENT 'tag自增id',
`name` varchar(20) NOT NULL COMMENT '名称', `name` varchar(20) NOT NULL COMMENT '名称',
`ename` varchar(20) NOT NULL COMMENT '英文名', `ename` varchar(20) NOT NULL COMMENT '英文名',
`keywords` varchar(255) NOT NULL COMMENT '关键词',
`description` text NOT NULL COMMENT '摘要',
`title` varchar(100) NOT NULL COMMENT '标签',
`create_time` int NOT NULL COMMENT '创建时间', `create_time` int NOT NULL COMMENT '创建时间',
`update_time` int NOT NULL COMMENT '更新时间', `update_time` int NOT NULL COMMENT '更新时间',
PRIMARY KEY (`id`), PRIMARY KEY (`id`),

View File

@ -1,4 +1,13 @@
<?php <?php
/*
* @Author: TaoLer <317927823@qq.com>
* @Date: 2021-12-06 16:04:50
* @LastEditTime: 2022-08-16 12:09:28
* @LastEditors: TaoLer
* @Description: 优化版
* @FilePath: \TaoLer\extend\taoler\com\Message.php
* Copyright (c) 2020~2022 https://www.aieok.com All rights reserved.
*/
namespace taoler\com; namespace taoler\com;
@ -45,7 +54,7 @@ class Message
*/ */
public static function receveMsg($uid) public static function receveMsg($uid)
{ {
$msg = Db::name('message_to') return Db::name('message_to')
->alias('t') ->alias('t')
->join('message m','t.message_id = m.id' ) ->join('message m','t.message_id = m.id' )
->join('user u','t.send_id = u.id') ->join('user u','t.send_id = u.id')
@ -53,8 +62,7 @@ class Message
->where('t.receve_id',$uid) ->where('t.receve_id',$uid)
->where(['t.delete_time'=>0]) ->where(['t.delete_time'=>0])
->order(['t.is_read'=>'asc','t.create_time'=>'desc']) ->order(['t.is_read'=>'asc','t.create_time'=>'desc'])
->select(); ->select()->toArray();
return $msg;
} }
/** /**
@ -67,10 +75,10 @@ class Message
public static function insertMsg(int $uid) public static function insertMsg(int $uid)
{ {
//得到所有系统消息 //得到所有系统消息
$sysmsg = MessageModel::where(['type'=>0,'delete_time'=>0])->select(); $sysmsg = MessageModel::where(['type'=>0])->select();
foreach($sysmsg as $smg){ foreach($sysmsg as $smg){
//检验通知ID是否被写入个人收件箱 //检验通知ID是否被写入个人收件箱
$msgId = Db::name('message_to')->where('message_id',$smg['id'])->find(); $msgId = Db::name('message_to')->where(['message_id'=>$smg['id'],'delete_time'=>0])->find();
if(!$msgId){ if(!$msgId){
$result = MessageTo::create(['send_id'=>$smg['user_id'],'receve_id'=>$uid,'message_id'=>$smg['id'],'message_type'=>$smg['type']]); $result = MessageTo::create(['send_id'=>$smg['user_id'],'receve_id'=>$uid,'message_id'=>$smg['id'],'message_type'=>$smg['type']]);
} }

View File

@ -44,7 +44,7 @@
</div> </div>
{/if} {/if}
</div> </div>
<div class="layui-row layui-col-space15 layui-form-item layui-hide" id="LAY_quiz"> <!-- <div class="layui-row layui-col-space15 layui-form-item layui-hide" id="LAY_quiz">
<div class="layui-col-md3"> <div class="layui-col-md3">
<label class="layui-form-label">所属产品</label> <label class="layui-form-label">所属产品</label>
<div class="layui-input-block"> <div class="layui-input-block">
@ -70,41 +70,34 @@
<input type="text" id="L_browser" value="" name="browser" placeholder="浏览器名称及版本IE 11" autocomplete="off" class="layui-input" /> <input type="text" id="L_browser" value="" name="browser" placeholder="浏览器名称及版本IE 11" autocomplete="off" class="layui-input" />
</div> </div>
</div> </div>
</div> </div> -->
<div class="layui-form-item layui-form-text"> <div class="layui-form-item layui-form-text">
<div class="layui-input-block"> <div class="layui-input-block">
<textarea <textarea id="L_content" name="content" required lay-verify="required" placeholder="{:lang('please input the content')}" class="layui-textarea fly-editor"></textarea>
id="L_content"
name="content"
required
lay-verify="required"
placeholder="{:lang('please input the content')}"
class="layui-textarea fly-editor"
style="height: 260px">
</textarea>
</div> </div>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item">
<div class="layui-inline"> <div class="layui-inline">
<label class="layui-form-label">{:lang('enclosure')}</label> <label class="layui-form-label">{:lang('enclosure')}</label>
<div class="layui-input-inline" style="width: 190px"> <div class="layui-input-inline" style="width: 190px">
<input type="text" class="layui-input" name="upzip" value="" placeholder="zip,image文件" title="上传附件" /> <input type="text" class="layui-input" name="upzip" value="" placeholder="zip,image" title="上传附件" />
</div> </div>
<button type="button" class="layui-btn" id="zip-button"><i class="layui-icon"></i>{:lang('uploads')}</button> <button type="button" class="layui-btn" id="zip-button"><i class="layui-icon"></i>{:lang('uploads')}</button>
</div> </div>
</div> </div>
<div class="layui-form-item"> {//描述}
<label class="layui-form-label">{:lang('描述')}</label> <div class="layui-form-item layui-hide">
<label class="layui-form-label">{:lang('description')}</label>
<div class="layui-input-block"> <div class="layui-input-block">
<textarea name="description" class="layui-textarea" placeholder="SEO描述"></textarea> <textarea name="description" class="layui-textarea" placeholder="SEO {:lang('description')}"></textarea>
</div> </div>
</div> </div>
{//关键词} {//关键词}
<div class="layui-form-item"> <div class="layui-form-item layui-hide">
<label class="layui-form-label">{:lang('添加关键词')}</label> <label class="layui-form-label">{:lang('add keywords')}</label>
<div class="layui-input-block"> <div class="layui-input-block">
<!-- <input type="text" class="layui-input" name="" id="inputTags" value="" placeholder="多个回车添加" title="添加关键词" /> --> <!-- <input type="text" class="layui-input" name="" id="inputTags" value="" placeholder="多个回车添加" title="添加关键词" /> -->
<input type="text" class="layui-input" name="keywords" value="" placeholder="多个用逗号隔开" title="添加关键词" /> <input type="text" class="layui-input" name="keywords" value="" placeholder="多个用逗号隔开" title="{:lang('add keywords')}" />
</div> </div>
</div> </div>
{//tag} {//tag}
@ -154,13 +147,14 @@
</div> </div>
</div> </div>
</div> </div>
{include file="public/menu" /} {/block} {include file="public/menu" /}
{/block}
{block name="script"} {block name="script"}
{:hook('taonyeditor')} {:hook('taonyeditor')}
<script src="/static/xm-select.js"></script> <script src="/static/xm-select.js"></script>
<script> <script>
layui.use(["fly", "plyr",'inputTags'], function () { layui.use(["fly", "plyr"], function () {
var $ = layui.jquery, var $ = layui.jquery,
fly = layui.fly, fly = layui.fly,
form = layui.form, form = layui.form,
@ -168,6 +162,9 @@
upload = layui.upload, upload = layui.upload,
plyr = layui.plyr; plyr = layui.plyr;
//获取百度标签标志tag或者word;
var flag = 'word';
//如果你是采用模版自带的编辑器,你需要开启以下语句来解析。 //如果你是采用模版自带的编辑器,你需要开启以下语句来解析。
var taonystatus = "{:hook('taonystatus')}"; var taonystatus = "{:hook('taonystatus')}";
@ -180,24 +177,11 @@
}) })
} }
var inputTags = layui.inputTags;
//关键词
inputTags.render({
elem:'#inputTags',
content: [],
aldaBtn: false,
done: function(value){
//console.log(value)
var keywords = this.content.join(',');
$("input[name='keywords']").val(keywords);
}
})
//1.渲染标签 //1.渲染标签
var addTags = xmSelect.render({ var addTags = xmSelect.render({
el: '#tag', el: '#tag',
name: 'tagid', name: 'tagid',
layVerify: 'required', layVerify: '',
layVerType: 'msg', layVerType: 'msg',
paging: true, paging: true,
pageSize: 5, pageSize: 5,
@ -218,22 +202,36 @@
if (conf !== "1") { if (conf !== "1") {
$("#L_title").on("blur", function () { $("#L_title").on("blur", function () {
var title = $(this).val(); var title = $(this).val();
var flag = "on"; var content = $("#L_content").val();
$.ajax({ getBdiduWords(flag,title,content);
type: "post",
url: "{:url('article/keywords')}",
data: { keywords: keywords, flag: flag },
daType: "json",
success: function (res) {
if (res.code == 0) {
$("input[name='keywords']").val(res.data);
}
},
})
}); });
} }
// 从详情页自动调用端口过滤,获取描述信息
$("#L_content").mouseleave(function() {
var content = $(this).val().replace(/[\r\n]/g,"").replace(/\n/g, '').replace(/\s/g, '').replace(/\t/g, '');
var title = $("#L_title").val();
$.post("{:url('article/getDescription')}", { content: content }, function(data){
if (data.code == 0) {
$('[name="description"]').val(data.data);
}
});
getBdiduWords(flag,title,content);
});
// 获取百度分词接口的关键词
function getBdiduWords(flag,title,content) {
console.log(flag,title,content)
$.post("{:url('article/keywords')}",{ keywords: title, content:content, flag: flag }, function (res) {
if (res.code == 0) {
$("input[name='keywords']").val(res.data.join(','));
}
},
)
}
// 百度词条 // 百度词条
(function(){
var baidu_title_switch = "{:config('taoler.config.baidu_title_switch')}"; var baidu_title_switch = "{:config('taoler.config.baidu_title_switch')}";
if(baidu_title_switch == 1) { if(baidu_title_switch == 1) {
$("#L_title").bind('input propertychange',function () { $("#L_title").bind('input propertychange',function () {
@ -268,29 +266,18 @@
} }
}); });
} }
}())
// 从详情页自动调用端口过滤,获取描述信息 //关闭百度词条
$("#L_content").mouseleave(function() { $(function(){
var content = $(this).val().replace(/[\r\n]/g,"").replace(/\n/g, '').replace(/\s/g, '').replace(/\t/g, ''); $(".bdsug").mouseleave(function(){
$.post("{:url('article/getDescription')}", { content: content }, function(data){ $(this).addClass('layui-hide');
if (data.code == 0) { // $("#LAY_ucm").click(function(){
$('[name="description"]').val(data.data); // $(this).addClass('layui-hide');
} // });
}); });
}); });
// 改变标题颜色
colorpicker.render({
elem: "#color",
color: "#393d49",
predefine: true, // 开启预定义颜色
done: function (color) {
//譬如你可以在回调中把得到的 color 赋值给表单
$("#L_title_color").val(color);
$("#L_title").css("color", color);
},
});
// 发布文章 // 发布文章
form.on("submit(article-add)", function (data) { form.on("submit(article-add)", function (data) {
var field = data.field; var field = data.field;
@ -316,6 +303,18 @@
return false; return false;
}); });
// 改变标题颜色
colorpicker.render({
elem: "#color",
color: "#393d49",
predefine: true, // 开启预定义颜色
done: function (color) {
//譬如你可以在回调中把得到的 color 赋值给表单
$("#L_title_color").val(color);
$("#L_title").css("color", color);
},
});
//上传附件 //上传附件
upload.render({ upload.render({
elem: "#zip-button", elem: "#zip-button",

View File

@ -46,11 +46,13 @@
<div class="detail-body-wenda photos" id="content">{$article.content|raw}</div> <div class="detail-body-wenda photos" id="content">{$article.content|raw}</div>
<div style="margin-top: 25px">本文链接:<a href="{$Request.domain}{$Request.url}">{$Request.domain}{$Request.url}</a></div> <div style="margin-top: 25px">本文链接:<a href="{$Request.domain}{$Request.url}">{$Request.domain}{$Request.url}</a></div>
{notempty name="tags"}
<div style="margin-top: 15px">标签 <div style="margin-top: 15px">标签
{volist name="tags" id="vo" } {volist name="tags" id="vo" }
<a href="{$vo.url}"><span class="layui-btn layui-btn-xs layui-btn-normal layui-btn-radius">{$vo.name}</span></a> <a href="{$vo.url}"><span class="layui-btn layui-btn-xs layui-btn-normal layui-btn-radius">{$vo.name}</span></a>
{/volist} {/volist}
</div> </div>
{/notempty}
<div style="margin: 20px 0px 15px 0px; color: rgb(130, 125, 125)"> <div style="margin: 20px 0px 15px 0px; color: rgb(130, 125, 125)">
<p>{$sysInfo.state}</p> <p>{$sysInfo.state}</p>
</div> </div>

View File

@ -100,20 +100,19 @@
<button type="button" class="layui-btn" id="zip-button"><i class="layui-icon"></i>上传文件</button> <button type="button" class="layui-btn" id="zip-button"><i class="layui-icon"></i>上传文件</button>
</div> </div>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item layui-hide">
<label class="layui-form-label">{:lang('描述')}</label> <label class="layui-form-label">{:lang('描述')}</label>
<div class="layui-input-block"> <div class="layui-input-block">
<textarea name="description" class="layui-textarea" placeholder="SEO描述">{$article.description}</textarea> <textarea name="description" class="layui-textarea" placeholder="SEO描述">{$article.description}</textarea>
</div> </div>
</div> </div>
{//关键词} {//关键词}
<div class="layui-form-item"> <div class="layui-form-item layui-hide">
<label class="layui-form-label">{:lang('添加关键词')}</label> <label class="layui-form-label">{:lang('添加关键词')}</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="text" class="layui-input" name="keywords" value="{$article.keywords}" placeholder="多个英文逗号隔开" title="添加关键词" /> <input type="text" class="layui-input" name="keywords" value="{$article.keywords}" placeholder="多个英文逗号隔开" title="添加关键词" />
</div> </div>
</div> </div>
{//tag} {//tag}
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">{:lang('add tags')}</label> <label class="layui-form-label">{:lang('add tags')}</label>
@ -121,7 +120,6 @@
<div id="tag"></div> <div id="tag"></div>
</div> </div>
</div> </div>
{if config('taoler.config.post_captcha') == 1} {if config('taoler.config.post_captcha') == 1}
<div class="layui-form-item"> <div class="layui-form-item">
<label for="L_vercode" class="layui-form-label">{:lang('captcha')}</label> <label for="L_vercode" class="layui-form-label">{:lang('captcha')}</label>
@ -156,7 +154,7 @@ var artId = "{$article.id}";
var addTags = xmSelect.render({ var addTags = xmSelect.render({
el: '#tag', el: '#tag',
name: 'tagid', name: 'tagid',
layVerify: 'required', layVerify: '',
layVerType: 'msg', layVerType: 'msg',
paging: true, paging: true,
pageSize: 5, pageSize: 5,
@ -189,6 +187,9 @@ $.get("{:url('get_all_tag')}",function(res){
,upload = layui.upload ,upload = layui.upload
,plyr = layui.plyr; ,plyr = layui.plyr;
//获取百度标签标志tag或者word;
var flag = 'word';
//如果你是采用模版自带的编辑器,你需要开启以下语句来解析。 //如果你是采用模版自带的编辑器,你需要开启以下语句来解析。
var taonystatus = "{:hook('taonystatus')}"; var taonystatus = "{:hook('taonystatus')}";
@ -201,56 +202,88 @@ $.get("{:url('get_all_tag')}",function(res){
}) })
} }
//预定义颜色项 // 通过标题内容自动获取tag的内容
colorpicker.render({
elem: '#color'
,color: "{$article.title_color ?? '#333'}"
,predefine: true // 开启预定义颜色
,done: function(color){
//console.log(color);
//譬如你可以在回调中把得到的 color 赋值给表单
$('#L_title_color').val(color);
//改变标题颜色
$('#L_title').css("color", color);
}
});
// 获取描述的内容
$("#L_content").bind('input propertychange', function(){
var content = $(this).val()
$.ajax({
type:"post",
url:"{:url('article/getDescription')}",
data:{"content":content},
daType:"json",
success:function (data){
if (data.code == 0) {
$('[name="description"]').val(data.data);
}
}
});
return false;
})
// 获取百度获取的关键词内容
var conf = "{:empty(config('taoler.baidu.client_id'))}"; var conf = "{:empty(config('taoler.baidu.client_id'))}";
if(conf !== '1'){ if(conf !== '1'){
$("#L_title").on('blur', function(){ $("#L_title").on('blur', function(){
var title = $(this).val(); var title = $(this).val();
var flag = 'on'; var content = $("#L_content").val();
$.ajax({ getBdiduWords(flag,title,content);
type:"post",
url:"{:url('article/keywords')}",
data:{"keywords":keywords,"flag":flag},
daType:"json",
success:function (data){
$("input[name='keywords']").val(res.data);
}
});
return false;
}) })
} }
// 从详情页自动调用端口过滤,获取描述信息
$("#L_content").bind('input propertychange', function(){
var content = $(this).val()
var title = $("#L_title").val();
$.post("{:url('article/getDescription')}", { content: content }, function(data){
if (data.code == 0) {
$('[name="description"]').val(data.data);
}
});
getBdiduWords(flag,title,content);
})
// 获取百度分词接口的关键词
function getBdiduWords(flag,title,content) {
console.log(flag,title,content)
$.post("{:url('article/keywords')}",{ keywords: title, content:content, flag: flag }, function (res) {
if (res.code == 0) {
console.log(res.data)
$("input[name='keywords']").val(res.data.join(','));
}
},
)
}
// 百度词条
(function(){
var baidu_title_switch = "{:config('taoler.config.baidu_title_switch')}";
if(baidu_title_switch == 1) {
$("#L_title").bind('input propertychange',function () {
var title = $(this).val();
var str = '';
if(title.length > 0 ) {
$.post("{:url('article/getWordList')}",{title:title},function(res){
// 动态生成ur>li内容
if (res.code == 0) {
// 显示动态框
$(".bdsug").removeClass('layui-hide');
for (var i = 0; i < res.data.length; i++) {
//str += '<li data-key=' + res.data[i].q + '><b>' + res.data[i].q.replace(title,'') + '</b></li>';
str += '<li data-key=' + res.data[i].q + '><b>' + res.data[i].q + '</b></li>';
}
// 清空ul并追加li
$('.wordlist').empty().append(str);
// 点击李获取li值并复制给#L_title input的value
$(".bdsug li").on('click',function(){
var word = $(this).attr('data-key');
var words = title + '(' + word + ')';
$("#L_title").val(words);
// 关闭动态框
$(".bdsug").addClass('layui-hide');
});
} else {
$(".bdsug").addClass('layui-hide');
}
});
} else {
$(".bdsug").addClass('layui-hide');
}
});
}
}())
//关闭百度词条
$(function(){
$(".bdsug").mouseleave(function(){
$(this).addClass('layui-hide');
// $("#LAY_ucm").click(function(){
// $(this).addClass('layui-hide');
// });
});
});
//编辑文章 //编辑文章
form.on('submit(article-edit)', function(data){ form.on('submit(article-edit)', function(data){
var field = data.field; var field = data.field;
@ -273,6 +306,20 @@ $.get("{:url('get_all_tag')}",function(res){
return false; return false;
}); });
//预定义颜色项
colorpicker.render({
elem: '#color'
,color: "{$article.title_color ?? '#333'}"
,predefine: true // 开启预定义颜色
,done: function(color){
//console.log(color);
//譬如你可以在回调中把得到的 color 赋值给表单
$('#L_title_color').val(color);
//改变标题颜色
$('#L_title').css("color", color);
}
});
//指定允许上传的文件类型 //指定允许上传的文件类型
upload.render({ upload.render({
elem: '#zip-button' elem: '#zip-button'

View File

@ -33,11 +33,13 @@
{// 内容} {// 内容}
<div class="detail-body photos" style="font-size: 18px;line-height: 200%;" id="content">{$article.content|raw}</div> <div class="detail-body photos" style="font-size: 18px;line-height: 200%;" id="content">{$article.content|raw}</div>
<div style="margin-top: 25px;">本文链接:<a href="{$Request.domain}{$Request.url}">{$Request.domain}{$Request.url}</a></div> <div style="margin-top: 25px;">本文链接:<a href="{$Request.domain}{$Request.url}">{$Request.domain}{$Request.url}</a></div>
{notempty name="tags"}
<div style="margin-top: 15px">标签 <div style="margin-top: 15px">标签
{volist name="tags" id="vo" } {volist name="tags" id="vo" }
<a href="{$vo.url}"><span class="layui-btn layui-btn-xs layui-btn-normal layui-btn-radius">{$vo.name}</span></a> <a href="{$vo.url}"><span class="layui-btn layui-btn-xs layui-btn-normal layui-btn-radius">{$vo.name}</span></a>
{/volist} {/volist}
</div> </div>
{/notempty}
<div style="margin: 20px 0px 15px 0px; color: rgb(130, 125, 125);"> <div style="margin: 20px 0px 15px 0px; color: rgb(130, 125, 125);">
<p>{$sysInfo.state}</p> <p>{$sysInfo.state}</p>
</div> </div>

View File

@ -55,11 +55,13 @@
{// 内容} {// 内容}
<div class="detail-body photos mce-content-body" id="content">{$article.content|raw}</div> <div class="detail-body photos mce-content-body" id="content">{$article.content|raw}</div>
<div style="margin-top: 25px;">本文链接:<a href="{$Request.domain}{$Request.url}">{$Request.domain}{$Request.url}</a></div> <div style="margin-top: 25px;">本文链接:<a href="{$Request.domain}{$Request.url}">{$Request.domain}{$Request.url}</a></div>
{notempty name="tags"}
<div style="margin-top: 15px">标签 <div style="margin-top: 15px">标签
{volist name="tags" id="vo" } {volist name="tags" id="vo" }
<a href="{$vo.url}"><span class="layui-btn layui-btn-xs layui-btn-normal layui-btn-radius">{$vo.name}</span></a> <a href="{$vo.url}"><span class="layui-btn layui-btn-xs layui-btn-normal layui-btn-radius">{$vo.name}</span></a>
{/volist} {/volist}
</div> </div>
{/notempty}
<div style="margin: 20px 0px 15px 0px; color: rgb(130, 125, 125);"> <div style="margin: 20px 0px 15px 0px; color: rgb(130, 125, 125);">
<p>{$sysInfo.state}</p> <p>{$sysInfo.state}</p>
</div> </div>

View File

@ -37,7 +37,7 @@
<li class="layui-nav-item"><a class="iconfont icon-touxiang" href="{:url('user_login')}"></a></li> <li class="layui-nav-item"><a class="iconfont icon-touxiang" href="{:url('user_login')}"></a></li>
<li class="layui-nav-item layui-hide-xs"><a href="{:url('user_login')}">{:lang('login')}</a></li> <li class="layui-nav-item layui-hide-xs"><a href="{:url('user_login')}">{:lang('login')}</a></li>
<li class="layui-nav-item layui-hide-xs"><a href="{:url('user_reg')}">{:lang('register')}</a></li> <li class="layui-nav-item layui-hide-xs"><a href="{:url('user_reg')}">{:lang('register')}</a></li>
<li class="layui-nav-item layui-hide-xs" > <li class="layui-nav-item layui-hide-xs layui-hide">
<select name="language" style="width:50px;" lay-filter="language" lay-verify="" id="language"> <select name="language" style="width:50px;" lay-filter="language" lay-verify="" id="language">
<option value="cn" {if cookie('think_lang') == 'zh-cn'} selected {/if} >{:lang('chinese')}</option> <option value="cn" {if cookie('think_lang') == 'zh-cn'} selected {/if} >{:lang('chinese')}</option>
<option value="tw" {if cookie('think_lang') == 'zh-tw'} selected {/if} >{:lang('tChinese')}</option> <option value="tw" {if cookie('think_lang') == 'zh-tw'} selected {/if} >{:lang('tChinese')}</option>

View File

@ -8,19 +8,18 @@
* Copyright (c) 2020~2022 https://www.aieok.com All rights reserved. * Copyright (c) 2020~2022 https://www.aieok.com All rights reserved.
--> -->
{extend name="public/base" /} {extend name="public/base" /}
{block name="title"}{$tag} - {$sysInfo.webname}{/block} {block name="title"}{$tag.title} - {$sysInfo.webname}{/block}
{block name="keywords"}{$tag},{$sysInfo.keywords}{/block} {block name="keywords"}{$tag.keywords}{/block}
{block name="description"}{$tag},{$sysInfo.descript}{/block} {block name="description"}{$tag.description}{/block}
{block name="ogtitle"}<meta property="og:title" content="{$tag} - {$sysInfo.webtitle}" />{/block} {block name="ogtitle"}<meta property="og:title" content="{$tag.title} - {$sysInfo.webtitle}" />{/block}
{block name="ogdescription"}<meta property="og:description" content="{$tag},{$sysInfo.descript}" />{/block} {block name="ogdescription"}<meta property="og:description" content="{$tag.description}" />{/block}
{block name="ogimage"}<meta property="og:image" content="{$Request.domain}{$sysInfo.logo}" />{/block}
{block name="column"}{include file="public/column" /}{/block} {block name="column"}{include file="public/column" /}{/block}
{block name="content"} {block name="content"}
<div class="layui-container"> <div class="layui-container">
<div class="layui-row layui-col-space15"> <div class="layui-row layui-col-space15">
<div class="layui-col-md8"> <div class="layui-col-md8">
<div class="fly-panel" style="margin-bottom: 0;"> <div class="fly-panel" style="margin-bottom: 0;">
<div class="fly-panel-title fly-filter"><a href="" class="layui-this">共{:count($artList)}条结果</a></div> <div class="fly-panel-title fly-filter"><a href="" class="layui-this">{$tag.name}共{:count($artList)}条结果</a></div>
<ul class="fly-list"> <ul class="fly-list">
{volist name="artList" id="art"} {volist name="artList" id="art"}
<li> <li>
@ -55,11 +54,13 @@
{/volist} {/volist}
</dl> </dl>
<!--自定义--> <!--自定义-->
{notempty name="ad_comm"}
<div class="fly-panel" style="padding: 5px 0; text-align: center;"> <div class="fly-panel" style="padding: 5px 0; text-align: center;">
{volist name="ad_comm" id="vo"} {volist name="ad_comm" id="vo"}
<a href="{$vo.slid_href}" target="_blank"><img src="{$Request.domain}{$vo.slid_img}" style="max-width: 100%;"></a> <a href="{$vo.slid_href}" target="_blank"><img src="{$Request.domain}{$vo.slid_img}" style="max-width: 100%;"></a>
{/volist} {/volist}
</div> </div>
{/notempty}
</div> </div>
</div> </div>
</div> </div>

View File

@ -37,11 +37,6 @@
<i class="iconfont icon-chengshi"></i><span>{:session('user_id') ? '来自'.$u.city: lang('log in to view')}</span> <i class="iconfont icon-chengshi"></i><span>{:session('user_id') ? '来自'.$u.city: lang('log in to view')}</span>
</p> </p>
<p class="fly-home-sign">{$u.sign ? $u.sign|raw : lang('it is not signed yet')}</p> <p class="fly-home-sign">{$u.sign ? $u.sign|raw : lang('it is not signed yet')}</p>
<div class="fly-sns" data-user="">
<a href="javascript:;" class="layui-btn layui-btn-primary fly-imActive" data-type="addFriend">{:lang('add friends')}</a>
<a href="javascript:;" class="layui-btn layui-btn-normal fly-imActive" data-type="chat">{:lang('start a chat')}</a>
</div>
</div> </div>
<div class="layui-container"> <div class="layui-container">

View File

@ -97,11 +97,11 @@
</div> </div>
</div> </div>
<div class="layui-form layui-form-pane layui-tab-item"> <div class="layui-form layui-form-pane layui-tab-item layui-hide">
<ul class="app-bind"> <ul class="app-bind">
<li class="fly-msg app-havebind"> <li class="fly-msg app-havebind">
<i class="iconfont icon-qq"></i> <i class="iconfont icon-qq"></i>
<span>已成功绑定您可以使用QQ帐号直接登录Fly社区,当然,您也可以</span> <span>已成功绑定您可以使用QQ帐号直接登录社区当然您也可以</span>
<a href="javascript:;" class="acc-unbind" type="qq_id">解除绑定</a> <a href="javascript:;" class="acc-unbind" type="qq_id">解除绑定</a>
<!-- <a href="" onclick="layer.msg('正在绑定微博QQ', {icon:16, shade: 0.1, time:0})" class="acc-bind" type="qq_id">立即绑定</a> <!-- <a href="" onclick="layer.msg('正在绑定微博QQ', {icon:16, shade: 0.1, time:0})" class="acc-bind" type="qq_id">立即绑定</a>
<span>即可使用QQ帐号登录Fly社区</span> --> <span>即可使用QQ帐号登录Fly社区</span> -->
@ -111,7 +111,7 @@
<!-- <span>已成功绑定您可以使用微博直接登录Fly社区当然您也可以</span> <!-- <span>已成功绑定您可以使用微博直接登录Fly社区当然您也可以</span>
<a href="javascript:;" class="acc-unbind" type="weibo_id">解除绑定</a> --> <a href="javascript:;" class="acc-unbind" type="weibo_id">解除绑定</a> -->
<a href="" class="acc-weibo" type="weibo_id" onclick="layer.msg('正在绑定微博', {icon:16, shade: 0.1, time:0})" >立即绑定</a> <a href="" class="acc-weibo" type="weibo_id" onclick="layer.msg('正在绑定微博', {icon:16, shade: 0.1, time:0})" >立即绑定</a>
<span>,即可使用微博帐号登录Fly社区</span> <span>,即可使用微博帐号登录</span>
</li> </li>
</ul> </ul>
</div> </div>