Add files via upload
This commit is contained in:
parent
ed7db38abd
commit
eec60a63f2
10
z_daisy/conf.json
Normal file
10
z_daisy/conf.json
Normal file
@ -0,0 +1,10 @@
|
||||
{
|
||||
"name": "「雏菊」 - 主题",
|
||||
"brief": "雏菊 - xiuno 4.0 主题",
|
||||
"version": "1.0",
|
||||
"bbs_version": "4.0",
|
||||
"installed": 0,
|
||||
"enable": 0,
|
||||
"hooks_rank": [],
|
||||
"dependencies": []
|
||||
}
|
21
z_daisy/hook/forum_js.htm
Normal file
21
z_daisy/hook/forum_js.htm
Normal file
@ -0,0 +1,21 @@
|
||||
<script type="text/javascript">
|
||||
/*判断可显示区域高度 用于决定显示主图的高度 这里高度比例和内容页不同*/
|
||||
var getBgHeight = function(windowHeight, bannerHeight, mobileBannerHeight){
|
||||
windowHeight = windowHeight || 560;
|
||||
if (windowHeight > window.screen.availHeight) {
|
||||
windowHeight = window.screen.availHeight;
|
||||
}
|
||||
bannerHeight = bannerHeight.trim();
|
||||
mobileBannerHeight = mobileBannerHeight.trim();
|
||||
if (window.innerHeight > window.innerWidth) {
|
||||
bannerHeight = parseFloat(mobileBannerHeight);
|
||||
} else {
|
||||
bannerHeight = parseFloat(bannerHeight);
|
||||
}
|
||||
bannerHeight = Math.round(windowHeight * bannerHeight / 100);
|
||||
return bannerHeight;
|
||||
};
|
||||
var head = $("#masthead");
|
||||
var bgHeight = getBgHeight(window.innerHeight, '35', '25');
|
||||
head.css('height', bgHeight + "px");
|
||||
</script>
|
32
z_daisy/hook/forum_start.htm
Normal file
32
z_daisy/hook/forum_start.htm
Normal file
@ -0,0 +1,32 @@
|
||||
<!-- 直接结束掉 container 并去除上下边距 -->
|
||||
</div>
|
||||
|
||||
|
||||
<!-- 部分 style 打包放进气泡的 CSS 文件, 只有列表,主题,编辑页面需要 主页不要 -->
|
||||
<style>
|
||||
.blog-background { background:#2C2A2A url(<?php echo $forum['icon_url'];?>); color:#CCC; }
|
||||
#body { padding-bottom: 0; padding-top: 0;}
|
||||
</style>
|
||||
|
||||
<!-- CSS3 气泡 不能放全局 否则不需要气泡的页面会被遮挡-->
|
||||
<link rel="stylesheet" href="plugin/z_daisy/view/css/bubble.css">
|
||||
|
||||
<!-- DAISY 需要最大宽度, 所以要把 header 中限制宽度的 DIV 移到每个页面中去? -->
|
||||
<header id="masthead">
|
||||
<div class="blog-background"></div>
|
||||
<div class="inner">
|
||||
<!-- 似乎没有必要再显示名称
|
||||
<h1 class="blog-title" style="" itemprop="name"><?php //echo $forum['name'];?></h1>
|
||||
<h2 class="blog-description light bordered bordered-top" style="" itemprop="description">12 月 23 日 2015 年 • 已有 3952 位童鞋围观过</h2>
|
||||
-->
|
||||
</div>
|
||||
<!-- CSS3 气泡 同上 放全局并先隐藏-->
|
||||
<ul class="bg-bubbles">
|
||||
<li></li><li></li><li></li><li></li><li></li>
|
||||
<li></li><li></li><li></li><li></li><li></li>
|
||||
</ul>
|
||||
</header>
|
||||
|
||||
|
||||
<!-- 重新开始 container 这是一种兼容的做法 thread 页的 id="body" 将失去意义-->
|
||||
<div class="container">
|
58
z_daisy/hook/post_js.htm
Normal file
58
z_daisy/hook/post_js.htm
Normal file
@ -0,0 +1,58 @@
|
||||
<script>
|
||||
//上传view图片到附件表
|
||||
$('#addattachs').on('change', function(e) {
|
||||
var files = xn.get_files_from_event(e);
|
||||
if (!files) return;
|
||||
// 并发下会 服务端 session 写入会有问题,由客户端控制改为串行
|
||||
var jprogress = $('.attachlist_parents').find('progress');
|
||||
if (!$('.attachlist_parents').find('.attachlist').length) {
|
||||
$('.attachlist_parents').append('<ul class="attachlist"><ul>');
|
||||
}
|
||||
if(!jprogress.length) {
|
||||
jprogress = $('<progress class="progress progress-success" value="0" max="100">0%</progress>').appendTo('.attachlist_parent > ul');
|
||||
//jprogress = $('.attachlist_parents').append('<div class="progress"><div class="progress-bar" role="progressbar" style="width: 25%;" aria-valuenow="25" aria-valuemin="0" aria-valuemax="100">25%</div></div>');
|
||||
}
|
||||
$.each_sync(files, function(i, callback) {
|
||||
var file = files[i];
|
||||
xn.upload_file(file, xn.url('attach-create'), {
|
||||
is_image: 2
|
||||
}, function(code, message) {
|
||||
if (code != 0) return $.alert(message);
|
||||
// 把文件 append 到附件列表 替换到wivebg
|
||||
var url = message.url;
|
||||
var filetype = message.filetype;
|
||||
var aid = message.aid;
|
||||
|
||||
$('.attachlist').append('<li aid="' + aid + '"><a href="' + message.url + '" target="_blank"><i class="icon filetype ' + filetype + '"></i> ' + message.orgfilename + '</a> <a href="javascript:void(0);" class="delete m-l-1"><i class="icon-remove"></i> <?php echo lang('delete');?></a></li>');
|
||||
callback();
|
||||
jprogress.hide();
|
||||
jprogress.val(0);
|
||||
jprogress.text('0%');
|
||||
}, function(percent) {
|
||||
/*
|
||||
var jprogress = $('.attachlist_parents').find('.progress');
|
||||
jprogressbar = jprogress.find('.progress-bar');
|
||||
jprogressbar.css('width', percent+'%');
|
||||
jprogressbar.text(percent+'%');
|
||||
*/
|
||||
jprogress.show();
|
||||
jprogress.val(percent);
|
||||
jprogress.text(percent+'%');
|
||||
console.log('progress:'+ percent);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
// 删除附件 这里的删除hhh
|
||||
$('.attachlist_parents').on('click', 'a.delete', function() {
|
||||
var jlink = $(this);
|
||||
var jli = jlink.parents('li');
|
||||
var aid = jli.attr('aid');
|
||||
if(!window.confirm(lang.confirm_delete)) return false;
|
||||
$.xpost(xn.url('attach-delete-'+aid), function(code, message) {
|
||||
if(code != 0) return $.alert(message);
|
||||
jlink.parent().remove();
|
||||
});
|
||||
return false;
|
||||
})
|
||||
</script>
|
20
z_daisy/hook/post_start.htm
Normal file
20
z_daisy/hook/post_start.htm
Normal file
@ -0,0 +1,20 @@
|
||||
<?php
|
||||
//判断图片是否存在输出BG路径, 如果没有则为空
|
||||
$u = db_find_one('attach', array('tid'=>$tid,'isimage'=>2));
|
||||
if ($u==NULL){ $viewimg = '';}
|
||||
else{ $viewimg = 'url('.$conf['upload_url'].'attach/'.$u['filename'].')'; }
|
||||
?>
|
||||
<!-- 部分 style 打包成文件放进气泡的 CSS, 只有列表,主题,编辑页面需要 主页不要 -->
|
||||
<style>.viewimg { background:#2C2A2A <?php echo $viewimg; ?>; color:#CCC; }</style>
|
||||
|
||||
|
||||
|
||||
<!-- CSS3 气泡 不能放全局 否则不需要气泡的页面会被遮挡-->
|
||||
<link rel="stylesheet" href="plugin/z_daisy/view/css/bubble.css">
|
||||
|
||||
<!-- 主题图片的上传按钮, 只有编辑页需要 还要有删除按钮 -->
|
||||
<div class="row" style="padding: 0px 0 0 0">
|
||||
<div class="col-lg-10 attachlist_parents">
|
||||
<p class="small text-right"><label class="addattach" id="addattachs"><i class="icon-plus-square-o icon-3x"></i><input type="file" multiple="multiple" /></label></p>
|
||||
</div>
|
||||
</div>
|
21
z_daisy/hook/thread_js.htm
Normal file
21
z_daisy/hook/thread_js.htm
Normal file
@ -0,0 +1,21 @@
|
||||
<script type="text/javascript">
|
||||
/*判断可显示区域高度 用于决定显示主图的高度*/
|
||||
var getBgHeight = function(windowHeight, bannerHeight, mobileBannerHeight){
|
||||
windowHeight = windowHeight || 560;
|
||||
if (windowHeight > window.screen.availHeight) {
|
||||
windowHeight = window.screen.availHeight;
|
||||
}
|
||||
bannerHeight = bannerHeight.trim();
|
||||
mobileBannerHeight = mobileBannerHeight.trim();
|
||||
if (window.innerHeight > window.innerWidth) {
|
||||
bannerHeight = parseFloat(mobileBannerHeight);
|
||||
} else {
|
||||
bannerHeight = parseFloat(bannerHeight);
|
||||
}
|
||||
bannerHeight = Math.round(windowHeight * bannerHeight / 100);
|
||||
return bannerHeight;
|
||||
};
|
||||
var head = $("#masthead");
|
||||
var bgHeight = getBgHeight(window.innerHeight, '65', '45');
|
||||
head.css('height', bgHeight + "px");
|
||||
</script>
|
35
z_daisy/hook/thread_start.htm
Normal file
35
z_daisy/hook/thread_start.htm
Normal file
@ -0,0 +1,35 @@
|
||||
<!-- 直接结束掉 container 并去除上下边距 -->
|
||||
</div>
|
||||
|
||||
<?php
|
||||
//判断图片是否存在 输出BG路径, 没有则为空
|
||||
$u = db_find_one('attach', array('tid'=>$tid,'isimage'=>2));
|
||||
if ($u==NULL){ $viewimg = '';}
|
||||
else{ $viewimg = 'url('.$conf['upload_url'].'attach/'.$u['filename'].')'; }
|
||||
?>
|
||||
<!-- 部分 style 打包放进气泡的 CSS 文件, 只有列表,主题,编辑页面需要 主页不要 -->
|
||||
<style>
|
||||
.blog-background { background:#2C2A2A <?php echo $viewimg; ?>; color:#CCC; }
|
||||
#body { padding-bottom: 0; padding-top: 0;}
|
||||
</style>
|
||||
|
||||
<!-- CSS3 气泡 不能放全局 否则不需要气泡的页面会被遮挡-->
|
||||
<link rel="stylesheet" href="plugin/z_daisy/view/css/bubble.css">
|
||||
|
||||
<!-- DAISY 需要最大宽度, 所以要把 header 中限制宽度的 DIV 移到每个页面中去? -->
|
||||
<header id="masthead">
|
||||
<div class="blog-background"></div>
|
||||
<div class="inner">
|
||||
<h1 class="blog-title" style="" itemprop="name"><?php echo $thread['subject'];?></h1>
|
||||
<h2 class="blog-description light bordered bordered-top" style="" itemprop="description">12 月 23 日 2015 年 • 已有 3952 位童鞋围观过</h2>
|
||||
</div>
|
||||
<!-- CSS3 气泡 同上 放全局并先隐藏-->
|
||||
<ul class="bg-bubbles">
|
||||
<li></li><li></li><li></li><li></li><li></li>
|
||||
<li></li><li></li><li></li><li></li><li></li>
|
||||
</ul>
|
||||
</header>
|
||||
|
||||
|
||||
<!-- 重新开始 container 这是一种兼容的做法 thread 页的 id="body" 将失去意义-->
|
||||
<div class="container">
|
BIN
z_daisy/icon.png
Normal file
BIN
z_daisy/icon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.6 KiB |
53
z_daisy/overwrite/view/htms/footer.inc.htm
Normal file
53
z_daisy/overwrite/view/htms/footer.inc.htm
Normal file
@ -0,0 +1,53 @@
|
||||
<?php $db = G('db');?>
|
||||
<?php $starttime = G('starttime');?>
|
||||
<?php $time = G('time');?>
|
||||
<?php $forumlist = G('forumlist');?>
|
||||
<?php $forumarr = G('forumarr');?>
|
||||
<?php $fid = G('fid');?>
|
||||
<?php $conf = G('conf');?>
|
||||
<?php $static_version = $conf['static_version'];?>
|
||||
|
||||
<!--{hook footer_start.htm}-->
|
||||
|
||||
<?php echo xn_debug_info(); ?>
|
||||
|
||||
</div>
|
||||
|
||||
<!--{hook footer_nav_before.htm}-->
|
||||
|
||||
<?php include _include(APP_PATH.'view/htm/footer_nav.inc.htm');?>
|
||||
|
||||
<!--{hook footer_nav_after.htm}-->
|
||||
|
||||
<!--[if lt IE 9]>
|
||||
<script>window.location = '<?php echo url('browser');?>';</script>
|
||||
<![endif]-->
|
||||
|
||||
<?php $browser = get__browser();?>
|
||||
<?php if($browser['name'] == 'ie') { ?>
|
||||
<script src="<?php echo $conf['view_url'];?>js/es6-shim.js<?php echo $static_version;?>"></script>
|
||||
<?php } ?>
|
||||
|
||||
<!--{hook footer_js_before.htm}-->
|
||||
<script src="lang/<?php echo $conf['lang'];?>/bbs.js<?php echo $static_version;?>"></script>
|
||||
<script src="<?php echo $conf['view_url'];?>js/jquery-3.1.0.js<?php echo $static_version;?>"></script>
|
||||
<script src="<?php echo $conf['view_url'];?>js/tether.js<?php echo $static_version;?>"></script>
|
||||
<script src="<?php echo $conf['view_url'];?>js/bootstrap.js<?php echo $static_version;?>"></script>
|
||||
<script src="<?php echo $conf['view_url'];?>js/bootstrap-plugin.js<?php echo $static_version;?>"></script>
|
||||
<script src="<?php echo $conf['view_url'];?>js/async.js<?php echo $static_version;?>"></script>
|
||||
<script src="<?php echo $conf['view_url'];?>js/xiuno.js<?php echo $static_version;?>"></script>
|
||||
<script src="<?php echo $conf['view_url'];?>js/form.js<?php echo $static_version;?>"></script>
|
||||
<script>
|
||||
var debug = DEBUG = <?php echo DEBUG; ?>;
|
||||
var url_rewrite_on = <?php echo $conf['url_rewrite_on'];?>;
|
||||
var forumarr = <?php echo xn_json_encode($forumarr);?>;
|
||||
var fid = <?php echo $fid;?>;
|
||||
</script>
|
||||
<script src="<?php echo $conf['view_url'];?>js/bbs.js<?php echo $static_version;?>"></script>
|
||||
<!--{hook footer_js_after.htm}-->
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
<!--{hook footer_end.htm}-->
|
||||
<?php echo cron_run();?>
|
17
z_daisy/overwrite/view/htms/footer_nav.inc.htm
Normal file
17
z_daisy/overwrite/view/htms/footer_nav.inc.htm
Normal file
@ -0,0 +1,17 @@
|
||||
|
||||
<div class="text-muted" id="footer">
|
||||
<div class="container" style="overflow: hidden;">
|
||||
<dl class="row">
|
||||
<dt>
|
||||
<!--{hook footer_footer_left_start.htm}-->
|
||||
Powered by <a href="http://bbs.xiuno.com/" target="_blank" class="text-muted"><b>Xiuno BBS <span><?php echo $conf['version'];?></span></b></a>
|
||||
<!--{hook footer_footer_left_end.htm}-->
|
||||
</dt>
|
||||
<dd class="text-right">
|
||||
<!--{hook footer_footer_right_start.htm}-->
|
||||
Time: <b><?php echo substr(microtime(1) - $starttime, 0, 5);?></b>, SQL: <b><?php echo count($db->sqls);?></b>
|
||||
<!--{hook footer_footer_right_end.htm}-->
|
||||
</dd>
|
||||
</dl>
|
||||
</div>
|
||||
</div>
|
51
z_daisy/overwrite/view/htms/header.inc.htm
Normal file
51
z_daisy/overwrite/view/htms/header.inc.htm
Normal file
@ -0,0 +1,51 @@
|
||||
<?php $conf = G('conf');?>
|
||||
<?php $header = G('header');?>
|
||||
<?php $user = G('user');?>
|
||||
<?php $uid = G('uid');?>
|
||||
<?php $gid = G('gid');?>
|
||||
<?php $fid = G('fid');?>
|
||||
<?php $tid = G('tid');?>
|
||||
<?php $pid = G('pid');?>
|
||||
<?php $route = G('route');?>
|
||||
<?php $forumlist_show = G('forumlist_show');?>
|
||||
<?php $static_version = $conf['static_version'];?>
|
||||
<!DOCTYPE html>
|
||||
<html lang="<?php echo $conf['lang'];?>">
|
||||
<head>
|
||||
|
||||
<?php echo defined('BASE_HREF') ? '<base href="'.BASE_HREF.'" />' : '' ;?>
|
||||
|
||||
<!--{hook header_mete_before.htm}-->
|
||||
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="author" content="XiunoBBS 4.0" />
|
||||
<meta name="keywords" content="<?php echo $header['keywords'];?>" />
|
||||
<meta name="description" content="<?php echo $header['description'];?>" />
|
||||
<meta name="renderer" content="webkit">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1" >
|
||||
|
||||
<title><?php echo $header['title'];?></title>
|
||||
|
||||
<link rel="shortcut icon" href="<?php echo $conf['view_url'];?>img/favicon.ico" />
|
||||
<link rel="icon" sizes="32x32" href="<?php echo $conf['view_url'];?>img/favicon.ico">
|
||||
<link rel="Bookmark" href="<?php echo $conf['view_url'];?>img/favicon.ico" />
|
||||
<?php if(DEBUG) { ?>
|
||||
<link rel="stylesheet" href="<?php echo $conf['view_url'];?>css/bootstrap.css<?php echo $static_version;?>">
|
||||
<?php } else { ?>
|
||||
<link rel="stylesheet" href="<?php echo $conf['view_url'];?>css/bootstrap.min.css<?php echo $static_version;?>">
|
||||
<?php } ?>
|
||||
|
||||
<!--{hook header_link_after.htm}-->
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<!--{hook header_body_start.htm}-->
|
||||
|
||||
<div id="wrapper">
|
||||
|
||||
<!--{hook header_wrapper_start.htm}-->
|
||||
|
||||
<?php include _include(APP_PATH.'view/htm/header_nav.inc.htm');?>
|
168
z_daisy/overwrite/view/htms/header_nav.inc.htm
Normal file
168
z_daisy/overwrite/view/htms/header_nav.inc.htm
Normal file
@ -0,0 +1,168 @@
|
||||
|
||||
<!--{hook header_nav_start.htm}-->
|
||||
<!-- 删掉影响样式的css -->
|
||||
<nav class="navbar navbar-dark bg-inverse navbar-full navbar-fixed-top" id="header">
|
||||
|
||||
<!-- PC 导航 -->
|
||||
<div class="container collapse navbar-toggleable-md">
|
||||
<div class="row">
|
||||
<!-- 左侧:版块区域 -->
|
||||
<div class="col-md-8">
|
||||
<ul class="nav navbar-nav" id="nav_pc">
|
||||
|
||||
<!--{hook header_nav_pc_start.htm}-->
|
||||
|
||||
<!-- LOGO -->
|
||||
<li class="nav-item"><img src="<?php echo $conf['view_url'];?>img/logo.png" class="logo-sm"></li>
|
||||
|
||||
<!--{hook header_nav_logo_after.htm}-->
|
||||
|
||||
<!-- 前台首页 -->
|
||||
<li class="nav-item home" fid="0"><a class="nav-link" href="."><?php echo lang('index_page');?></a></li>
|
||||
|
||||
<!--{hook header_nav_home_link_after.htm}-->
|
||||
|
||||
<!-- 版块 -->
|
||||
<?php foreach($forumlist_show as $_forum) { ?>
|
||||
|
||||
<!--{hook header_nav_forumlist_loop_start.htm}-->
|
||||
<li class="nav-item" fid="<?php echo $_forum['fid'];?>">
|
||||
<a class="nav-link" href="<?php echo url("forum-$_forum[fid]");?>"><?php echo $_forum['name'];?></a>
|
||||
</li>
|
||||
<!--{hook header_nav_forumlist_loop_end.htm}-->
|
||||
|
||||
<?php } ?>
|
||||
|
||||
<!--{hook header_nav_pc_end.htm}-->
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
<!-- 右侧:用户区域-->
|
||||
<div class="col-md-4">
|
||||
<ul class="nav navbar-nav pull-right">
|
||||
|
||||
<!--{hook header_nav_pc_user_start.htm}-->
|
||||
|
||||
<!-- 游客 -->
|
||||
<?php if(empty($uid)) { ?>
|
||||
|
||||
<li class="nav-item"><a class="nav-link" href="<?php echo url('user-login');?>"><?php echo lang('login');?></a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="<?php echo url('user-create');?>"><?php echo lang('register');?></a></li>
|
||||
|
||||
<!-- 登陆用户 -->
|
||||
<?php } else { ?>
|
||||
|
||||
<li class="nav-item"><a class="nav-link" href="<?php echo url('my');?>" tabindex="-1"><img class="avatar-xs" src="<?php echo $user['avatar_url'];?>"></a></li>
|
||||
<li class="nav-item username m-l-xs"><a class="nav-link" href="<?php echo url('my');?>"><?php echo $user['username'];?></a></li>
|
||||
<!-- 管理员 -->
|
||||
<?php if($gid == 1) { ?>
|
||||
<li class="nav-item"><a class="nav-link" href="admin/"><i class="icon-home"></i> <?php echo lang('admin_page');?></a></li>
|
||||
<?php } ?>
|
||||
<li class="nav-item"><a class="nav-link" href="<?php echo url('user-logout');?>"><?php echo lang('logout');?></a></li>
|
||||
|
||||
<?php } ?>
|
||||
|
||||
<!--{hook header_nav_pc_user_end.htm}-->
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<!-- 手机导航 -->
|
||||
|
||||
<table width="100%" class="hidden-lg-up navbar-nav">
|
||||
<tr>
|
||||
<td width="100">
|
||||
<?php if($route == 'index' || $route == 'forum') { ?>
|
||||
<a class="icon-navicon navbar-toggler" role="button" data-toggle="collapse" data-target="#mobile_collapsing_bavbar"></a>
|
||||
<?php } else { ?>
|
||||
<div class="nav-item">
|
||||
<a class="nav-link icon-chevron-left xn-back" href="javascript:history.back();" aria-label="<?php echo lang('back');?>"></a>
|
||||
</div>
|
||||
<?php } ?>
|
||||
|
||||
</td>
|
||||
<td>
|
||||
<a class="nav-link text-center" href="<?php echo $header['mobile_link'];?>">
|
||||
<?php if($header['mobile_title']) { ?>
|
||||
<?php echo $header['mobile_title'];?>
|
||||
<?php } else { ?>
|
||||
<img src="<?php echo $conf['view_url'];?>img/logo.png" class="logo-sm center-block">
|
||||
<?php } ?>
|
||||
</a>
|
||||
|
||||
</td>
|
||||
<td width="100" align="right">
|
||||
<?php if(empty($uid)) { ?>
|
||||
<a class="nav-link m-r-xs" href="<?php echo url('user-login');?>" aria-label="<?php echo lang('login');?>"> <i class="icon-user icon-2x"></i></a>
|
||||
<?php } else { ?>
|
||||
|
||||
<?php if($route != 'thread') { ?>
|
||||
<a class="nav-link icon-edit icon" href="<?php echo url("thread-create-$fid");?>" aria-label="<?php echo lang('thread_create');?>"></a>
|
||||
<?php } else { ?>
|
||||
<a class="nav-link icon-reply icon" href="<?php echo url("post-create-$tid");?>" aria-label="<?php echo lang('post_create_new');?>"></a>
|
||||
<?php } ?>
|
||||
|
||||
<?php } ?>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
<!-- 手机导航:下拉菜单 mobile navigation drop menu -->
|
||||
<div class="collapse" id="mobile_collapsing_bavbar" style="overflow-y: auto;">
|
||||
<div class="p-a-1">
|
||||
<ul class="nav navbar-nav" id="nav_mobile">
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="./"><i class="icon-home"></i> <?php echo lang('index_page');?></a>
|
||||
</li>
|
||||
|
||||
<!--{hook header_nav_mobile_forum_before.htm}-->
|
||||
|
||||
<?php foreach($forumlist_show as $_forum) { ?>
|
||||
<li class="nav-item" fid="<?php echo $_forum['fid'];?>">
|
||||
<a class="nav-link m-l-2" href="<?php echo url("forum-$_forum[fid]");?>"><i class="icon-circle-blank"></i> <?php echo $_forum['name'];?></a>
|
||||
</li>
|
||||
<?php } ?>
|
||||
|
||||
<!--{hook header_nav_mobile_forum_after.htm}-->
|
||||
|
||||
<!-- 个人资料 / profile -->
|
||||
<?php if($uid) { ?>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="<?php echo url('my');?>"><i class="icon-user"></i> <?php echo lang('user_profile');?></a>
|
||||
</li>
|
||||
<?php } ?>
|
||||
|
||||
<!-- 后台 / background -->
|
||||
<?php if($gid == 1) { ?>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="admin/"><i class="icon-home"></i> <?php echo lang('admin_page');?></a>
|
||||
</li>
|
||||
<?php } ?>
|
||||
|
||||
<!--{hook header_nav_mobile_logout_before.htm}-->
|
||||
|
||||
<!-- 退出 / logout-->
|
||||
<?php if($uid) { ?>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="<?php echo url('user-logout');?>"><i class="icon-off"></i> <?php echo lang('logout');?></a>
|
||||
</li>
|
||||
<?php } ?>
|
||||
|
||||
<!--{hook header_nav_mobile_logout_after.htm}-->
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</nav>
|
||||
|
||||
<!--{hook header_nav_footer.htm}-->
|
284
z_daisy/overwrite/view/htms/thread.htm
Normal file
284
z_daisy/overwrite/view/htms/thread.htm
Normal file
@ -0,0 +1,284 @@
|
||||
<?php include _include(APP_PATH.'view/htm/header.inc.htm');?>
|
||||
<div id="body" class="container">
|
||||
<!--{hook body_start.htm}-->
|
||||
|
||||
<!--{hook thread_start.htm}-->
|
||||
|
||||
<!-- only for screenreader -->
|
||||
<a role="button" class="sr-only sr-focusable" href="<?php echo url('thread-create-'.$fid);?>"><?php echo lang('thread_create_new');?></a>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-9">
|
||||
<!--{hook thread_breadcrumb_before.htm}-->
|
||||
<ol class="breadcrumb m-b-sm hidden-lg-down">
|
||||
<li class="breadcrumb-item"><a href="./" aria-label="<?php echo lang('index_page');?>"><i class="icon-home"></i></a></li>
|
||||
<li class="breadcrumb-item"><a href="<?php echo url("forum-$fid");?>"><?php echo $forum['name'];?></a></li>
|
||||
<li class="breadcrumb-item active"><a href="<?php echo url("thread-$tid");?>" title="<?php echo lang('index_page');?>返回主题第一页"><?php echo $thread['subject'];?></a></li>
|
||||
<!--{hook thread_breadcrumb.htm}-->
|
||||
</ol>
|
||||
<!--{hook thread_breadcrumb_after.htm}-->
|
||||
<div class="card card-block">
|
||||
<dl class="row">
|
||||
<dt class="vtop p-r-1 td-avatar">
|
||||
<a href="<?php echo url("user-$thread[uid]");?>" tabindex="-1">
|
||||
<img class="avatar" src="<?php echo $thread['user_avatar_url'];?>">
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
<!--{hook thread_subject_before.htm}-->
|
||||
<h3 class="break-all">
|
||||
<!--{hook thread_subject_start.htm}-->
|
||||
<?php echo $thread['subject'];?>
|
||||
<!--{hook thread_subject_end.htm}-->
|
||||
</h3>
|
||||
<!--{hook thread_subject_after.htm}-->
|
||||
<dl class="row small">
|
||||
<dt>
|
||||
<!--{hook thread_username_before.htm}-->
|
||||
<span class="username text-muted">
|
||||
<a href="<?php echo url("user-$thread[uid]");?>"><?php echo $thread['username'];?></a>
|
||||
</span>
|
||||
<span class="date text-grey m-l-1"><?php echo $thread['create_date_fmt'];?></span>
|
||||
<span class="text-grey m-l-1 hidden-md-down"><i class="icon-eye"></i> <?php echo $thread['views'];?></span>
|
||||
<!--{hook thread_views_after.htm}-->
|
||||
</dt>
|
||||
<dd class="text-right">
|
||||
<!--{hook thread_update_before.htm}-->
|
||||
<?php if($allowupdate || $first['allowupdate']) { ?>
|
||||
<a href="<?php echo url("post-update-$thread[firstpid]");?>" class="text-grey m-r-1 post_update"><i class="icon-edit"></i> <?php echo lang('edit');?></a>
|
||||
<?php } ?>
|
||||
|
||||
<?php if($allowdelete || $first['allowdelete']) { ?>
|
||||
<a data-href="<?php echo url("post-delete-$thread[firstpid]");?>" href="javascript:void(0);" class="text-grey post_delete" isfirst="1"><i class="icon-remove"></i> <?php echo lang('delete');?></a>
|
||||
<?php } ?>
|
||||
<!--{hook thread_delete_after.htm}-->
|
||||
</dd>
|
||||
</dl>
|
||||
</dd>
|
||||
</dl>
|
||||
<hr />
|
||||
<div class="message break-all" isfirst="1">
|
||||
<?php if($page == 1) { ?>
|
||||
|
||||
<!--{hook thread_message_before.htm}-->
|
||||
<?php echo $first['message_fmt'];?>
|
||||
<!--{hook thread_message_after.htm}-->
|
||||
|
||||
<?php echo post_file_list_html($first['filelist']);?>
|
||||
<!--{hook thread_filelist_after.htm}-->
|
||||
|
||||
<?php } else { ?>
|
||||
|
||||
<!--{hook thread_message_more_before.htm}-->
|
||||
<p><a href="<?php echo url("thread-$tid");?>"><?php echo lang('view_thread_message');?></a></p>
|
||||
<!--{hook thread_message_more_after.htm}-->
|
||||
|
||||
<?php } ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!--{hook thread_postlist_before.htm}-->
|
||||
<div class="card post p-a-sm">
|
||||
<table class="table postlist m-b-0">
|
||||
<thead>
|
||||
<tr>
|
||||
<th colspan="2" class="p-a-0 p-b-sm">
|
||||
<dl class="row">
|
||||
<dt>
|
||||
<b><?php echo lang('new_post');?></b> (<span class="posts"><?php echo $thread['posts'];?></span>)
|
||||
</dt>
|
||||
<dd>
|
||||
<!--{hook thread_post_list_title_right.htm}-->
|
||||
</dd>
|
||||
</dl>
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
|
||||
<?php include _include(APP_PATH.'view/htm/post_list.inc.htm'); ?>
|
||||
|
||||
|
||||
|
||||
<?php if(!empty($user)) { ?>
|
||||
<tr class="post">
|
||||
<td class="td-avatar">
|
||||
<a href="<?php echo url("user-$thread[uid]");?>" tabindex="-1">
|
||||
<img class="avatar" src="<?php echo $user['avatar_url'];?>">
|
||||
</a>
|
||||
</td>
|
||||
<td class="p-l-0">
|
||||
<form action="<?php echo url("post-create-$tid-1");?>" method="post" id="quick_reply_form">
|
||||
<input type="hidden" name="doctype" value="1" />
|
||||
<input type="hidden" name="return_html" value="1" />
|
||||
<input type="hidden" name="quotepid" value="0" />
|
||||
<dl class="row small text-muted">
|
||||
<dt class="username"><?php echo $user['username'];?></dt>
|
||||
<dd class="text-right text-grey"><span class="floor"><?php echo ($thread['posts'] + 1);?></span><?php echo lang('floor');?></dd>
|
||||
</dl>
|
||||
<div class="message m-t-xs">
|
||||
<fieldset class="form-group m-b-0">
|
||||
<textarea class="form-control" placeholder="<?php echo lang('message');?>" name="message" id="message"></textarea>
|
||||
</fieldset>
|
||||
</div>
|
||||
<div class="text-muted m-t-sm small">
|
||||
<dl class="row">
|
||||
<dt>
|
||||
<!--{hook thread_quick_reply_left_start.htm}-->
|
||||
<button type="submit" class="btn btn-sm btn-primary" id="submit" data-loading-text="<?php echo lang('submiting');?>..."> <?php echo lang('post_create');?> </button>
|
||||
<!--{hook thread_quick_reply_left_end.htm}-->
|
||||
</dt>
|
||||
<dd class="text-right vtop">
|
||||
<!--{hook thread_quick_reply_right_start.htm}-->
|
||||
<a class="icon-mail-forward text-muted" href="<?php echo url("post-create-$tid");?>" id="advanced_reply"> <?php echo lang('advanced_reply');?></a>
|
||||
<!--{hook thread_quick_reply_right_end.htm}-->
|
||||
</dd>
|
||||
</dl>
|
||||
</div>
|
||||
</form>
|
||||
</td>
|
||||
</tr>
|
||||
<?php } ?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!--{hook thread_postlist_after.htm}-->
|
||||
|
||||
<?php if($pagination) { ?>
|
||||
<nav class="text-center"><ul class="pagination m-y-xs"><?php echo $pagination; ?></ul></nav>
|
||||
<?php }?>
|
||||
|
||||
<!--{hook thread_page_after.htm}-->
|
||||
|
||||
<a role="button" class="btn btn-secondary btn-block xn-back m-y-1 m-x-auto" style="max-width: 50%;" href="javascript:history.back();"><?php echo lang('back');?></a>
|
||||
|
||||
</div>
|
||||
<div class="col-lg-3 hidden-md-down">
|
||||
<a role="button" class="btn btn-primary btn-block btn-sm m-b-sm hidden-md-down" href="<?php echo url('thread-create-'.$fid);?>"><?php echo lang('thread_create_new');?></a>
|
||||
<div class="card hidden-md-down">
|
||||
<!--{hook thread_user_before.htm}-->
|
||||
<a href="<?php echo url("user-$thread[uid]");?>">
|
||||
<img class="avatar-lg center-block m-t-1" src="<?php echo $thread['user_avatar_url'];?>">
|
||||
</a>
|
||||
<h5 class="text-xs-center"><?php echo $thread['username'];?></h5>
|
||||
<div class="card-group card-group-nest">
|
||||
<div class="card">
|
||||
<div class="card-block">
|
||||
<div class="text-xs-center text-muted small"><?php echo lang('threads');?></div>
|
||||
<h5 class="text-xs-center"><?php echo $thread['user']['threads'];?></h5>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card">
|
||||
<div class="card-block">
|
||||
<div class="text-xs-center text-muted small"><?php echo lang('posts');?></div>
|
||||
<h5 class="text-xs-center"><?php echo $thread['user']['posts'];?></h5>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card">
|
||||
<div class="card-block">
|
||||
<div class="text-xs-center text-muted small"><?php echo lang('create_rank');?></div>
|
||||
<h5 class="text-xs-center"><?php echo $thread['user']['uid'];?></h5>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--{hook thread_user_after.htm}-->
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!--{hook thread_end.htm}-->
|
||||
|
||||
<?php include _include(APP_PATH.'view/htm/footer.inc.htm');?>
|
||||
|
||||
<script>
|
||||
var jform = $('#quick_reply_form');
|
||||
var jsubmit = $('#submit');
|
||||
jform.on('submit', function() {
|
||||
jform.reset();
|
||||
jsubmit.button('loading');
|
||||
var postdata = jform.serialize();
|
||||
$.xpost(jform.attr('action'), postdata, function(code, message) {
|
||||
if(code == 0) {
|
||||
var s = '<table>'+message+'</table>';
|
||||
var jtr = $(s).find('tr');
|
||||
jtr.insertBefore($('table.postlist tr').last());
|
||||
jsubmit.button('reset');
|
||||
$('#message').val('');
|
||||
|
||||
// 楼层 +1
|
||||
var jfloor = jform.find('.floor');
|
||||
jfloor.html(xn.intval(jfloor.html()) + 1);
|
||||
|
||||
// 回复数 +1
|
||||
var jposts = $('.posts');
|
||||
jposts.html(xn.intval(jposts.html()) + 1);
|
||||
|
||||
} else if(code < 0) {
|
||||
$.alert(message);
|
||||
jsubmit.button('reset');
|
||||
} else {
|
||||
jform.find('[name="'+code+'"]').alert(message).focus();
|
||||
jsubmit.button('reset');
|
||||
}
|
||||
});
|
||||
return false;
|
||||
});
|
||||
|
||||
|
||||
// 缩放图片,适应屏幕大小。
|
||||
function resize_image() {
|
||||
var jmessagelist = $('div.message');
|
||||
var first_width = jmessagelist.width(); // 815 : 746; // 734 746
|
||||
jmessagelist.each(function() {
|
||||
var jdiv = $(this);
|
||||
var maxwidth = jdiv.attr('isfirst') ? first_width : first_width - 79; // 734 746
|
||||
var jmessage_width = Math.min(jdiv.width(), maxwidth);
|
||||
jdiv.find('img, embed, iframe').each(function() {
|
||||
var jimg = $(this);
|
||||
//if(jimg.width() < 500) return;
|
||||
var img_width = this.org_width;
|
||||
var img_height = this.org_height;
|
||||
if(!img_width) {
|
||||
var img_width = jimg.width();
|
||||
var img_height = jimg.height();
|
||||
this.org_width = img_width;
|
||||
this.org_height = img_height;
|
||||
}
|
||||
//var percent = xn.min(100, xn.ceil((img_width / jmessage_width) * 100));
|
||||
if(img_width > jmessage_width) {
|
||||
if(this.tagName == 'IMG') {
|
||||
jimg.width(jmessage_width);
|
||||
jimg.css('height', 'auto');
|
||||
} else {
|
||||
jimg.width(jmessage_width);
|
||||
var height = (img_height / img_width) * jimg.width();
|
||||
jimg.height(height);
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
});
|
||||
}
|
||||
$(function() {
|
||||
resize_image();
|
||||
$(window).on('resize', resize_image);
|
||||
});
|
||||
|
||||
// 输入框自动伸缩
|
||||
var jmessage = $('#message');
|
||||
jmessage.on('focus', function() {if(jmessage.t) { clearTimeout(jmessage.t); jmessage.t = null; } jmessage.css('height', '6rem'); });
|
||||
jmessage.on('blur', function() {jmessage.t = setTimeout(function() { jmessage.css('height', '2.5rem');}, 1000); });
|
||||
|
||||
$('#nav_pc li[fid="<?php echo $fid;?>"]').tab('show');
|
||||
$('#nav_mobile li[fid="<?php echo $fid;?>"]').tab('show');
|
||||
|
||||
</script>
|
||||
|
||||
<?php if($thread['closed'] && ($gid == 0 || $gid > 5)) { ?>
|
||||
<script>
|
||||
jmessage.val('<?php echo lang('thread_has_already_closed');?>').attr('readonly', 'readonly');
|
||||
</script>
|
||||
<?php } ?>
|
||||
<!--{hook thread_js.htm}-->
|
||||
</div>
|
146
z_daisy/route/doc.htm
Normal file
146
z_daisy/route/doc.htm
Normal file
@ -0,0 +1,146 @@
|
||||
<?php
|
||||
|
||||
!defined('DEBUG') AND exit('Access Denied.');
|
||||
|
||||
$action = param(1);
|
||||
|
||||
// hook thread_start.php
|
||||
|
||||
// 发表主题帖 | create new thread
|
||||
if($action == 'create') {
|
||||
|
||||
// hook thread_create_get_post.php
|
||||
|
||||
user_login_check();
|
||||
|
||||
if($method == 'GET') {
|
||||
|
||||
// hook thread_create_get_start.php
|
||||
|
||||
$fid = param(2, 0);
|
||||
$forum = $fid ? forum_read($fid) : array();
|
||||
|
||||
$forumlist_allowthread = forum_list_access_filter($forumlist, $gid, 'allowthread');
|
||||
$forumarr = xn_json_encode(arrlist_key_values($forumlist_allowthread, 'fid', 'name'));
|
||||
if(empty($forumlist_allowthread)) {
|
||||
message(-1, lang('user_group_insufficient_privilege'));
|
||||
}
|
||||
|
||||
$header['title'] = lang('create_thread');
|
||||
$header['mobile_title'] = $fid ? $forum['name'] : '';
|
||||
$header['mobile_linke'] = url("forum-$fid");
|
||||
|
||||
// hook thread_create_get_end.php
|
||||
|
||||
include _include(APP_PATH.'view/htm/post.htm');
|
||||
|
||||
} else {
|
||||
|
||||
// hook thread_create_thread_start.php
|
||||
|
||||
include XIUNOPHP_PATH.'xn_html_safe.func.php';
|
||||
|
||||
$fid = param('fid', 0);
|
||||
$forum = forum_read($fid);
|
||||
empty($forum) AND message('fid', lang('forum_not_exists'));
|
||||
|
||||
$r = forum_access_user($fid, $gid, 'allowthread');
|
||||
!$r AND message(-1, lang('user_group_insufficient_privilege'));
|
||||
|
||||
$subject = htmlspecialchars(param('subject', '', FALSE));
|
||||
empty($subject) AND message('subject', lang('please_input_subject'));
|
||||
xn_strlen($subject) > 128 AND message('subject', lang('subject_length_over_limit', array('maxlength'=>128)));
|
||||
|
||||
$message = param('message', '', FALSE);
|
||||
empty($message) AND message('message', lang('please_input_message'));
|
||||
$doctype = param('doctype', 0);
|
||||
$doctype > 10 AND message(-1, lang('doc_type_not_supported'));
|
||||
xn_strlen($message) > 2028000 AND message('message', lang('message_too_long'));
|
||||
|
||||
$thread = array (
|
||||
'fid'=>$fid,
|
||||
'uid'=>$uid,
|
||||
'sid'=>$sid,
|
||||
'subject'=>$subject,
|
||||
'message'=>$message,
|
||||
'time'=>$time,
|
||||
'longip'=>$longip,
|
||||
'doctype'=>$doctype,
|
||||
);
|
||||
|
||||
// hook thread_create_thread_before.php
|
||||
|
||||
$tid = thread_create($thread, $pid);
|
||||
$pid === FALSE AND message(-1, lang('create_post_failed'));
|
||||
$tid === FALSE AND message(-1, lang('create_thread_failed'));
|
||||
|
||||
// hook thread_create_thread_end.php
|
||||
message(0, lang('create_thread_sucessfully'));
|
||||
}
|
||||
|
||||
// 帖子详情 | post detail
|
||||
} else {
|
||||
|
||||
// thread-{tid}-{page}-{keyword}.htm
|
||||
$tid = param(1, 0);
|
||||
$page = param(2, 1);
|
||||
$keyword = param(3);
|
||||
$pagesize = $conf['postlist_pagesize'];
|
||||
//$pagesize = 10;
|
||||
//$page == 1 AND $pagesize++;
|
||||
|
||||
// hook thread_info_start.php
|
||||
|
||||
$thread = thread_read($tid);
|
||||
empty($thread) AND message(-1, lang('thread_not_exists'));;
|
||||
|
||||
$fid = $thread['fid'];
|
||||
$forum = forum_read($fid);
|
||||
empty($forum) AND message(3, lang('forum_not_exists'));
|
||||
|
||||
$postlist = post_find_by_tid($tid, $page, $pagesize);
|
||||
empty($postlist) AND message(4, lang('post_not_exists'));
|
||||
|
||||
if($page == 1) {
|
||||
empty($postlist[$thread['firstpid']]) AND message(-1, lang('data_malformation'));
|
||||
$first = $postlist[$thread['firstpid']];
|
||||
unset($postlist[$thread['firstpid']]);
|
||||
$attachlist = $imagelist = $filelist = array();
|
||||
|
||||
// 如果是大站,可以用单独的点击服务,减少 db 压力
|
||||
// if request is huge, separate it from mysql server
|
||||
thread_inc_views($tid);
|
||||
} else {
|
||||
$first = post_read($thread['firstpid']);
|
||||
}
|
||||
|
||||
$keywordurl = '';
|
||||
if($keyword) {
|
||||
$thread['subject'] = post_highlight_keyword($thread['subject'], $keyword);
|
||||
//$first['message'] = post_highlight_keyword($first['subject']);
|
||||
$keywordurl = "-$keyword";
|
||||
}
|
||||
$allowpost = forum_access_user($fid, $gid, 'allowpost') ? 1 : 0;
|
||||
$allowupdate = forum_access_mod($fid, $gid, 'allowupdate') ? 1 : 0;
|
||||
$allowdelete = forum_access_mod($fid, $gid, 'allowdelete') ? 1 : 0;
|
||||
|
||||
forum_access_user($fid, $gid, 'allowread') OR message(-1, lang('user_group_insufficient_privilege'));
|
||||
|
||||
$pagination = pagination(url("thread-$tid-{page}$keywordurl"), $thread['posts'] + 1, $page, $pagesize);
|
||||
|
||||
$header['title'] = $thread['subject'].'-'.$forum['name'].'-'.$conf['sitename'];
|
||||
//$header['mobile_title'] = lang('thread_detail');
|
||||
$header['mobile_title'] = $forum['name'];;
|
||||
$header['mobile_link'] = url("forum-$fid");
|
||||
$header['keywords'] = '';
|
||||
$header['description'] = $thread['subject'];
|
||||
$_SESSION['fid'] = $fid;
|
||||
|
||||
// hook thread_info_end.php
|
||||
include _include(APP_PATH.'plugin/z_doc/view/htm/doc.htm');
|
||||
|
||||
}
|
||||
|
||||
// hook thread_end.php
|
||||
|
||||
?>
|
146
z_daisy/route/doc.php
Normal file
146
z_daisy/route/doc.php
Normal file
@ -0,0 +1,146 @@
|
||||
<?php
|
||||
|
||||
!defined('DEBUG') AND exit('Access Denied.');
|
||||
|
||||
$action = param(1);
|
||||
|
||||
// hook thread_start.php
|
||||
|
||||
// 发表主题帖 | create new thread
|
||||
if($action == 'create') {
|
||||
|
||||
// hook thread_create_get_post.php
|
||||
|
||||
user_login_check();
|
||||
|
||||
if($method == 'GET') {
|
||||
|
||||
// hook thread_create_get_start.php
|
||||
|
||||
$fid = param(2, 0);
|
||||
$forum = $fid ? forum_read($fid) : array();
|
||||
|
||||
$forumlist_allowthread = forum_list_access_filter($forumlist, $gid, 'allowthread');
|
||||
$forumarr = xn_json_encode(arrlist_key_values($forumlist_allowthread, 'fid', 'name'));
|
||||
if(empty($forumlist_allowthread)) {
|
||||
message(-1, lang('user_group_insufficient_privilege'));
|
||||
}
|
||||
|
||||
$header['title'] = lang('create_thread');
|
||||
$header['mobile_title'] = $fid ? $forum['name'] : '';
|
||||
$header['mobile_linke'] = url("forum-$fid");
|
||||
|
||||
// hook thread_create_get_end.php
|
||||
|
||||
include _include(APP_PATH.'view/htm/post.htm');
|
||||
|
||||
} else {
|
||||
|
||||
// hook thread_create_thread_start.php
|
||||
|
||||
include XIUNOPHP_PATH.'xn_html_safe.func.php';
|
||||
|
||||
$fid = param('fid', 0);
|
||||
$forum = forum_read($fid);
|
||||
empty($forum) AND message('fid', lang('forum_not_exists'));
|
||||
|
||||
$r = forum_access_user($fid, $gid, 'allowthread');
|
||||
!$r AND message(-1, lang('user_group_insufficient_privilege'));
|
||||
|
||||
$subject = htmlspecialchars(param('subject', '', FALSE));
|
||||
empty($subject) AND message('subject', lang('please_input_subject'));
|
||||
xn_strlen($subject) > 128 AND message('subject', lang('subject_length_over_limit', array('maxlength'=>128)));
|
||||
|
||||
$message = param('message', '', FALSE);
|
||||
empty($message) AND message('message', lang('please_input_message'));
|
||||
$doctype = param('doctype', 0);
|
||||
$doctype > 10 AND message(-1, lang('doc_type_not_supported'));
|
||||
xn_strlen($message) > 2028000 AND message('message', lang('message_too_long'));
|
||||
|
||||
$thread = array (
|
||||
'fid'=>$fid,
|
||||
'uid'=>$uid,
|
||||
'sid'=>$sid,
|
||||
'subject'=>$subject,
|
||||
'message'=>$message,
|
||||
'time'=>$time,
|
||||
'longip'=>$longip,
|
||||
'doctype'=>$doctype,
|
||||
);
|
||||
|
||||
// hook thread_create_thread_before.php
|
||||
|
||||
$tid = thread_create($thread, $pid);
|
||||
$pid === FALSE AND message(-1, lang('create_post_failed'));
|
||||
$tid === FALSE AND message(-1, lang('create_thread_failed'));
|
||||
|
||||
// hook thread_create_thread_end.php
|
||||
message(0, lang('create_thread_sucessfully'));
|
||||
}
|
||||
|
||||
// 帖子详情 | post detail
|
||||
} else {
|
||||
|
||||
// thread-{tid}-{page}-{keyword}.htm
|
||||
$tid = param(1, 0);
|
||||
$page = param(2, 1);
|
||||
$keyword = param(3);
|
||||
$pagesize = $conf['postlist_pagesize'];
|
||||
//$pagesize = 10;
|
||||
//$page == 1 AND $pagesize++;
|
||||
|
||||
// hook thread_info_start.php
|
||||
|
||||
$thread = thread_read($tid);
|
||||
empty($thread) AND message(-1, lang('thread_not_exists'));;
|
||||
|
||||
$fid = $thread['fid'];
|
||||
$forum = forum_read($fid);
|
||||
empty($forum) AND message(3, lang('forum_not_exists'));
|
||||
|
||||
$postlist = post_find_by_tid($tid, $page, $pagesize);
|
||||
empty($postlist) AND message(4, lang('post_not_exists'));
|
||||
|
||||
if($page == 1) {
|
||||
empty($postlist[$thread['firstpid']]) AND message(-1, lang('data_malformation'));
|
||||
$first = $postlist[$thread['firstpid']];
|
||||
unset($postlist[$thread['firstpid']]);
|
||||
$attachlist = $imagelist = $filelist = array();
|
||||
|
||||
// 如果是大站,可以用单独的点击服务,减少 db 压力
|
||||
// if request is huge, separate it from mysql server
|
||||
thread_inc_views($tid);
|
||||
} else {
|
||||
$first = post_read($thread['firstpid']);
|
||||
}
|
||||
|
||||
$keywordurl = '';
|
||||
if($keyword) {
|
||||
$thread['subject'] = post_highlight_keyword($thread['subject'], $keyword);
|
||||
//$first['message'] = post_highlight_keyword($first['subject']);
|
||||
$keywordurl = "-$keyword";
|
||||
}
|
||||
$allowpost = forum_access_user($fid, $gid, 'allowpost') ? 1 : 0;
|
||||
$allowupdate = forum_access_mod($fid, $gid, 'allowupdate') ? 1 : 0;
|
||||
$allowdelete = forum_access_mod($fid, $gid, 'allowdelete') ? 1 : 0;
|
||||
|
||||
forum_access_user($fid, $gid, 'allowread') OR message(-1, lang('user_group_insufficient_privilege'));
|
||||
|
||||
$pagination = pagination(url("thread-$tid-{page}$keywordurl"), $thread['posts'] + 1, $page, $pagesize);
|
||||
|
||||
$header['title'] = $thread['subject'].'-'.$forum['name'].'-'.$conf['sitename'];
|
||||
//$header['mobile_title'] = lang('thread_detail');
|
||||
$header['mobile_title'] = $forum['name'];;
|
||||
$header['mobile_link'] = url("forum-$fid");
|
||||
$header['keywords'] = '';
|
||||
$header['description'] = $thread['subject'];
|
||||
$_SESSION['fid'] = $fid;
|
||||
|
||||
// hook thread_info_end.php
|
||||
include _include(APP_PATH.'plugin/z_doc/view/htm/doc.htm');
|
||||
|
||||
}
|
||||
|
||||
// hook thread_end.php
|
||||
|
||||
?>
|
151
z_daisy/route/upload.php
Normal file
151
z_daisy/route/upload.php
Normal file
@ -0,0 +1,151 @@
|
||||
<?php
|
||||
!defined('DEBUG') AND exit('Access Denied.');
|
||||
echo $user['uid'];
|
||||
|
||||
|
||||
$datetime = date('Ym',time());
|
||||
$targetDir = '../upload';
|
||||
$uploadDir = '../../upload/attach/'.$datetime;
|
||||
|
||||
$cleanupTargetDir = true;
|
||||
|
||||
|
||||
if (!file_exists($targetDir)) {
|
||||
@mkdir($targetDir);
|
||||
}
|
||||
|
||||
if (!file_exists($uploadDir)) {
|
||||
@mkdir($uploadDir);
|
||||
}
|
||||
|
||||
if (isset($_REQUEST["name"])) {
|
||||
$fileName = $_REQUEST["name"];
|
||||
} elseif (!empty($_FILES)) {
|
||||
$fileName = $_FILES["file"]["name"];
|
||||
} else {
|
||||
$fileName = uniqid("file_");
|
||||
}
|
||||
// xxxxx
|
||||
|
||||
|
||||
$typea = substr($fileName, strrpos($fileName, '.') + 1);
|
||||
//过滤中文名图片
|
||||
|
||||
|
||||
echo "<br>";
|
||||
echo $user['uid'];
|
||||
echo "<br>";
|
||||
echo xn_rand(15) ;
|
||||
echo "<br>";
|
||||
$n=3;
|
||||
//function () {
|
||||
|
||||
$str = '0123456789abcdefghijklmnopqrstuvwxyz';
|
||||
$len = strlen($str);
|
||||
$return = '';
|
||||
for($i=0; $i<$n; $i++) {
|
||||
$r = xn_rand(1, $len);
|
||||
$return = $str[$r - 1];
|
||||
}
|
||||
return $return;
|
||||
//}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
$fileName = $uid.'_'.xn_rand(15).".".$typea;
|
||||
|
||||
$fileName = iconv('UTF-8', 'GB2312', $fileName);
|
||||
$filePath = $targetDir . DIRECTORY_SEPARATOR . $fileName;
|
||||
$uploadPath = $uploadDir . DIRECTORY_SEPARATOR . $fileName;
|
||||
|
||||
|
||||
$imgUrl= $uploadDir."/".$fileName;
|
||||
echo str_replace("../../","",$imgUrl);
|
||||
|
||||
$chunk = isset($_REQUEST["chunk"]) ? intval($_REQUEST["chunk"]) : 0;
|
||||
$chunks = isset($_REQUEST["chunks"]) ? intval($_REQUEST["chunks"]) : 1;
|
||||
|
||||
|
||||
|
||||
if ($cleanupTargetDir) {
|
||||
if (!is_dir($targetDir) || !$dir = opendir($targetDir)) {
|
||||
die('{"jsonrpc" : "2.0", "error" : {"code": 100, "message": "Failed to open temp directory."}, "id" : "id"}');
|
||||
}
|
||||
|
||||
while (($file = readdir($dir)) !== false) {
|
||||
$tmpfilePath = $targetDir . DIRECTORY_SEPARATOR . $file;
|
||||
|
||||
if ($tmpfilePath == "{$filePath}_{$chunk}.part" || $tmpfilePath == "{$filePath}_{$chunk}.parttmp") {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (preg_match('/\.(part|parttmp)$/', $file) && (@filemtime($tmpfilePath) < time() - $maxFileAge)) {
|
||||
@unlink($tmpfilePath);
|
||||
}
|
||||
}
|
||||
closedir($dir);
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (!$out = @fopen("{$filePath}_{$chunk}.parttmp", "wb")) {
|
||||
die('{"jsonrpc" : "2.0", "error" : {"code": 102, "message": "Failed to open output stream."}, "id" : "id"}');
|
||||
}
|
||||
|
||||
if (!empty($_FILES)) {
|
||||
if ($_FILES["file"]["error"] || !is_uploaded_file($_FILES["file"]["tmp_name"])) {
|
||||
die('{"jsonrpc" : "2.0", "error" : {"code": 103, "message": "Failed to move uploaded file."}, "id" : "id"}');
|
||||
}
|
||||
|
||||
if (!$in = @fopen($_FILES["file"]["tmp_name"], "rb")) {
|
||||
die('{"jsonrpc" : "2.0", "error" : {"code": 101, "message": "Failed to open input stream."}, "id" : "id"}');
|
||||
}
|
||||
} else {
|
||||
if (!$in = @fopen("php://input", "rb")) {
|
||||
die('{"jsonrpc" : "2.0", "error" : {"code": 101, "message": "Failed to open input stream."}, "id" : "id"}');
|
||||
}
|
||||
}
|
||||
|
||||
while ($buff = fread($in, 4096)) {
|
||||
fwrite($out, $buff);
|
||||
}
|
||||
|
||||
@fclose($out);
|
||||
@fclose($in);
|
||||
|
||||
rename("{$filePath}_{$chunk}.parttmp", "{$filePath}_{$chunk}.part");
|
||||
|
||||
$index = 0;
|
||||
$done = true;
|
||||
for( $index = 0; $index < $chunks; $index++ ) {
|
||||
if ( !file_exists("{$filePath}_{$index}.part") ) {
|
||||
$done = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if ( $done ) {
|
||||
if (!$out = @fopen($uploadPath, "wb")) {
|
||||
die('{"jsonrpc" : "2.0", "error" : {"code": 102, "message": "Failed to open output stream."}, "id" : "id"}');
|
||||
}
|
||||
|
||||
if ( flock($out, LOCK_EX) ) {
|
||||
for( $index = 0; $index < $chunks; $index++ ) {
|
||||
if (!$in = @fopen("{$filePath}_{$index}.part", "rb")) {
|
||||
break;
|
||||
}
|
||||
|
||||
while ($buff = fread($in, 4096)) {
|
||||
fwrite($out, $buff);
|
||||
}
|
||||
|
||||
@fclose($in);
|
||||
@unlink("{$filePath}_{$index}.part");
|
||||
}
|
||||
|
||||
flock($out, LOCK_UN);
|
||||
}
|
||||
@fclose($out);
|
||||
}
|
||||
|
||||
*/
|
170
z_daisy/view/css/bubble.css
Normal file
170
z_daisy/view/css/bubble.css
Normal file
@ -0,0 +1,170 @@
|
||||
/* 这是主视图的样式, 放进气泡的 CSS 文件以减少占用 */
|
||||
/*#masthead{box-shadow:0 .125rem .4375rem rgba(0,0,0,0.7);-webkit-box-shadow:0 .125rem .4375rem rgba(0,0,0,0.7)}*/
|
||||
#masthead{position:relative;display:table;text-align:center;width:100%;overflow:hidden;transition:all 1s;color:#fff;background-color:#1e1e1f}
|
||||
#masthead::before {content: "";position: absolute;top: 0;bottom: 0;left: 0;right: 0;background-color: rgba(0, 0, 0, 0.3);}
|
||||
#masthead::after {content: '';width: 150%;height: 4.375rem;background: #EEEEF2;left: -25%;bottom: -2.875rem;border-radius: 100%;position: absolute;}
|
||||
|
||||
/* 标题 12px等于0.75rem*/
|
||||
.blog-title {font-size: 2.625rem;line-height: 1.5;margin-bottom: .5rem;font-weight: 200;}
|
||||
.light{font-weight:300 !important}
|
||||
.inner{display:table-cell;vertical-align:middle;position:relative;z-index:10;width:100%}
|
||||
|
||||
.blog-description {font-size: .75rem;}
|
||||
.blog-background.loading{opacity:0}
|
||||
.blog-background{
|
||||
/*background-attachment: fixed;*/
|
||||
display:block;
|
||||
width:100%;height:100%;
|
||||
background-repeat:no-repeat;
|
||||
background-size:cover;
|
||||
background-position:center;
|
||||
position:absolute;
|
||||
left:0;top:0;
|
||||
-webkit-filter: brightness(0.7);
|
||||
-moz-filter: brightness(0.7);
|
||||
-o-filter: brightness(0.7);
|
||||
filter: brightness(0.7);
|
||||
-webkit-transition:1s ease all;
|
||||
-moz-transition:1s ease all;
|
||||
-o-transition:1s ease all;
|
||||
transition:5s ease all;
|
||||
opacity:1
|
||||
}
|
||||
|
||||
|
||||
/*!
|
||||
* CSS source:https://iu.tn/archives/qi-pao-piao-fu.html
|
||||
*/
|
||||
|
||||
.bg-bubbles {
|
||||
display:block;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
ul,li {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.bg-bubbles li {
|
||||
position: absolute;
|
||||
list-style: none;
|
||||
display: block;
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
background-color: rgba(255,255,255,.07);
|
||||
bottom: -160px;
|
||||
-webkit-animation: square 25s infinite;
|
||||
animation: square 25s infinite;
|
||||
-webkit-transition-timing-function: linear;
|
||||
transition-timing-function: linear;
|
||||
border-radius: 5rem;
|
||||
}
|
||||
|
||||
.bg-bubbles li:nth-child(1) {
|
||||
left: 10%
|
||||
}
|
||||
|
||||
.bg-bubbles li:nth-child(2) {
|
||||
left: 20%;
|
||||
width: 80px;
|
||||
height: 80px;
|
||||
-webkit-animation-delay: 200ms;
|
||||
animation-delay: 200ms;
|
||||
-webkit-animation-duration: 17s;
|
||||
animation-duration: 17s
|
||||
}
|
||||
|
||||
.bg-bubbles li:nth-child(3) {
|
||||
left: 25%;
|
||||
-webkit-animation-delay: 400ms;
|
||||
animation-delay: 400ms
|
||||
}
|
||||
|
||||
.bg-bubbles li:nth-child(4) {
|
||||
left: 40%;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
-webkit-animation-duration: 30s;
|
||||
animation-duration: 30s;
|
||||
background-color: rgba(255, 255, 255, .1)
|
||||
}
|
||||
|
||||
.bg-bubbles li:nth-child(5) {
|
||||
left: 70%
|
||||
}
|
||||
|
||||
.bg-bubbles li:nth-child(6) {
|
||||
left: 80%;
|
||||
width: 80px;
|
||||
height: 80px;
|
||||
-webkit-animation-delay: 5s;
|
||||
animation-delay: 5s;
|
||||
background-color: rgba(255, 255, 255, .15)
|
||||
}
|
||||
|
||||
.bg-bubbles li:nth-child(7) {
|
||||
left: 32%;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
-webkit-animation-delay: 7s;
|
||||
animation-delay: 7s
|
||||
}
|
||||
|
||||
.bg-bubbles li:nth-child(8) {
|
||||
left: 55%;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
-webkit-animation-delay: 15s;
|
||||
animation-delay: 15s;
|
||||
-webkit-animation-duration: 40s;
|
||||
animation-duration: 40s
|
||||
}
|
||||
|
||||
.bg-bubbles li:nth-child(9) {
|
||||
left: 25%;
|
||||
width: 10px;
|
||||
height: 10px;
|
||||
-webkit-animation-delay: 2s;
|
||||
animation-delay: 2s;
|
||||
-webkit-animation-duration: 40s;
|
||||
animation-duration: 40s;
|
||||
background-color: rgba(255, 255, 255, .1)
|
||||
}
|
||||
|
||||
.bg-bubbles li:nth-child(10) {
|
||||
left: 90%;
|
||||
width: 80px;
|
||||
height: 80px;
|
||||
-webkit-animation-delay: 11s;
|
||||
animation-delay: 11s
|
||||
}
|
||||
|
||||
@-webkit-keyframes square {
|
||||
0% {
|
||||
-webkit-transform: translateY(0);
|
||||
transform: translateY(0)
|
||||
}
|
||||
|
||||
100% {
|
||||
-webkit-transform: translateY(-700px) rotate(600deg);
|
||||
transform: translateY(-700px) rotate(600deg)
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes square {
|
||||
0% {
|
||||
-webkit-transform: translateY(0);
|
||||
transform: translateY(0)
|
||||
}
|
||||
|
||||
100% {
|
||||
-webkit-transform: translateY(-700px) rotate(600deg);
|
||||
transform: translateY(-700px) rotate(600deg)
|
||||
}
|
||||
} /* 漂浮 */
|
366
z_daisy/view/htm/doc.htm
Normal file
366
z_daisy/view/htm/doc.htm
Normal file
@ -0,0 +1,366 @@
|
||||
<?php include _include(APP_PATH.'view/htm/header.inc.htm');?>
|
||||
|
||||
<!--{hook thread_start.htm}-->
|
||||
|
||||
<!-- only for screenreader -->
|
||||
<a role="button" class="sr-only sr-focusable" href="<?php echo url('thread-create-'.$fid);?>"><?php echo lang('thread_create_new');?></a>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-3 hidden-md-down">
|
||||
<a role="button" class="btn btn-primary btn-block btn-sm m-b-sm hidden-md-down" href="<?php echo url('thread-create-'.$fid);?>"><?php echo lang('thread_create_new');?></a>
|
||||
<div class="card hidden-md-down">
|
||||
<!--{hook thread_user_before.htm}-->
|
||||
<a href="<?php echo url("user-$thread[uid]");?>">
|
||||
<img class="avatar-lg center-block m-t-1" src="<?php echo $thread['user_avatar_url'];?>">
|
||||
</a>
|
||||
<h5 class="text-xs-center"><?php echo $thread['username'];?></h5>
|
||||
<div class="card-group card-group-nest">
|
||||
<div class="card">
|
||||
<div class="card-block">
|
||||
<div class="text-xs-center text-muted small"><?php echo lang('threads');?></div>
|
||||
<h5 class="text-xs-center"><?php echo $thread['user']['threads'];?></h5>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card">
|
||||
<div class="card-block">
|
||||
<div class="text-xs-center text-muted small"><?php echo lang('posts');?></div>
|
||||
<h5 class="text-xs-center"><?php echo $thread['user']['posts'];?></h5>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card">
|
||||
<div class="card-block">
|
||||
<div class="text-xs-center text-muted small"><?php echo lang('create_rank');?></div>
|
||||
<h5 class="text-xs-center"><?php echo $thread['user']['uid'];?></h5>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--{hook thread_user_after.htm}-->
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<style>
|
||||
table.nav_tag_list {margin-bottom: 0.2rem;}
|
||||
table.nav_tag_list td {padding: 0.3rem;}
|
||||
table.nav_tag_list td a{margin-right: 0.5rem;}
|
||||
.nav_tag_list .active {font-weight: 800;}
|
||||
</style>
|
||||
开始
|
||||
<table class="small nav_tag_list">
|
||||
<?php if(!empty($forum['tagcatelist'])) {foreach($forum['tagcatelist'] as $i=>$tagcate) { ?>
|
||||
<tr>
|
||||
<td class="text-small text-muted text-nowrap" align="right" valign="top">
|
||||
<?php echo $tagcate['name'];?>:
|
||||
</td>
|
||||
<td>
|
||||
<?php
|
||||
$tagidadd = '';
|
||||
$tagactive = '';
|
||||
/*
|
||||
switch ($i) {
|
||||
case 0: $tagidadd = "0_{$tagid2}_{$tagid3}_{$tagid4}";
|
||||
$tagactive = 0 == $tagid1 ? ' class="active"' : '';
|
||||
break;
|
||||
case 1: $tagidadd = "{$tagid1}_0_{$tagid3}_{$tagid4}";
|
||||
$tagactive = 0 == $tagid2 ? ' class="active"' : '';
|
||||
break;
|
||||
case 2: $tagidadd = "{$tagid1}_{$tagid2}_0_{$tagid4}";
|
||||
$tagactive = 0 == $tagid3 ? ' class="active"' : '';
|
||||
break;
|
||||
case 3: $tagidadd = "{$tagid1}_{$tagid2}_{$tagid3}_0";
|
||||
$tagactive = 0 == $tagid4 ? ' class="active"' : '';
|
||||
break;
|
||||
}
|
||||
*/
|
||||
?>
|
||||
<a href="<?php echo url("forum-$fid-$page-$tagidadd");?>" <?php echo $tagactive;?>><?php echo lang('all');?></a>
|
||||
<?php foreach($tagcate['taglist'] as $tag) { ?>
|
||||
<?php
|
||||
|
||||
switch ($i) {
|
||||
case 0:
|
||||
$tagidadd = "{$tag['tagid']}";
|
||||
//$tagactive = $tag['tagid'] == $tagid1 ? ' class="active"' : '';
|
||||
//break;
|
||||
/*
|
||||
case 1: $tagidadd = "{$tagid1}_{$tag['tagid']}_{$tagid3}_{$tagid4}";
|
||||
$tagactive = $tag['tagid'] == $tagid2 ? ' class="active"' : '';
|
||||
break;
|
||||
case 2: $tagidadd = "{$tagid1}_{$tagid2}_{$tag['tagid']}_{$tagid4}";
|
||||
$tagactive = $tag['tagid'] == $tagid3 ? ' class="active"' : '';
|
||||
break;
|
||||
case 3: $tagidadd = "{$tagid1}_{$tagid2}_{$tagid3}_{$tag['tagid']}";
|
||||
$tagactive = $tag['tagid'] == $tagid4 ? ' class="active"' : '';
|
||||
break;*/
|
||||
}
|
||||
|
||||
?>
|
||||
<a href="<?php echo url("doc-$tid-$page-$tagidadd");?>" <?php echo $tagactive;?>><?php echo $tag['name'];?></a>
|
||||
<?php } ?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php }} ?>
|
||||
</table>
|
||||
结束
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="col-lg-9">
|
||||
|
||||
<!-- 这是新增的段落 -->
|
||||
<div>
|
||||
<?php echo "PHP输出一段信息"; ?>
|
||||
<?php echo "PHP输出user".$user['uid']; ?>
|
||||
<?php echo "PHP输出user".$username; ?>
|
||||
</div>
|
||||
<!-- /这是新增的段落 -->
|
||||
|
||||
|
||||
<!--{hook thread_breadcrumb_before.htm}-->
|
||||
<ol class="breadcrumb m-b-sm hidden-lg-down">
|
||||
<li class="breadcrumb-item"><a href="./" aria-label="<?php echo lang('index_page');?>"><i class="icon-home"></i></a></li>
|
||||
<li class="breadcrumb-item"><a href="<?php echo url("forum-$fid");?>"><?php echo $forum['name'];?></a></li>
|
||||
<li class="breadcrumb-item active"><a href="<?php echo url("thread-$tid");?>" title="<?php echo lang('index_page');?>返回主题第一页"><?php echo $thread['subject'];?></a></li>
|
||||
<!--{hook thread_breadcrumb.htm}-->
|
||||
</ol>
|
||||
<!--{hook thread_breadcrumb_after.htm}-->
|
||||
<div class="card card-block">
|
||||
<dl class="row">
|
||||
<dt class="vtop p-r-1 td-avatar">
|
||||
<a href="<?php echo url("user-$thread[uid]");?>" tabindex="-1">
|
||||
<img class="avatar" src="<?php echo $thread['user_avatar_url'];?>">
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
<!--{hook thread_subject_before.htm}-->
|
||||
<h3 class="break-all">
|
||||
<!--{hook thread_subject_start.htm}-->
|
||||
<?php echo $thread['subject'];?>
|
||||
<!--{hook thread_subject_end.htm}-->
|
||||
</h3>
|
||||
<!--{hook thread_subject_after.htm}-->
|
||||
<dl class="row small">
|
||||
<dt>
|
||||
<!--{hook thread_username_before.htm}-->
|
||||
<span class="username text-muted">
|
||||
<a href="<?php echo url("user-$thread[uid]");?>"><?php echo $thread['username'];?></a>
|
||||
</span>
|
||||
<span class="date text-grey m-l-1"><?php echo $thread['create_date_fmt'];?></span>
|
||||
<span class="text-grey m-l-1 hidden-md-down"><i class="icon-eye"></i> <?php echo $thread['views'];?></span>
|
||||
<!--{hook thread_views_after.htm}-->
|
||||
</dt>
|
||||
<dd class="text-right">
|
||||
<!--{hook thread_update_before.htm}-->
|
||||
<?php if($allowupdate || $first['allowupdate']) { ?>
|
||||
<a href="<?php echo url("post-update-$thread[firstpid]");?>" class="text-grey m-r-1 post_update"><i class="icon-edit"></i> <?php echo lang('edit');?></a>
|
||||
<?php } ?>
|
||||
|
||||
<?php if($allowdelete || $first['allowdelete']) { ?>
|
||||
<a data-href="<?php echo url("post-delete-$thread[firstpid]");?>" href="javascript:void(0);" class="text-grey post_delete" isfirst="1"><i class="icon-remove"></i> <?php echo lang('delete');?></a>
|
||||
<?php } ?>
|
||||
<!--{hook thread_delete_after.htm}-->
|
||||
</dd>
|
||||
</dl>
|
||||
</dd>
|
||||
</dl>
|
||||
<hr />
|
||||
<div class="message break-all" isfirst="1">
|
||||
<?php if($page == 1) { ?>
|
||||
|
||||
<!--{hook thread_message_before.htm}-->
|
||||
<?php echo $first['message_fmt'];?>
|
||||
<!--{hook thread_message_after.htm}-->
|
||||
|
||||
<?php echo post_file_list_html($first['filelist']);?>
|
||||
<!--{hook thread_filelist_after.htm}-->
|
||||
|
||||
<?php } else { ?>
|
||||
|
||||
<!--{hook thread_message_more_before.htm}-->
|
||||
<p><a href="<?php echo url("thread-$tid");?>"><?php echo lang('view_thread_message');?></a></p>
|
||||
<!--{hook thread_message_more_after.htm}-->
|
||||
|
||||
<?php } ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!--{hook thread_postlist_before.htm}-->
|
||||
<div class="card post p-a-sm">
|
||||
<table class="table postlist m-b-0">
|
||||
<thead>
|
||||
<tr>
|
||||
<th colspan="2" class="p-a-0 p-b-sm">
|
||||
<dl class="row">
|
||||
<dt>
|
||||
<b><?php echo lang('new_post');?></b> (<span class="posts"><?php echo $thread['posts'];?></span>)
|
||||
</dt>
|
||||
<dd>
|
||||
<!--{hook thread_post_list_title_right.htm}-->
|
||||
</dd>
|
||||
</dl>
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
|
||||
<?php include _include(APP_PATH.'view/htm/post_list.inc.htm'); ?>
|
||||
|
||||
|
||||
|
||||
<?php if(!empty($user)) { ?>
|
||||
<tr class="post">
|
||||
<td class="td-avatar">
|
||||
<a href="<?php echo url("user-$thread[uid]");?>" tabindex="-1">
|
||||
<img class="avatar" src="<?php echo $user['avatar_url'];?>">
|
||||
</a>
|
||||
</td>
|
||||
<td class="p-l-0">
|
||||
<form action="<?php echo url("post-create-$tid-1");?>" method="post" id="quick_reply_form">
|
||||
<input type="hidden" name="doctype" value="1" />
|
||||
<input type="hidden" name="return_html" value="1" />
|
||||
<input type="hidden" name="quotepid" value="0" />
|
||||
<dl class="row small text-muted">
|
||||
<dt class="username"><?php echo $user['username'];?></dt>
|
||||
<dd class="text-right text-grey"><span class="floor"><?php echo ($thread['posts'] + 1);?></span><?php echo lang('floor');?></dd>
|
||||
</dl>
|
||||
<div class="message m-t-xs">
|
||||
<fieldset class="form-group m-b-0">
|
||||
<textarea class="form-control" placeholder="<?php echo lang('message');?>" name="message" id="message"></textarea>
|
||||
</fieldset>
|
||||
</div>
|
||||
<div class="text-muted m-t-sm small">
|
||||
<dl class="row">
|
||||
<dt>
|
||||
<!--{hook thread_quick_reply_left_start.htm}-->
|
||||
<button type="submit" class="btn btn-sm btn-primary" id="submit" data-loading-text="<?php echo lang('submiting');?>..."> <?php echo lang('post_create');?> </button>
|
||||
<!--{hook thread_quick_reply_left_end.htm}-->
|
||||
</dt>
|
||||
<dd class="text-right vtop">
|
||||
<!--{hook thread_quick_reply_right_start.htm}-->
|
||||
<a class="icon-mail-forward text-muted" href="<?php echo url("post-create-$tid");?>" id="advanced_reply"> <?php echo lang('advanced_reply');?></a>
|
||||
<!--{hook thread_quick_reply_right_end.htm}-->
|
||||
</dd>
|
||||
</dl>
|
||||
</div>
|
||||
</form>
|
||||
</td>
|
||||
</tr>
|
||||
<?php } ?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!--{hook thread_postlist_after.htm}-->
|
||||
|
||||
<?php if($pagination) { ?>
|
||||
<nav class="text-center"><ul class="pagination m-y-xs"><?php echo $pagination; ?></ul></nav>
|
||||
<?php }?>
|
||||
|
||||
<!--{hook thread_page_after.htm}-->
|
||||
|
||||
<a role="button" class="btn btn-secondary btn-block xn-back m-y-1 m-x-auto" style="max-width: 50%;" href="javascript:history.back();"><?php echo lang('back');?></a>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!--{hook thread_end.htm}-->
|
||||
|
||||
<?php include _include(APP_PATH.'view/htm/footer.inc.htm');?>
|
||||
|
||||
<script>
|
||||
var jform = $('#quick_reply_form');
|
||||
var jsubmit = $('#submit');
|
||||
jform.on('submit', function() {
|
||||
jform.reset();
|
||||
jsubmit.button('loading');
|
||||
var postdata = jform.serialize();
|
||||
$.xpost(jform.attr('action'), postdata, function(code, message) {
|
||||
if(code == 0) {
|
||||
var s = '<table>'+message+'</table>';
|
||||
var jtr = $(s).find('tr');
|
||||
jtr.insertBefore($('table.postlist tr').last());
|
||||
jsubmit.button('reset');
|
||||
$('#message').val('');
|
||||
|
||||
// 楼层 +1
|
||||
var jfloor = jform.find('.floor');
|
||||
jfloor.html(xn.intval(jfloor.html()) + 1);
|
||||
|
||||
// 回复数 +1
|
||||
var jposts = $('.posts');
|
||||
jposts.html(xn.intval(jposts.html()) + 1);
|
||||
|
||||
} else if(code < 0) {
|
||||
$.alert(message);
|
||||
jsubmit.button('reset');
|
||||
} else {
|
||||
jform.find('[name="'+code+'"]').alert(message).focus();
|
||||
jsubmit.button('reset');
|
||||
}
|
||||
});
|
||||
return false;
|
||||
});
|
||||
|
||||
|
||||
// 缩放图片,适应屏幕大小。
|
||||
function resize_image() {
|
||||
var jmessagelist = $('div.message');
|
||||
var first_width = jmessagelist.width(); // 815 : 746; // 734 746
|
||||
jmessagelist.each(function() {
|
||||
var jdiv = $(this);
|
||||
var maxwidth = jdiv.attr('isfirst') ? first_width : first_width - 79; // 734 746
|
||||
var jmessage_width = Math.min(jdiv.width(), maxwidth);
|
||||
jdiv.find('img, embed, iframe').each(function() {
|
||||
var jimg = $(this);
|
||||
//if(jimg.width() < 500) return;
|
||||
var img_width = this.org_width;
|
||||
var img_height = this.org_height;
|
||||
if(!img_width) {
|
||||
var img_width = jimg.width();
|
||||
var img_height = jimg.height();
|
||||
this.org_width = img_width;
|
||||
this.org_height = img_height;
|
||||
}
|
||||
//var percent = xn.min(100, xn.ceil((img_width / jmessage_width) * 100));
|
||||
if(img_width > jmessage_width) {
|
||||
if(this.tagName == 'IMG') {
|
||||
jimg.width(jmessage_width);
|
||||
jimg.css('height', 'auto');
|
||||
} else {
|
||||
jimg.width(jmessage_width);
|
||||
var height = (img_height / img_width) * jimg.width();
|
||||
jimg.height(height);
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
});
|
||||
}
|
||||
$(function() {
|
||||
resize_image();
|
||||
$(window).on('resize', resize_image);
|
||||
});
|
||||
|
||||
// 输入框自动伸缩
|
||||
var jmessage = $('#message');
|
||||
jmessage.on('focus', function() {if(jmessage.t) { clearTimeout(jmessage.t); jmessage.t = null; } jmessage.css('height', '6rem'); });
|
||||
jmessage.on('blur', function() {jmessage.t = setTimeout(function() { jmessage.css('height', '2.5rem');}, 1000); });
|
||||
|
||||
$('#nav_pc li[fid="<?php echo $fid;?>"]').tab('show');
|
||||
$('#nav_mobile li[fid="<?php echo $fid;?>"]').tab('show');
|
||||
|
||||
</script>
|
||||
|
||||
<?php if($thread['closed'] && ($gid == 0 || $gid > 5)) { ?>
|
||||
<script>
|
||||
jmessage.val('<?php echo lang('thread_has_already_closed');?>').attr('readonly', 'readonly');
|
||||
</script>
|
||||
<?php } ?>
|
||||
<!--{hook thread_js.htm}-->
|
10
z_nav/conf.json
Normal file
10
z_nav/conf.json
Normal file
@ -0,0 +1,10 @@
|
||||
{
|
||||
"name": "自动隐藏导航栏",
|
||||
"brief": "这是针对有大图(横向全屏的 页面制作的显隐导航, 如果不打算放置顶部图片 可以注释掉footer_jsafter.htm的第三行",
|
||||
"version": "1.0",
|
||||
"bbs_version": "4.0",
|
||||
"installed": 1,
|
||||
"enable": 0,
|
||||
"hooks_rank": [],
|
||||
"dependencies": []
|
||||
}
|
41
z_nav/hook/footer_js_after.htm
Normal file
41
z_nav/hook/footer_js_after.htm
Normal file
@ -0,0 +1,41 @@
|
||||
<script>
|
||||
//延时150ms? 先删掉影响样式效果的 .bg-inverse
|
||||
$('.navbar').removeClass('bg-inverse');
|
||||
//setTimeout("$('.navbar').removeClass('bg-inverse')",150)
|
||||
|
||||
|
||||
//依赖JQ,应该放在页面最后加载
|
||||
var home = location.href,
|
||||
s = $('#bgvideo')[0],
|
||||
Siren = {
|
||||
|
||||
// 显示&隐藏导航栏
|
||||
NH: function(){
|
||||
var h1 = 0,
|
||||
h2 = 400,
|
||||
ss = $(document).scrollTop();
|
||||
$(window).scroll(function(){
|
||||
var s = $(document).scrollTop();
|
||||
if(s== h1){
|
||||
$('.navbar').removeClass('yya');
|
||||
}if(s > h1){
|
||||
$('.navbar').addClass('yya');
|
||||
}if(s > h2){
|
||||
$('.navbar').addClass('gizle');
|
||||
if(s > ss){
|
||||
$('.navbar').removeClass('sabit');
|
||||
}else{
|
||||
$('.navbar').addClass('sabit');
|
||||
}
|
||||
ss = s;
|
||||
}
|
||||
});
|
||||
},
|
||||
}
|
||||
|
||||
$(function() {
|
||||
|
||||
Siren.NH(); // 显示&隐藏导航栏
|
||||
|
||||
})
|
||||
</script>
|
28
z_nav/hook/header_link_after.htm
Normal file
28
z_nav/hook/header_link_after.htm
Normal file
@ -0,0 +1,28 @@
|
||||
<style>
|
||||
/* 全局的动态导航条样式 可以打包到css文件 不是很重要,也可以放到页面最后加载 */
|
||||
.navbar {
|
||||
width: 100%;
|
||||
background: none;
|
||||
-webkit-transition: all .4s ease;
|
||||
transition: all .4s ease;
|
||||
position: fixed;
|
||||
z-index: 9999;
|
||||
top: 0
|
||||
}
|
||||
|
||||
.yya {
|
||||
position: fixed;
|
||||
left: 0;
|
||||
top: 0;
|
||||
background: rgba(0, 0, 0, .6);
|
||||
box-shadow: 0 0 1px rgba(0,0,0,.15)
|
||||
}
|
||||
.gizle {
|
||||
top: -100px;
|
||||
}
|
||||
|
||||
.sabit {
|
||||
top: 0;
|
||||
z-index: 9999;
|
||||
}
|
||||
</style>
|
BIN
z_nav/icon.png
Normal file
BIN
z_nav/icon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.6 KiB |
10
z_postEx/conf.json
Normal file
10
z_postEx/conf.json
Normal file
@ -0,0 +1,10 @@
|
||||
{
|
||||
"name": "帖内回复",
|
||||
"brief": "热点讨论,已经是大势所趋",
|
||||
"version": "1.0",
|
||||
"bbs_version": "4.0",
|
||||
"installed": 1,
|
||||
"enable": 0,
|
||||
"hooks_rank": [],
|
||||
"dependencies": []
|
||||
}
|
159
z_postEx/hook/footer_js_after.htm
Normal file
159
z_postEx/hook/footer_js_after.htm
Normal file
@ -0,0 +1,159 @@
|
||||
<!-- 独立的
|
||||
<div class="test">这是test</div>
|
||||
<p>这是p</p>
|
||||
<button onclick="afterText()">在图片后面添加文本</button>
|
||||
<br>
|
||||
<br>
|
||||
<br>
|
||||
<script>
|
||||
//确认上面已经引用过JQ库文件
|
||||
function afterText(){
|
||||
var txt1=$("<i></i>").text("love "); // 通过 jQuery 创建元素
|
||||
$(".test").after(txt1); // 在 img 之后插入新元素
|
||||
}
|
||||
</script>
|
||||
-->
|
||||
|
||||
|
||||
|
||||
|
||||
<!-- 正式回复 -->
|
||||
|
||||
<!--script src="//www-static.diyidan.net/static/addface/js/main.js?v=f9faff63b439fec824edbde022b77397"></script-->
|
||||
<script src="plugin/z_post/main.js?v=f9faff63b439fec824edbde022b77397"></script>
|
||||
|
||||
|
||||
<!-- 二级回复中的一段 -->
|
||||
|
||||
<script type="text/javascript">
|
||||
/*二级回复*/
|
||||
function send_comment(item) {
|
||||
do_l2commit(item);
|
||||
/*if(getCookie('token_id') != null && getCookie('token_id')!=''){
|
||||
do_l2commit(item);
|
||||
}else{
|
||||
onlyLogin()
|
||||
}*/
|
||||
|
||||
|
||||
|
||||
//var p_inner_value = $('div.edit_container p.p_emoji_content')
|
||||
//发送Ajax请求
|
||||
}
|
||||
|
||||
function do_l2commit(item) {
|
||||
var comment_id = $(item).closest('.reply_right').find('.comment_id_hidden').val();
|
||||
var reply = getPcontentText($(item).closest('.write_reply').find('#write_container').get(0));
|
||||
var ajax_url = "/main/post/l2comment";
|
||||
var louzhu_id = "6293877835964134301";
|
||||
$.ajax({
|
||||
url: ajax_url, //登陆页面
|
||||
type: "POST",
|
||||
async: true,
|
||||
timeout: 3000,
|
||||
data: {
|
||||
"l1CommentId": comment_id,
|
||||
"comment": reply,
|
||||
"commentPage": parseInt('1', 10),
|
||||
},
|
||||
dataType: "json",
|
||||
error: function() {},
|
||||
success: function(data, status) { //如果调用成功
|
||||
// var jsonObject = JSON.parse(data);
|
||||
var code = data.code;
|
||||
if (code != 200) {
|
||||
if (data.message != null) {
|
||||
showMessagePopup(data.message);
|
||||
}
|
||||
} else {
|
||||
//TODO:后台会回传有多少二层回复的页数的
|
||||
var totalCount = data.data.totalCommentCount;
|
||||
var page_total_num = parseInt((totalCount - 1) / 10) + 1;
|
||||
$.ajax({
|
||||
url: "/main/post/l2comment",
|
||||
type: "GET",
|
||||
data: {
|
||||
"l1CommentId": comment_id,
|
||||
"page": page_total_num
|
||||
},
|
||||
async: true,
|
||||
timeout: 3000,
|
||||
dataType: "json",
|
||||
error: function() {},
|
||||
success: function(data, status) { //如果调用成功
|
||||
// var jsonObject = JSON.parse(data);
|
||||
var code = data.code;
|
||||
if (code != 200) {
|
||||
if (data.message != null) {
|
||||
showMessagePopup(data.message)
|
||||
}
|
||||
} else {
|
||||
displayAjaxL2commentList(item, $('script[type="text/template"]').html(), data.data, page_total_num, page_total_num, ajax_url, comment_id, louzhu_id);
|
||||
$(item).closest('.write_reply').remove();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<!-- 底部js -->
|
||||
<script type="text/template">
|
||||
<li class="clr" {display_str}>
|
||||
<div class="user_ti f1">
|
||||
<img src="{avatar}" onclick="{url_to_user}">
|
||||
</div>
|
||||
<div class="more_reply_right f1">
|
||||
<div class="l2_comment user_name">
|
||||
<span class="user_reply_name" onclick="{url_to_user}">{nickName}</span>
|
||||
<span class="user_reply_level">Lv{level}</span> {louzhu_span}
|
||||
<p>: {commentContent}</p>
|
||||
<!--safe咋办-->
|
||||
</div>
|
||||
<div class="user_reply_time">
|
||||
|
||||
<span>{commentTime}</span>
|
||||
<span class="to_reply f2" onclick="showReply(this)">回复</span>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
</script>
|
||||
<script type="text/templateCommentItem">
|
||||
{anchor_str}
|
||||
<li class="clr" style="margin-left:70px;position: relative">
|
||||
<div class="user_ti f1">
|
||||
<img src="{avatar}" onclick="{url_to_user}">
|
||||
</div>
|
||||
<div class="reply_right f1 " >
|
||||
<input type="hidden" name="comment_id_hidden" class="comment_id_hidden" value="{commentId}" data-floor-num="{commentFloorNum}" />
|
||||
<div class="user_name">
|
||||
<span onclick="{url_to_user}">{nickName}</span>
|
||||
<span class="user_reply_level">Lv{level}</span> {louzhu_span}
|
||||
<span class="f2 ie2">{commentFloorNum}楼</span>
|
||||
</div>
|
||||
|
||||
{pic_or_music_container_div}
|
||||
<ul class="more_user_reply">
|
||||
<div class="user_reply_time">
|
||||
{commentJudge_judgerRecommendStmt_div} {commentReward_rewardAmount_div}
|
||||
<span>{commentTime}</span>
|
||||
<span class="to_reply f2" onclick="showReply(this)">回复</span>
|
||||
<!--<span class="to_hide_reply f2" onclick="hidel2comments(this)">收起回复({commentl2TotalCount})</span>-->
|
||||
</div>
|
||||
{reply_li_container_div}
|
||||
</ul>
|
||||
{l2_comment_page_nav_div}
|
||||
</div>
|
||||
{commentJudge_judgeStampUrl_span} {commentReward_rewardStampUrl_span}
|
||||
</li>
|
||||
</script>
|
108
z_postEx/hook/post_list_inc_filelist_after.htm
Normal file
108
z_postEx/hook/post_list_inc_filelist_after.htm
Normal file
@ -0,0 +1,108 @@
|
||||
<!-- 一级回复 -->
|
||||
<div class="reply_right f1 " >
|
||||
<div class="user_reply_time">
|
||||
<span>03-14</span>
|
||||
<span class="to_reply f2" onclick="showReply(this)" style="cursor:pointer">一级回复</span>
|
||||
<!--<span class="to_hide_reply f2" onclick="hidel2comments(this)">收起回复(1)</span>-->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<?php
|
||||
//创建回复信息 直接从表中读取本次post的ID有多少回复
|
||||
$postreply = db_find('post_reply', array('pid'=>$_post['pid']), array('create_date'=>1));
|
||||
if($postreply) { foreach($postreply as $_posts) {
|
||||
//创建回复人的信息,每条回复都会被查询一遍似乎很消耗资源
|
||||
$userz = user_read_cache($_posts['uid']);
|
||||
$postz['username'] = array_value($userz, 'username');
|
||||
$postz['user_avatar_url'] = array_value($userz, 'avatar_url');
|
||||
$postz['user'] = $userz ? $userz : user_guest();
|
||||
!isset($postz['floor']) AND $postz['floor'] = '';
|
||||
?>
|
||||
<!-- 剩下的就是细化UI了 -->
|
||||
<br>
|
||||
<a href="<?php echo url("user-$_posts[uid]");?>" tabindex="-1">
|
||||
<img class="avatar" src="<?php echo $postz['user_avatar_url'];?>">
|
||||
</a>
|
||||
<?php echo $postz['username'];?>
|
||||
<span class="user_reply_level">Lv7</span>
|
||||
<?php echo $_posts['message'];?>
|
||||
<!-- 二级回复 -->
|
||||
<div class="reply_right f1 " >
|
||||
<div class="user_reply_time">
|
||||
<span>03-14</span>
|
||||
<span class="to_reply f2" onclick="showReply(this)" style="cursor:pointer">二级回复按钮</span>
|
||||
<!--<span class="to_hide_reply f2" onclick="hidel2comments(this)">收起回复(1)</span>-->
|
||||
</div>
|
||||
</div>
|
||||
<?php }} ?>
|
||||
|
||||
|
||||
<!-- 以下是全新的 POST -->
|
||||
<div class="list-item reply-wrap" data-id="461068570" data-index="0">
|
||||
<div class="user-face">
|
||||
<a href='<?php echo url("user-$_posts[uid]");?>' target="_blank" data-usercard-mid="14589321">
|
||||
<img src="<?php echo $postz['user_avatar_url'];?>" alt="">
|
||||
</a>
|
||||
</div>
|
||||
<div class="con ">
|
||||
|
||||
<div class="user">
|
||||
<a data-usercard-mid="14589321" href='<?php echo url("user-$_posts[uid]");?>' target="_blank" class="name "><?php echo $postz['username'];?></a>
|
||||
<a href="//www.bilibili.com/html/help.html#k_3" target="_blank"><i class="level l4"></i></a>
|
||||
</div>
|
||||
|
||||
<p class="text">这标题不是化学,是哲学<img src="//i0.hdslb.com/bfs/vip/f8219e484d5a55787c3f1722dc3112d0eba03a69.png@50w_50h.webp" alt="思索"></p>
|
||||
|
||||
<div class="info">
|
||||
<span class="floor">#22</span>
|
||||
<span class="plad">来自<a href="//app.bilibili.com/" target="_blank">安卓客户端</a></span>
|
||||
<span class="time">45分钟前</span>
|
||||
<span class="like "><i></i><span>2</span></span>
|
||||
<span class="hate "><i></i></span>
|
||||
<span class="reply btn-hover btn-highlight">回复</span>
|
||||
<div class="operation">
|
||||
<div class="spot"></div>
|
||||
<div class="opera-list" style="display: none;">
|
||||
<ul>
|
||||
<li class="blacklist">加入黑名单</li>
|
||||
<li class="report">举报</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="reply-box">
|
||||
<div class="reply-item reply-wrap" data-id="461092529" data-index="0">
|
||||
<a href="//space.bilibili.com/43646124" data-usercard-mid="43646124" target="_blank" class="reply-face">
|
||||
<img src="//i0.hdslb.com/bfs/face/ba27db05e3f0808b8ee0f19c817fb6219cf9e921.jpg@52w_52h.webp" alt="">
|
||||
</a>
|
||||
<div class="reply-con">
|
||||
<div class="user">
|
||||
<a href="//space.bilibili.com/43646124" target="_blank" data-usercard-mid="43646124" class="name ">美丽科学-BOS</a>
|
||||
<a href="//www.bilibili.com/html/help.html#k_3" target="_blank"><i class="level l5"></i></a>
|
||||
<span class="text-con">科学的尽头是艺术更是哲学 没毛病 哈哈哈哈</span>
|
||||
</div>
|
||||
<div class="info">
|
||||
<span class="time">7分钟前</span>
|
||||
<span class="like "><i></i><span></span></span>
|
||||
<span class="reply btn-hover">回复</span>
|
||||
<div class="operation btn-hover btn-hide-re">
|
||||
<div class="spot"></div>
|
||||
<div class="opera-list" style="display: none;">
|
||||
<ul>
|
||||
<li class="blacklist">加入黑名单</li>
|
||||
<li class="report">举报</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="paging-box"></div>
|
||||
|
||||
</div>
|
||||
</div>
|
46
z_postEx/install.php
Normal file
46
z_postEx/install.php
Normal file
@ -0,0 +1,46 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
Xiuno BBS 4.0 插件:楼中楼 插件安装
|
||||
创建posts表,用于回复楼层的时候多读取一遍楼层
|
||||
幻 / 2017-09-16 05:11
|
||||
*/
|
||||
|
||||
!defined('DEBUG') AND exit('Forbidden');
|
||||
|
||||
$tablepre = $db->tablepre;
|
||||
|
||||
$sql = "CREATE TABLE IF NOT EXISTS {$tablepre}post_reply (
|
||||
pid int(11) unsigned NOT NULL DEFAULT '0',
|
||||
rid int(11) unsigned NOT NULL AUTO_INCREMENT,
|
||||
uid int(11) unsigned NOT NULL DEFAULT '0',
|
||||
isfirst int(11) unsigned NOT NULL DEFAULT '0',
|
||||
create_date int(11) unsigned NOT NULL DEFAULT '0',
|
||||
userip int(11) unsigned NOT NULL DEFAULT '0',
|
||||
message text NOT NULL DEFAULT '',
|
||||
PRIMARY KEY (pid),
|
||||
KEY (rid)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8";
|
||||
$r = db_exec($sql);
|
||||
|
||||
/*
|
||||
|
||||
|
||||
|
||||
|
||||
目前不使用缓存
|
||||
// 缓存 tagid 10000,10000,10000,10000
|
||||
$sql = "ALTER TABLE {$tablepre}thread ADD COLUMN tagids char(32) NOT NULL DEFAULT ''";
|
||||
$r = db_exec($sql);
|
||||
|
||||
// 缓存的时间,用来和 setting('tag_update_time') 对比
|
||||
$sql = "ALTER TABLE {$tablepre}thread ADD COLUMN tagids_time int(11) unsigned NOT NULL DEFAULT '0'";
|
||||
$r = db_exec($sql);
|
||||
|
||||
// tag 缓存的时间
|
||||
setting_set('tag_update_time', $time);
|
||||
|
||||
|
||||
//$r === FALSE AND message(-1, '创建表结构失败');
|
||||
*/
|
||||
?>
|
171
z_postEx/main.js
Normal file
171
z_postEx/main.js
Normal file
@ -0,0 +1,171 @@
|
||||
/*表情添加*/
|
||||
function showEmoji(ele){
|
||||
var the_face=$(ele).closest('.face_top').next()
|
||||
if(the_face.hasClass('emoji_section')){
|
||||
$(ele).removeClass("to_show");
|
||||
the_face.removeClass('emoji_section').find('ul').remove()
|
||||
}else{
|
||||
$(ele).addClass("to_show").siblings().removeClass("to_show")
|
||||
the_face.find('ul').remove()
|
||||
the_face.removeClass('face_section emoji_section').addClass('emoji_section').append(show_emojis())
|
||||
}
|
||||
}
|
||||
function showFace(ele){
|
||||
var the_face=$(ele).closest('.face_top').next()
|
||||
if(the_face.hasClass('face_section')){
|
||||
$(ele).removeClass("to_show");
|
||||
the_face.removeClass('face_section').find('ul').remove()
|
||||
}else{
|
||||
$(ele).addClass("to_show").siblings().removeClass("to_show")
|
||||
the_face.find('ul').remove()
|
||||
the_face.removeClass('face_section emoji_section').addClass('face_section').append(show_faces())
|
||||
}
|
||||
}
|
||||
function show_emojis(){
|
||||
var faceList = [" (๑• . •๑) ", " ˋ( ° ▽、° ) ", " (^人^) ", " _(:3」∠)_ ", " →_→ ", " ←_← ", " (*^.^*) ", " ٩(๑`^´๑)۶ ", " ╮(╯_╰)╭ ",
|
||||
" ヾ(′▽`*)ゝ ", " o(≧v≦)o~~ ", " ↖(^ω^)↗ ", " ヽ( ^∀^)ノ ", " ‵(*∩_∩*)′ ", " (/≧▽≦)/~ ", " ㄟ( ▔, ▔ )ㄏ ",
|
||||
" ~( ̄▽ ̄~) ", " (~ ̄▽ ̄)~ ", " /(ㄒoㄒ)/~~ ", " (*/ω\*) ", " ≧▽≦蛤蛤蛤 ", " (°ー°〃) ", " ヾ( ̄▽ ̄) ",
|
||||
" (╯°Д°)╯︵ ", " (☆ω☆) ", " \@_\@ ", " (*´艸`)、 ", " QAQ ", " (⊙o⊙) ", " (×_×)昏倒 ", " ( ˘•㉨•˘ ) ",
|
||||
" ヾ(´(エ)`ノ゙ ", " ฅ( ̳• ◡ • ̳)ฅ ", " ⊙﹏⊙‖∣ ", " (。•ˇ‸ˇ•。) ", " ╭(╯^╰)╮ ", " ( •̀∀•́ ) ", " o(>﹏<)o ",
|
||||
" (ˉ▽ ̄~) 切~~ ", " ⊙ω⊙ ", " =。=b ", " =3333= ", " (ง •̀_•́)ง ", " <(_ _)> ", " o( ̄ヘ ̄o#) ", " ヽ( ̄д ̄;)ノ ",
|
||||
" ヽ(=^・ω・^=)丿 ", " ( ^_^ )/~~拜 ", " Orz ", " ♪(^∇^*) ", " (ฅ´ω`ฅ)留爪 ", " ( ´◔ ‸◔') ", " (*^.^*) ", " p(^_^)q ",
|
||||
" ┗( T﹏T )┛ ", " (ˉ▽ˉ;) ", " Õ_Õ ", " 눈_눈 ", " o(一︿一+)o ", " (〃 ̄︶ ̄)人( ̄︶ ̄〃) "]
|
||||
|
||||
var reply_display_emoji ='';
|
||||
var emoji_li='';
|
||||
var len_emoji=faceList.length;
|
||||
for (var i=0; i<len_emoji; i++) {
|
||||
emoji_li += "<li onclick=\"addEmoji(this, '"+faceList[i]+"');\">"+faceList[i]+ "</li>";
|
||||
}
|
||||
reply_display_emoji ='<ul>'+emoji_li+'</ul>';
|
||||
return reply_display_emoji
|
||||
}
|
||||
function addFace(item, imgUlr) {
|
||||
var $write_reply=$(item).closest('.add_icons').parent();
|
||||
var img_str = "<img src='"+imgUlr+"'></img>";
|
||||
$write_reply.find('.in_write').append(img_str).focus()
|
||||
$write_reply.find('.add_icons').removeClass('face_section').find('ul').remove()
|
||||
$write_reply.find('.face_top li').removeClass()
|
||||
placeCaretAtEnd($write_reply.find('.in_write').get(0));
|
||||
}
|
||||
function addEmoji(item, str) {
|
||||
var $write_reply=$(item).closest('.add_icons').parent();
|
||||
$write_reply.find('.in_write').append(str).focus()
|
||||
$write_reply.find('.add_icons').removeClass('emoji_section').find('ul').remove()
|
||||
$write_reply.find('.face_top li').removeClass('to_show')
|
||||
placeCaretAtEnd($write_reply.find('.in_write').get(0));
|
||||
}
|
||||
|
||||
function placeCaretAtEnd(el) {
|
||||
el.focus();
|
||||
if (typeof window.getSelection != "undefined"
|
||||
&& typeof document.createRange != "undefined") {
|
||||
var range = document.createRange();
|
||||
range.selectNodeContents(el);
|
||||
range.collapse(false);
|
||||
var sel = window.getSelection();
|
||||
sel.removeAllRanges();
|
||||
sel.addRange(range);
|
||||
} else if (typeof document.body.createTextRange != "undefined") {
|
||||
var textRange = document.body.createTextRange();
|
||||
textRange.moveToElementText(el);
|
||||
textRange.collapse(false);
|
||||
textRange.select();
|
||||
}
|
||||
}
|
||||
|
||||
//这是增加回复输入框的调用按钮触发
|
||||
function showReply(ele){
|
||||
var toReply=null
|
||||
if ($(ele).closest('.more_reply_right').length>0) {
|
||||
toReply="回复 @"+$(ele).closest('.more_reply_right').find('.user_reply_name').html()+":"
|
||||
}else{
|
||||
toReply=''
|
||||
}
|
||||
var replyDiv="<div class='write_reply'>"+
|
||||
"<div>"+
|
||||
"<div id='write_container' class='in_write' contenteditable='true'>"+toReply+"</div>"+
|
||||
"</div>"+
|
||||
"<div id='face_top' class='face_top'>"+
|
||||
"<ul id='face_btn' class='clr'>"+
|
||||
"<li onclick='showEmoji(this)'>(・ω・)颜文字</li>"+
|
||||
"<li onclick='showFace(this)'><img src='/static/image/face_01.png'></li>"+
|
||||
"</ul>"+
|
||||
"<div class='f2'><span onclick='cancelReply(this)' style='margin-right:10px;'>取消</span><span class='ie2' onclick='send_comment(this)'>发送</span></div>"+
|
||||
"</div>"+
|
||||
"<div id='add_icons' class='add_icons'></div>"+
|
||||
"</div>"
|
||||
if ($(ele).parents().find('.write_reply').length>0) {
|
||||
if ($(ele).closest('.user_reply_time').siblings('.write_reply').length>0) {
|
||||
$(ele).parents().find('.write_reply').detach()
|
||||
}else{
|
||||
$(ele).parents().find('.write_reply').detach()
|
||||
$(replyDiv).insertAfter($(ele).closest('.user_reply_time'))
|
||||
}
|
||||
}else{
|
||||
$(replyDiv).insertAfter($(ele).closest('.user_reply_time'))
|
||||
|
||||
placeCaretAtEnd($(ele).closest('.reply_right').find('.in_write').get(0));
|
||||
}
|
||||
$('[contenteditable]').each(function() {
|
||||
// 干掉IE http之类地址自动加链接
|
||||
try {
|
||||
document.execCommand("AutoUrlDetect", false, false);
|
||||
} catch (e) {}
|
||||
|
||||
$(this).on('paste', function(e) {
|
||||
e.preventDefault();
|
||||
var text = null;
|
||||
|
||||
if(window.clipboardData && clipboardData.setData) {
|
||||
// IE
|
||||
text = window.clipboardData.getData('text');
|
||||
} else {
|
||||
text = (e.originalEvent || e).clipboardData.getData('text/plain') || prompt('在这里输入文本');
|
||||
}
|
||||
if (document.body.createTextRange) {
|
||||
if (document.selection) {
|
||||
textRange = document.selection.createRange();
|
||||
} else if (window.getSelection) {
|
||||
sel = window.getSelection();
|
||||
var range = sel.getRangeAt(0);
|
||||
|
||||
// 创建临时元素,使得TextRange可以移动到正确的位置
|
||||
var tempEl = document.createElement("span");
|
||||
tempEl.innerHTML = "&#FEFF;";
|
||||
range.deleteContents();
|
||||
range.insertNode(tempEl);
|
||||
textRange = document.body.createTextRange();
|
||||
textRange.moveToElementText(tempEl);
|
||||
tempEl.parentNode.removeChild(tempEl);
|
||||
}
|
||||
textRange.text = text;
|
||||
textRange.collapse(false);
|
||||
textRange.select();
|
||||
} else {
|
||||
// Chrome之类浏览器
|
||||
document.execCommand("insertText", false, text);
|
||||
}
|
||||
});
|
||||
// 去除Crtl+b/Ctrl+i/Ctrl+u等快捷键
|
||||
$(this).on('keydown', function(e) {
|
||||
// e.metaKey for mac
|
||||
if (e.ctrlKey || e.metaKey) {
|
||||
switch(e.keyCode){
|
||||
case 66: //ctrl+B or ctrl+b
|
||||
case 98:
|
||||
case 73: //ctrl+I or ctrl+i
|
||||
case 105:
|
||||
case 85: //ctrl+U or ctrl+u
|
||||
case 117: {
|
||||
e.preventDefault();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
function cancelReply(ele){
|
||||
$(ele).closest('.write_reply').detach()
|
||||
}
|
16
z_postEx/unstall.php
Normal file
16
z_postEx/unstall.php
Normal file
@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
Xiuno BBS 4.0 插件实例:TAG 插件卸载
|
||||
admin/plugin-unstall-xn_tag.htm
|
||||
*/
|
||||
|
||||
!defined('DEBUG') AND exit('Forbidden');
|
||||
|
||||
$tablepre = $db->tablepre;
|
||||
$sql = "DROP TABLE IF EXISTS {$tablepre}post_reply;";
|
||||
$r = db_exec($sql);
|
||||
|
||||
$r === FALSE AND message(-1, '卸载表失败');
|
||||
|
||||
?>
|
Loading…
Reference in New Issue
Block a user