This commit is contained in:
taoser 2023-05-05 12:06:07 +08:00
parent 3dbc77904e
commit 300c9e6a72
24 changed files with 333 additions and 340 deletions

View File

@ -24,7 +24,7 @@
<script type="text/html" id="addons-bar">
{{# if(d.have_newversion === 1){ }}
<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="install" data-url="{:url('addon.addons/upgrade')}" data-userlogin="{:url('addon.addons/userLogin')}" data-ispay="{:url('addon.addons/isPay')}"><i class="layui-icon layui-icon-edit"></i>升级</a>
<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="install" data-url="{:url('addon.addons/upgrade')}" data-userlogin="{:url('addon.addons/userLogin')}" data-ispay="{:url('addon.addons/isPay')}"><i class="layui-icon layui-icon-upload-circle"></i>升级</a>
{{# } else { }}
{{# if(d.isInstall === 1) { }}
<a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="config" data-url="{:url('addon.addons/config')}"><i class="layui-icon layui-icon-set"></i>设置</a>
@ -100,7 +100,7 @@
url: LIST_URL,
cols: cols,
page: true,
limit: 10,
limit: 15,
text: "对不起,加载出现异常!",
});

View File

@ -170,7 +170,7 @@
window.remove = function(obj) {
layer.confirm('确定要删除该评论吗', {
layer.confirm('确定要删除?', {
icon: 3,
title: '提示'
}, function(index) {
@ -212,7 +212,7 @@
return false;
}
layer.confirm('确定要删除这些评论', {
layer.confirm('确定要删除?', {
icon: 3,
title: '提示'
}, function(index) {

View File

@ -238,7 +238,7 @@
window.remove = function(obj) {
layer.confirm('确定要删除该用户', {
layer.confirm('确定要删除?', {
icon: 3,
title: '提示'
}, function(index) {

View File

@ -40,7 +40,6 @@ class Comment extends Model
->order(['cai'=>'asc','create_time'=>'asc'])
->paginate(['list_rows'=>10, 'page'=>$page])
->toArray();
}
//回帖榜

View File

@ -21,70 +21,116 @@ class Article extends TagLib
protected $tags = [
// 标签定义: attr 属性列表 close 是否闭合0 或者1 默认1 alias 标签别名 level 嵌套层次
'id' => ['attr' => '', 'close' => 0],
'title' => ['attr' => 'cid', 'close' => 0],
'content' => ['attr' => 'name', 'close' => 0],
'istop' => ['attr' => '', 'close' => 0],
'aname' => ['attr' => 'name', 'close' => 0],
'commentnum' => ['attr' => 'name', 'close' => 0],
'title' => ['attr' => '', 'close' => 0],
'content' => ['attr' => '', 'close' => 0],
'auther' => ['attr' => '', 'close' => 0],
'pv' => ['attr' => '', 'close' => 0],
'title_color' => ['attr' => '', 'close' => 0],
'comment_num' => ['attr' => '', 'close' => 0],
'keywords' => ['attr' => '', 'close' => 0],
'description' => ['attr' => '', 'close' => 0],
'cate' => ['attr' => 'name', 'close' => 0],
'user' => ['attr' => 'name', 'close' => 0],
'comment' => ['attr' => '', 'close' => 1],
'istop' => ['attr' => '', 'close' => 0],
'detail' => ['attr' => 'name', 'close' => 0],
];
// public function __construct($a)
// {
// $id = (int) input('id');
// $this->id = $id;
// $page = input('page') ? (int) input('page') : 1;
// //parent::__construct();
// if(request()->action() == 'detail') {
// $article = new ArticleModel();
// $this->article = $article->getArtDetail($id);
// // dump($this->article);
// }
// }
public function tagId($tag): string
// id
public function tagId(): string
{
//dump($tag);
$parseStr = $this->article;
//return $parseStr;
return '<?php echo "' . $parseStr['id'] . '"; ?>';
return '{$article.id}';
}
public function tagTitle(array $tag, string $content): string
public function tagTitle(): string
{
$cid = (int) $this->tpl->get('cid');
$article = new ArticleModel();
$art = $article->getArtDetail($cid);
//dump($art);
$parseStr = $art['title'];
//$parseStr = 123;
//return $parseStr;
return '<?php echo "' . $parseStr . '"; ?>';
return '{$article.title}';
}
public function tagContent($tag): string
public function tagContent(): string
{
$parseStr = $this->article['content'];
//return $parseStr;
return '<?php echo "' . $parseStr . '"; ?>';
return '{$article.content|raw}';
}
public function tagAname($tag): string
public function tagAuther(): string
{
$parseStr = $this->article['user']['nickname'] ?: $this->article['user']['name'];
// dump($parseStr);
return $parseStr;
return '{$article.user.nickname ?: $article.user.name}';
}
public function tagCommentnum($tag): string
public function tagPv()
{
$parseStr = $this->article['comments_count'];
// dump($parseStr);
return $parseStr;
return '{$article.pv}';
}
public function tagComment_num(): string
{
return '{$article.comments_count}';
}
public function tagTitle_color(): string
{
return '{$article.title_color ?: "#333"}';
}
public function tagKeywords(): string
{
return '{$article.keywords ?: $article.title}';
}
public function tagDescription(): string
{
return '{$article.description}';
}
// 详情分类
public function tagCate($tag): string
{
if($tag['name'] == 'name')
{
return '{$article.cate.catename}';
}
if($tag['name'] == 'ename')
{
return '{$article.cate.ename}';
}
if($tag['name'] == 'id')
{
return '{$article.cate_id}';
}
return '';
}
public function tagUser($tag)
{
if($tag['name'] == 'user_link') {
return '{:url("user/home",["id"=>'.'$'.'article.user.id'.'])->domain(true)}';
}
return '{$article.user.' . $tag['name'] . '}';
}
public function tagCateName()
{
return '{$article.cate.catename}';
}
public function tagCateename()
{
return '{$article.cate.id}';
}
// 详情
public function tagDetail($tag)
{
return '{$article.' . $tag['name'] . '}';
}
public function tagIstop($tag): string
@ -98,18 +144,15 @@ class Article extends TagLib
return $parseStr;
}
// public function tagComment($tag, $content): string
// {
// //
// //$arr = $this->getComments($this->id, $this->page);
// $parse = '<?php ';
// $parse .= '$comment_arr=[[1,3,5,7,9],[2,4,6,8,10]];'; // 这里是模拟数据
// $parse .= '$__LIST__ = $comment_arr[' . $type . '];';
/** $parse .= ' ?>';*/
// $parse .= '{volist name="__LIST__" id="' . $name . '"}';
// $parse .= $content;
// $parse .= '{/volist}';
// return $parse;
// }
// 评论
public function tagComment($tag, $content): string
{
$parse = '<?php ';
$parse .= ' ?>';
$parse .= '{volist name="comments['.'\'data\''.']" id="comment" empty= "还没有内容"}';
$parse .= $content;
$parse .= '{/volist}';
return $parse;
}
}

View File

@ -0,0 +1,82 @@
<?php
/*
* @Program: table.css 2023/4/16
* @FilePath: app\common\taglib\Comment.php
* @Description: Comment.php 评论标签
* @LastEditTime: 2023-04-16 11:37:01
* @Author: Taoker <317927823@qq.com>
* @Copyright (c) 2020~2023 https://www.aieok.com All rights reserved.
*/
namespace app\common\taglib;
use think\template\TagLib;
/**
* 评论内容
*/
class Comment extends TagLib
{
/**
* @var array[]
*/
protected $tags = [
// 标签定义: attr 属性列表 close 是否闭合0 或者1 默认1 alias 标签别名 level 嵌套层次
'id' => ['attr' => '', 'close' => 0],
'content' => ['attr' => '', 'close' => 0],
'time' => ['attr' => '', 'close' => 0],
'zan' => ['attr' => '', 'close' => 0],
'uid' => ['attr' => '', 'close' => 0],
'uname' => ['attr' => '', 'close' => 0],
'uimg' => ['attr' => '', 'close' => 0],
'ulink' => ['attr' => '', 'close' => 0],
'usign' => ['attr' => '', 'close' => 0],
];
public function tagId()
{
return '{$comment.id}';
}
public function tagContent()
{
return '{$comment.content|raw}';
}
public function tagTime()
{
return '{$comment.create_time}';
}
public function tagZan()
{
return '{$comment.zan}';
}
public function tagUid()
{
return '{$comment.user_id}';
}
public function tagUname()
{
return '{$comment.user.nickname ?: $comment.user.name}';
}
public function tagUimg()
{
return '{$comment.user.user_img}';
}
public function tagUlink()
{
return '{:url("user/home",["id"=>'.'$'.'comment.user_id'.'])->domain(true)}';
}
public function tagUsign()
{
return '{$comment.user.sign|raw}';
}
}

View File

@ -0,0 +1,27 @@
<?php
/**
* @Program: table.css 2023/4/15
* @FilePath: app\common\taglib\Taoler.php
* @Description: Taoler.php
* @LastEditTime: 2023-04-15 11:09:54
* @Author: Taoker <317927823@qq.com>
* @Copyright (c) 2020~2023 https://www.aieok.com All rights reserved.
*/
namespace app\common\taglib;
use think\template\TagLib;
class Taoler extends TagLib
{
protected $tags = [
// 标签定义: attr 属性列表 close 是否闭合0 或者1 默认1 alias 标签别名 level 嵌套层次
'content' => ['attr' => 'name', 'close' => 0],
];
public function tagContent($tag)
{
return '{$article.' . $tag['name'] . '}';
}
}

View File

@ -20,7 +20,7 @@ return [
// 模板后缀
'view_suffix' => 'html',
// 预先加载的标签库
'taglib_pre_load' => 'app\common\taglib\Article',
'taglib_pre_load' => 'app\common\taglib\Article,app\common\taglib\Taoler,app\common\taglib\Comment',
// 模板文件名分隔符
'view_depr' => DIRECTORY_SEPARATOR,
// 模板引擎普通标签开始标记

View File

@ -84,11 +84,10 @@ class Article extends BaseController
$id = input('id');
$page = input('page',1);
//输出内容
$article = new ArticleModel();
$artDetail = $this->model->getArtDetail($id);
if($artDetail['read_type'] == 1 && session('art_pass_'.$id) != $artDetail['art_pass']) {
$artDetail['content'] = '本文已加密!请输入正确密码查看!';
if($artDetail->read_type == 1 && session('art_pass_'.$id) != $artDetail->art_pass) {
$artDetail->content = '本文已加密!请输入正确密码查看!';
}
if(is_null($artDetail)){
@ -96,7 +95,7 @@ class Article extends BaseController
throw new \think\exception\HttpException(404, '无内容');
}
//用户个人tag标签
$userTags = $this->model->where(['user_id'=>$artDetail['user_id'],'status'=>1])->where('keywords','<>','')->column('keywords');
$userTags = $this->model->where(['user_id' => $artDetail['user_id'],'status'=>1])->where('keywords','<>','')->column('keywords');
//转换为字符串
$tagStr = implode(",",$userTags);
//转换为数组并去重
@ -111,10 +110,9 @@ class Article extends BaseController
$userZanList[] = ['userImg'=>$v->user->user_img,'name'=>$v->user->name];
}
}
// 设置内容的tag内链
$artDetail['content'] = $this->setArtTagLink($artDetail['content']);
$artDetail->content = $this->setArtTagLink($artDetail->content);
// 标签
$tags = [];
@ -127,7 +125,7 @@ class Article extends BaseController
$tags[] = ['name'=>$tag['name'],'url'=> (string) url('tag_list',['ename'=>$tag['ename']])];
}
//相关帖子
$relationArticle = $article->getRelationTags($artTags[0]['tag_id'],$id,5);
$relationArticle = $this->model->getRelationTags($artTags[0]['tag_id'],$id,5);
}
$tpl = Db::name('cate')->where('id', $artDetail['cate_id'])->value('detpl');
@ -136,9 +134,10 @@ class Article extends BaseController
//浏览pv
Db::name('article')->where('id',$id)->inc('pv')->update();
$pv = Db::name('article')->field('pv')->where('id',$id)->value('pv');
$artDetail->pv = $pv;
//上一篇下一篇
$upDownArt = $article->getPrevNextArticle($id,$artDetail['cate_id']);
$upDownArt = $this->model->getPrevNextArticle($id,$artDetail['cate_id']);
if(empty($upDownArt['previous'][0])) {
$previous = '前面已经没有了!';
} else {
@ -155,7 +154,7 @@ class Article extends BaseController
//最新评论时间
$lrDate_time = Db::name('comment')->where('article_id', $id)->max('update_time',false) ?? time();
// 热议文章
$artHot = $article->getArtHot(10);
$artHot = $this->model->getArtHot(10);
//广告
$ad = new Slider();
//分类图片

View File

@ -10,10 +10,6 @@ use think\facade\Db;
class Collection extends BaseController
{
// protected $type = [
// 'cid' => 'integer',
// ];
//文章收藏
public function add(){
//$data = Request::param();

View File

@ -48,7 +48,7 @@ DROP TABLE IF EXISTS `tao_article`;
CREATE TABLE `tao_article` (
`id` int NOT NULL AUTO_INCREMENT COMMENT '用户ID',
`title` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '标题',
`content` text CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '内容',
`content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '内容',
`status` enum('0','-1','1') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '1' COMMENT '状态1显示0待审-1禁止',
`cate_id` int NOT NULL COMMENT '分类id',
`user_id` int NOT NULL COMMENT '用户id',
@ -714,7 +714,7 @@ DROP TABLE IF EXISTS `tao_user_zan`;
CREATE TABLE `tao_user_zan` (
`id` int NOT NULL AUTO_INCREMENT COMMENT '点赞主键id',
`article_id` int NULL DEFAULT NULL COMMENT '文章id',
`comment_id` int NOT NULL COMMENT '评论id',
`comment_id` int NULL DEFAULT NULL COMMENT '评论id',
`user_id` int NOT NULL COMMENT '用户id',
`type` tinyint NOT NULL DEFAULT 2 COMMENT '1文章点赞2评论点赞',
`create_time` int NOT NULL DEFAULT 0 COMMENT '点赞时间',

View File

@ -24,7 +24,6 @@
"topthink/think-view": "^1.0",
"topthink/think-captcha": "^3.0",
"phpmailer/phpmailer": "^6.1",
"firebase/php-jwt": "^5.2",
"lotofbadcode/phpspirit_databackup": "^1.1",
"wamkj/thinkphp6.0-databackup": "^1.0",
"taoser/think-addons": "^1.0",

65
composer.lock generated
View File

@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "20e9c0c21d94d1cbf1c29c69868ebe38",
"content-hash": "20dad4ba0451f20b1191711c63ad21c7",
"packages": [
{
"name": "bacon/bacon-qr-code",
@ -413,69 +413,6 @@
],
"time": "2022-10-26T08:48:17+00:00"
},
{
"name": "firebase/php-jwt",
"version": "v5.5.1",
"source": {
"type": "git",
"url": "https://github.com/firebase/php-jwt.git",
"reference": "83b609028194aa042ea33b5af2d41a7427de80e6"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/firebase/php-jwt/zipball/83b609028194aa042ea33b5af2d41a7427de80e6",
"reference": "83b609028194aa042ea33b5af2d41a7427de80e6",
"shasum": "",
"mirrors": [
{
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
"preferred": true
}
]
},
"require": {
"php": ">=5.3.0"
},
"require-dev": {
"phpunit/phpunit": ">=4.8 <=9"
},
"suggest": {
"paragonie/sodium_compat": "Support EdDSA (Ed25519) signatures when libsodium is not present"
},
"type": "library",
"autoload": {
"psr-4": {
"Firebase\\JWT\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Neuman Vong",
"email": "neuman+pear@twilio.com",
"role": "Developer"
},
{
"name": "Anant Narayanan",
"email": "anant@php.net",
"role": "Developer"
}
],
"description": "A simple library to encode and decode JSON Web Tokens (JWT) in PHP. Should conform to the current spec.",
"homepage": "https://github.com/firebase/php-jwt",
"keywords": [
"jwt",
"php"
],
"support": {
"issues": "https://github.com/firebase/php-jwt/issues",
"source": "https://github.com/firebase/php-jwt/tree/v5.5.1"
},
"time": "2021-11-08T20:18:51+00:00"
},
{
"name": "guzzlehttp/guzzle",
"version": "7.0.0",

View File

@ -16,7 +16,7 @@ return [
// 应用名,此项不可更改
'appname' => 'TaoLer',
// 版本配置
'version' => '2.3.0',
'version' => '2.3.1',
// 加盐
'salt' => 'taoler',
// 数据库备份目录

View File

@ -14,7 +14,7 @@ return array(
'think\\composer\\' => array($vendorDir . '/topthink/think-installer/src'),
'think\\captcha\\' => array($vendorDir . '/topthink/think-captcha/src'),
'think\\app\\' => array($vendorDir . '/topthink/think-multi-app/src'),
'think\\' => array($vendorDir . '/topthink/framework/src/think', $vendorDir . '/topthink/think-helper/src', $vendorDir . '/topthink/think-template/src', $vendorDir . '/topthink/think-orm/src'),
'think\\' => array($vendorDir . '/topthink/framework/src/think', $vendorDir . '/topthink/think-helper/src', $vendorDir . '/topthink/think-orm/src', $vendorDir . '/topthink/think-template/src'),
'taoser\\think\\' => array($vendorDir . '/taoser/think-auth/src'),
'taoser\\' => array($vendorDir . '/taoser/think-addons/src', $vendorDir . '/taoser/think-setarr/src'),
'phpspirit\\databackup\\' => array($vendorDir . '/lotofbadcode/phpspirit_databackup/src'),
@ -49,7 +49,6 @@ return array(
'GuzzleHttp\\Psr7\\' => array($vendorDir . '/guzzlehttp/psr7/src'),
'GuzzleHttp\\Promise\\' => array($vendorDir . '/guzzlehttp/promises/src'),
'GuzzleHttp\\' => array($vendorDir . '/guzzlehttp/guzzle/src'),
'Firebase\\JWT\\' => array($vendorDir . '/firebase/php-jwt/src'),
'Endroid\\QrCode\\' => array($vendorDir . '/endroid/qr-code/src'),
'DI\\' => array($vendorDir . '/php-di/php-di/src'),
'DASPRiD\\Enum\\' => array($vendorDir . '/dasprid/enum/src'),

View File

@ -119,10 +119,6 @@ class ComposerStaticInit1b32198725235c8d6500c87262ef30c2
'GuzzleHttp\\Promise\\' => 19,
'GuzzleHttp\\' => 11,
),
'F' =>
array (
'Firebase\\JWT\\' => 13,
),
'E' =>
array (
'Endroid\\QrCode\\' => 15,
@ -182,8 +178,8 @@ class ComposerStaticInit1b32198725235c8d6500c87262ef30c2
array (
0 => __DIR__ . '/..' . '/topthink/framework/src/think',
1 => __DIR__ . '/..' . '/topthink/think-helper/src',
2 => __DIR__ . '/..' . '/topthink/think-template/src',
3 => __DIR__ . '/..' . '/topthink/think-orm/src',
2 => __DIR__ . '/..' . '/topthink/think-orm/src',
3 => __DIR__ . '/..' . '/topthink/think-template/src',
),
'taoser\\think\\' =>
array (
@ -322,10 +318,6 @@ class ComposerStaticInit1b32198725235c8d6500c87262ef30c2
array (
0 => __DIR__ . '/..' . '/guzzlehttp/guzzle/src',
),
'Firebase\\JWT\\' =>
array (
0 => __DIR__ . '/..' . '/firebase/php-jwt/src',
),
'Endroid\\QrCode\\' =>
array (
0 => __DIR__ . '/..' . '/endroid/qr-code/src',

View File

@ -401,72 +401,6 @@
],
"install-path": "../endroid/qr-code"
},
{
"name": "firebase/php-jwt",
"version": "v5.5.1",
"version_normalized": "5.5.1.0",
"source": {
"type": "git",
"url": "https://github.com/firebase/php-jwt.git",
"reference": "83b609028194aa042ea33b5af2d41a7427de80e6"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/firebase/php-jwt/zipball/83b609028194aa042ea33b5af2d41a7427de80e6",
"reference": "83b609028194aa042ea33b5af2d41a7427de80e6",
"shasum": "",
"mirrors": [
{
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
"preferred": true
}
]
},
"require": {
"php": ">=5.3.0"
},
"require-dev": {
"phpunit/phpunit": ">=4.8 <=9"
},
"suggest": {
"paragonie/sodium_compat": "Support EdDSA (Ed25519) signatures when libsodium is not present"
},
"time": "2021-11-08T20:18:51+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
"psr-4": {
"Firebase\\JWT\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Neuman Vong",
"email": "neuman+pear@twilio.com",
"role": "Developer"
},
{
"name": "Anant Narayanan",
"email": "anant@php.net",
"role": "Developer"
}
],
"description": "A simple library to encode and decode JSON Web Tokens (JWT) in PHP. Should conform to the current spec.",
"homepage": "https://github.com/firebase/php-jwt",
"keywords": [
"jwt",
"php"
],
"support": {
"issues": "https://github.com/firebase/php-jwt/issues",
"source": "https://github.com/firebase/php-jwt/tree/v5.5.1"
},
"install-path": "../firebase/php-jwt"
},
{
"name": "guzzlehttp/guzzle",
"version": "7.0.0",

View File

@ -3,7 +3,7 @@
'name' => 'taoser/taoler',
'pretty_version' => 'dev-master',
'version' => 'dev-master',
'reference' => '161a45102f046e53da3e5666e5c6cc052b5029b4',
'reference' => 'eddc6843101a94454f9333fb993cff1741007b42',
'type' => 'project',
'install_path' => __DIR__ . '/../../',
'aliases' => array(),
@ -64,15 +64,6 @@
'aliases' => array(),
'dev_requirement' => false,
),
'firebase/php-jwt' => array(
'pretty_version' => 'v5.5.1',
'version' => '5.5.1.0',
'reference' => '83b609028194aa042ea33b5af2d41a7427de80e6',
'type' => 'library',
'install_path' => __DIR__ . '/../firebase/php-jwt',
'aliases' => array(),
'dev_requirement' => false,
),
'guzzlehttp/guzzle' => array(
'pretty_version' => '7.0.0',
'version' => '7.0.0.0',
@ -358,7 +349,7 @@
'taoser/taoler' => array(
'pretty_version' => 'dev-master',
'version' => 'dev-master',
'reference' => '161a45102f046e53da3e5666e5c6cc052b5029b4',
'reference' => 'eddc6843101a94454f9333fb993cff1741007b42',
'type' => 'project',
'install_path' => __DIR__ . '/../../',
'aliases' => array(),

2
vendor/services.php vendored
View File

@ -1,5 +1,5 @@
<?php
// This file is automatically generated at:2023-04-13 15:00:47
// This file is automatically generated at:2023-04-16 14:14:56
declare (strict_types = 1);
return array (
0 => 'taoser\\addons\\Service',

View File

@ -199,7 +199,7 @@
<div id="LAY_jieAdmin1" data-id="{$article['id']}"></div>
</div>
</div>
{include file="public/menu" /}
{/block}
{block name="script"}

View File

@ -92,8 +92,8 @@
</section>
<div class="card-footer text-center mt-4">
<a href="javascript:" style="color: #FFF !important;" data-img="/zb_users/cache/theme/rongkeji/qr/cachee3a78f5d7639da99c9226ec504c2fcc6.png" data-title="手机扫一扫继续阅读" data-desc="微信或浏览器均可" class="single-popup shangzan mr-3 text-muted text-xs">手机浏览</a>
<a href="javascript:" style="color: #FFF !important;" data-img="/zb_users/theme/rongkeji/image/wxpay.png" data-title="赞赏支持一下站长" data-desc="微信赞赏扫码" class="single-popup shangzan text-muted text-xs">赞赏支持</a>
<a href="javascript:" style="color: #FFF !important;" data-img="/qrcode/?text={$Request.domain}{$Request.url}&size=200" data-title="手机扫一扫继续阅读" data-desc="微信或浏览器均可" class="single-popup shangzan mr-3 text-muted text-xs">手机浏览</a>
<a href="javascript:" style="color: #FFF !important;" data-img="{:hook('qqKefu','dashang')}" data-title="赞赏支持一下站长" data-desc="微信赞赏扫码" class="single-popup shangzan text-muted text-xs">赞赏支持</a>
<div class="text-center text-muted text-xs" style="margin-top: 30px;">
"作者已被打赏 0 次"
</div>
@ -297,12 +297,13 @@
{//crud管理模块}
{include file="/public/crud" /}
</main>
{include file="public/menu" /}
{/block}
{block name="script"}
{:hook('taonyeditor')}
{:hook('taoplayer')}
<script type='text/javascript' src="{$Request.domain}/view/common/blog/js/theme.js"></script>
@ -499,6 +500,4 @@ layui.use(['fly', 'face','colorpicker', 'laypage'], function(){
{:hook('taoplyr')}
{include file="/public/qr-read" /}
{/block}

View File

@ -71,7 +71,7 @@
<div id="LAY_jieAdmin1" data-id="{$article['id']}"></div>
</div>
</div>
{include file="public/menu" /}
{/block}
{block name="script"}

View File

@ -1,10 +1,10 @@
{extend name="public/base" /}
<!--seo-->
{block name="title"}{$article.title} - {$sysInfo.webname}{/block}
{block name="keywords"}{$article.keywords ?: $article.title}{/block}
{block name="description"}{$article.title},{$article.description}{/block}
{block name="ogtitle"}<meta property="og:title" content="{$article.title} - {$sysInfo.webname}">{/block}
{block name="ogdescription"}<meta property="og:description" content="{$article.title},{$article.description ?? ''}" />{/block}
{block name="keywords"}{article:keywords /}{/block}
{block name="description"}{article:title /},{article:description /}{/block}
{block name="ogtitle"}<meta property="og:title" content="{article:title /} - {$sysInfo.webname}">{/block}
{block name="ogdescription"}<meta property="og:description" content="{article:title /},{$article.description ?: ''}" />{/block}
{block name="meta"}
<meta property="og:type" content="article"/>
<meta property="article:published_time" content="{$article.create_time|date='c'}"/>
@ -14,33 +14,40 @@
{/block}
{block name="link"} {/block}
{block name="column"}<div class="layui-hide-xs">{include file="/public/column" /}</div>{/block}
<!--body-->
{block name="content"}
<div class="layui-container">
<div class="layui-row layui-col-space15">
<div class="layui-col-md8 content detail">
<div class="fly-panel detail-box">
{//标题}
<h1 style="color:{$article.title_color ?? '#333'};">{$article.title}</h1>
<div class="detail_qrcode layui-hide-xs" onclick="PhoneDown();" id="mobile"></div>
{//图标}
{//标题}
<h1 style="color:{article:title_color /};">{article:title /}</h1>
{//图标}
<div class="fly-detail-info">
<span class="layui-badge layui-bg-green fly-detail-column">{:cookie('think_lang') == 'en-us' ? $article.cate.ename : $article.cate.catename}</span>
{if ($article.is_top == 1)}<span class="layui-badge layui-bg-black">{:lang('top')}</span>{/if}
<span class="layui-badge layui-bg-green fly-detail-column">
{if (cookie('think_lang') == 'en-us')} {article:cate name="ename" /}
{else /} {article:cate name="name" /}
{/if}
</span>
{if ($article.is_top == 1)}<span class="layui-badge layui-bg-black">{:lang('top')}</span>{/if}
{if ($article.is_hot == 1)}<span class="layui-badge layui-bg-red">{:lang('hot')}</span>{/if}
<span id="LAY_jieAdmin" data-id="{$article['id']}"></span>
<span id="LAY_jieAdmin" data-id="{article:id /}" data-colurl="{:url('collection/find')}"></span>
<span class="fly-list-nums">
<a href="#comment"><i class="iconfont" title="{:lang('reply')}">&#xe60c;</i>{$article.comments_count}</a><i class="iconfont" title="浏览">&#xe60b;</i>{$pv}
<a href="#comment">
<i class="iconfont" title="{:lang('reply')}">&#xe60c;</i>{article:comment_num /}
</a>
<i class="iconfont" title="浏览">&#xe60b;</i>{article:pv /}
</span>
</div>
{//作者}
{//作者}
<div class="detail-about">
<a class="fly-avatar" href="{$Request.domain}{:url('user/home',['id'=>$article.user.id])}">
<img src="{$Request.domain}{$article.user.user_img}" alt="{$article.user.name}">
<a class="fly-avatar" href="{article:user name='user_link' /}">
<img src="{article:user name='user_img' /}" alt="{article:user name='name' /}">
{if($article.user.vip > 0)}<i class="iconfont icon-renzheng" title="认证信息"></i>{/if}
</a>
<div class="fly-detail-user">
<a href="{$Request.domain}{:url('user/home',['id'=>$article.user.id])}" class="fly-link">
<cite>{$article.user.nickname ?: $article.user.name}</cite>
<a href="{article:user name='user_link' /}" class="fly-link">
<cite>{article:auther}</cite>
</a>
<span class="layui-btn layui-btn-xs guanzhu" >关注</span>
</div>
@ -51,26 +58,26 @@
</div>
</div>
<hr>
{// 内容}
{//内容}
{:hook('taoplayerdiv')}
<div class="detail-body photos" id="content">{$article.content|raw}</div>
{//下载}
{if (($article.upzip !== '') || session('?user_name'))}
<div class="">
{notempty name="$article.upzip"}
<button type="button" class="layui-btn layui-btn-xs" id="zip-download"><i class="layui-icon layui-icon-download-circle"></i>{:lang('download files')}: {$article.downloads}次</button>
{/notempty}
</div>
{/if}
<div class="detail-body photos" id="content">{article:content}</div>
{//下载}
{if (($article.upzip !== '') || session('?user_name'))}
<div class="">
{notempty name="$article.upzip"}
<button type="button" class="layui-btn layui-btn-xs" id="zip-download"><i class="layui-icon layui-icon-download-circle"></i>{:lang('download files')}: {$article.downloads}次</button>
{/notempty}
</div>
{/if}
{//解密文件}
{empty name="passJieMi"}
{if($article.read_type == 1)}
<div id="jiemi" style="text-align:center">
<button type="button" class="layui-btn layui-btn-primary"><i class="layui-icon layui-icon-password" style="font-size: 30px; color: #FF5722;"></i> 阅读请解密 </button>
</div>
{/if}
{/empty}
{//解密文件}
{empty name="passJieMi"}
{if($article.read_type == 1)}
<div id="jiemi" style="text-align:center">
<button type="button" class="layui-btn layui-btn-primary"><i class="layui-icon layui-icon-password" style="font-size: 30px; color: #FF5722;"></i> 阅读请解密 </button>
</div>
{/if}
{/empty}
{notempty name="tags"}
<div style="margin-top: 15px">标签
@ -97,54 +104,50 @@
<div class="fly-panel detail-box" id="flyReply">
<span style="font-size:18px;">评论 {$article.comments_count}</span>
<ul class="jieda" id="jieda">
{volist name="comments['data']" id="vo" empty= ""}
<li data-id="{$vo.id}" class="jieda-daan">
<a name="item-1111111111"></a>
<div class="detail-about detail-about-reply">
<a class="fly-avatar" href="{$Request.domain}{:url('user/home',['id'=>$vo.user_id])}">
<img src="{$Request.domain}{$vo.user.user_img}" alt=" "><i class="iconfont icon-renzheng" title="认证信息"></i>
</a>
<div class="fly-detail-user">
<a href="{$Request.domain}{:url('user/home',['id'=>$vo.user.id])}" class="fly-link">
<cite>{$vo.user.nickname ?: $vo.user.name}</cite>
</a>
{if condition="$article.user.id eq $vo.user.id"}<span>({:lang('poster')})</span>{/if}
</div>
<div class="detail-hits"><span class="post-time" data="{$vo.create_time}"></span>{:hook('ipShow',$vo.user.city)}</span></div>
{if $vo.cai == 1}<i class="iconfont icon-caina" title="最佳答案"></i>{/if}
</div>
{article:comment}
<li data-id="{comment:id /}" class="jieda-daan">
<a name="item-1111111111"></a>
<div class="detail-about detail-about-reply">
<a class="fly-avatar" href="{comment:ulink /}">
<img src="{comment:uimg /}" alt=" "><i class="iconfont icon-renzheng" title="认证信息"></i>
</a>
<div class="fly-detail-user">
<a href="{comment:ulink /}" class="fly-link">
<cite>{comment:uname /}</cite>
</a>
{if condition="$article.user.id eq $comment.user.id"}<span>({:lang('poster')})</span>{/if}
<span>{comment:usign /}</span>
</div>
<div class="detail-hits"><span class="post-time" data="{comment:time}"></span>{:hook('ipShow',$comment.user.city)}</span>
</div>
</div>
{//加密未解密评论不可查看}
{if($article.read_type == 0 || (($article.read_type == 1) && $passJieMi))}
<div class="detail-body jieda-body photos">{$vo.content|raw}</div>
<div class="jieda-reply">
<span class="jieda-zan {if($vo.zan != 0)}zanok{/if}" type="zan">
<i class="iconfont icon-zan"></i><em>{$vo.zan}</em>
</span>
<span type="reply"><i class="iconfont icon-svgmoban53"></i>{:lang('reply')}</span>
{//评论编辑删除采纳权限}
<div class="jieda-admin">
{if ((session('user_id') == $vo.user.id) && (getLimtTime($vo.create_time) < 2)) OR ($user.auth ?? '')}
<span type="edit" class="comment-edit" data-id="{$vo.id}">{:lang('edit')}</span>
<span type="del">{:lang('delete')}</span>
{//加密未解密评论不可查看}
{if($article.read_type == 0 || (($article.read_type == 1) && $passJieMi))}
<div class="detail-body jieda-body photos">{comment:content /}</div>
<div class="jieda-reply">
<span class="jieda-zan {if($comment.zan != 0)}zanok{/if}" type="zan">
<i class="iconfont icon-zan"></i><em>{comment:zan /}</em>
</span>
<span type="reply"><i class="iconfont icon-svgmoban53"></i>{:lang('reply')}</span>
{//评论编辑删除采纳权限}
<div class="jieda-admin">
{if ((session('user_id') == $comment.user.id) && (getLimtTime($comment.create_time) < 2)) OR ($user.auth ?? '')}
<span type="edit" class="comment-edit" data-id="{comment:id /}">{:lang('edit')}</span>
<span type="del">{:lang('delete')}</span>
{/if}
</div>
</div>
{else /}
<div class="detail-body jieda-body photos">
<i class="layui-icon layui-icon-password" style="font-size: 24px; color: #FF5722;"></i>
评论解密后查看
</div>
{/if}
{if ($vo.cai == 0) && ((session('user_id') == $article.user_id) OR ($user.auth ?? '')) /}
<span class="jieda-accept" type="accept">{:lang('accept')}</span>
{/if}
</div>
</div>
{else /}
<div class="detail-body jieda-body photos"><i class="layui-icon layui-icon-password" style="font-size: 24px; color: #FF5722;"></i> 评论解密后查看 </div>
{/if}
<div style="margin: 5px 0px;">
<hr style="width:90%;border:1px dotted red;height:1px" />
<div>{$vo.user.sign|raw}</div>
</div>
</li>
{/volist}
</li>
{/article:comment}
</ul>
<div style="text-align: center" id="pages"></div>
<div style="text-align: center" id="pages"></div>
{//评论}
{if session('?user_id') AND ( config('taoler.config.is_reply') == 1 ) AND ( $article.is_reply == 1 )}
<div class="layui-form layui-form-pane">
@ -212,11 +215,8 @@
{include file="/public/crud" /}
</div>
<!--底部栏-->
<div class="site-tree-mobile-detail-bottom layui-hide-md">
<div id="LAY_jieAdmin1" data-id="{$article['id']}"></div>
</div>
</div>
{include file="public/menu" /}
{/block}
{block name="script"}
@ -225,7 +225,7 @@
{:hook('taoplayer')}
<script>
var collectionFind = "{:url('Collection/find')}",
var collectionFind = "{:url('collection/find')}",
collection = "{:url('collection/')}",
articleJieset = "{:url('Article/jieset')}",
articleDelete = "{:url('Article/delete')}",

View File

@ -11,10 +11,9 @@
{block name="title"}{$u.nickname ?: $u.name}的主页-{$sysInfo.webname}{/block}
{block name="description"}{$u.sign}{/block}
{block name="link"}<link rel="stylesheet" href="{$Request.domain}/static/res/css/plyr.css" charset="utf-8">{/block}
{block name="column"}{/block}
{block name="content"}
<div class="fly-home fly-panel" style="background-image: url();">
<div class="fly-home fly-panel" >
<img src="{$Request.domain}{$u.user_img}" alt="{$u.name}">
{if($u.vip > 0)}<i class="iconfont icon-renzheng" title="Fly社区认证"></i>{/if}
<h1>
@ -70,7 +69,7 @@
<span>{$vo.create_time|date='Y-m-d H-m'}</span>
{:lang('in')}<a href="{:url('article/detail',['id'=>$vo.id,'ename'=>$vo.ename])}">{$vo.title}</a>{:lang('reply')}
</p>
<div class="home-dacontent detail-body jieda-body photos" >{$vo.content}</div>
<div class="home-dacontent detail-body jieda-body photos" >{$vo.content|strip_tags}</div>
</li>
{/volist}
<!-- <div class="fly-none" style="min-height: 50px; padding:30px 0; height:auto;"><span>没有回答任何问题</span></div> -->
@ -84,19 +83,16 @@
{block name="script"}
<script>
layui.use(['fly','face','plyr'], function(){
layui.use(['fly','face'], function(){
var $ = layui.$;
var fly = layui.fly;
var face = layui.face
,plyr = layui.plyr;
var face = layui.face;
//如果你是采用模版自带的编辑器,你需要开启以下语句来解析。
$('.detail-body').each(function(){
var othis = $(this), html = othis.html();
othis.html(fly.content(html));
});
//加载播放器
plyr.setup();
});
</script>
{/block}