开启伪静态

开启方法以及伪静态规则

必要工作

Xiuno BBS 4.x 需要编辑 conf/conf.php

编辑 'url_rewrite_on'=>1
清空 tmp 目录

Nginx

location ~* \.(htm)$ {
  rewrite "^(.*)/(.+?).htm(.*?)$" $1/index.php?$2.htm$3 last;
}

Apache

<IfModule mod_rewrite.c>
RewriteEngine on

# Apache 2.4
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*?)([^/]*)$ $1index.php?$2 [QSA,PT,L]

# Apache other
#RewriteRule ^(.*?)([^/]*)\.htm(.*)$ $1/index.php?$2.htm$3 [L]
</IfModule>

IIS

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
 <system.webServer>
 <rewrite>
 <rules>
 <rule name="xiuno">
 <match url="^((.*)/)?(.+).html$" />
 <action type="Rewrite" url="{R:1}\index.php?{R:2}.html" />
 </rule>
 </rules>
 </rewrite>
 </system.webServer>
</configuration>

Caddy

www.yourdomain.com

# Set this path to your site's directory.
root * /var/www

file_server

# Or serve a PHP site through php-fpm:
php_fastcgi localhost:9000

SAE

在网站根目录建立config.yaml文件,内容如下

appname: axiuno
  version: 1
  handle:
  - rewrite: if ( !is_dir() && !is_file() && path ~ "admin/(.*.htm)" ) goto "admin/index.php?%1"
  - rewrite: if ( !is_dir() && !is_file() && path ~ "[^/?].htm" ) goto "index.php?%1"

XiunoBBS白屏,500错误等问题

解决XiunoBBS出现白屏,500错误等问题

开启调试模式

修改网站根目录index.php文件

// 0: Production mode; 1: Developer mode; 2: Plugin developement mode;
// 0: 线上模式; 1: 调试模式; 2: 插件开发模式;
!defined('DEBUG') AND define('DEBUG', 2);

开启调试模式或插件开发模式,可以查看网站的出错信息。

根据报错信息,禁用有问题的插件

一般开启调试模式后都能看到出错的代码行,想想你最近安装的插件,去后台挨个禁用,慢慢排查。排查完毕,将 DEBUG 改回 0

这里不得不说,大部分插件写的很一般。

备注

如果 DEBUG2 的时候没有错误,改为 0 出错。则修改 xiunophp/xiunophp.min.php 文件第18行,将 error_reporting() 的参数中的 0 改为 E_ALL

error_reporting(DEBUG ? E_ALL : E_ALL);

清理缓存

进入后台清理缓存。不要以为直接删除tmp/*就可以了,如果你使用了redisMemcached,还得靠后台清理才能清干净。

加一个忘记管理员密码

修改网站根目录下面的index.php,将DEBUG改为3,就可以直接不需要密码进入管理员后台,然后进去以后找到用户列表修改密码,在把DEBUG改为0

//3为无密码直接进入后台,记得改完以后改回来,也就是改成0
!defined('DEBUG') AND define('DEBUG', 3);

一键清理后台未使用插件

写一个bash脚本,在插件目录运行

#!/bin/bash
mkdir 0
mdir=`pwd`/0
dirlist=`ls -d */`
for pdir in $dirlist
do
grep "installed\"\: 0" $pdir/conf.json > /dev/null
if [ $? -eq 0 ];then echo $pdir;mv $pdir $mdir/;fi
done
dirlist=`ls -d */`
for pdir in $dirlist
do
grep "enable\"\: 0" $pdir/conf.json > /dev/null
if [ $? -eq 0 ];then echo $pdir;mv $pdir $mdir/;fi
done

修改xiuno默认路由,让错误地址直接跳转404

使用xiuno搭建的论坛,在访问一个不存在的页面时,比如 ./test-1.htm

默认情况下,访问这个不存在的页面时,会自动跳转到首页,这会造成被恶意SEO

解决办法:

修改网站目录下的index.inc.php,第71行、72行,改成下面的代码:

//include _include(APP_PATH.'route/index.php');     break;
http_404();

修改Xiuno的帖子时间显示格式,将XX天前改成具体的年月日时分秒

打开xiunophp/misc.func.php,定位到第486行,找到如下代码:

if($seconds > 31536000) {
        return date('Y-n-j', $timestamp);
    }

修改为:

if($seconds > 259200 ) { return date('Y-m-d H:i:s', $timestamp); }

打开xiunophp/xiunophp.min.php,定位到第56行,找到如下代码

if($seconds > 31536000) { return date('Y-n-j', $timestamp); }

修改为:

if($seconds > 259200 ) { return date('Y-m-d H:i:s', $timestamp); }

后台清理缓存.

XIUNOBBS后台插件排序

XIUNOBBS后台插件排序方法,启用的插件排在前面.

排序方法:打开文件/model/plugin.func.php,找到第53行的plugin_init()函数,在该函数尾部修改一下
原代码如下:

// 本地 + 线上数据
                $plugins[$dir] = plugin_read_by_dir($dir);
            }
        }
    }

修改为以下代码即可

// 本地 + 线上数据
                $plugins[$dir] = plugin_read_by_dir($dir);
            }
            //插件排序
            $plugins = plugin_list_sort($plugins, "installed");
            $plugins = plugin_list_sort($plugins, "enable");
        }
    }

    //二维数组排序 TRUE FALSE
    function plugin_list_sort($arrlist, $col, $asc = FALSE){ 
        $colarr = $arr = array();
        foreach($arrlist as $k=>$v){
            $colarr[$k] = $v[$col];
        }
        if($asc == TRUE){
            asort($colarr);
        }else{
            arsort($colarr);
        }
        reset($colarr);
        foreach($colarr as $k=>$v){
            $arr[$k] = $arrlist[$k];
        }
        return $arr;
    }

修复xn_tag插件排序问题

默认选择多个tag标签以后,出现的帖子顺序是从最古老的帖子开始排序的,这样非常不友好,如果你的站点数据多,哪筛选一下第一页全部是上古时期的主题.改改,让他从最新的主题开始排序
打开/plugin/xn_tag/hook/forum_thread_list_before.php在95行左右找到如下:

$threadlist = thread_find_by_tids($tids);

替换成:

$threadlist = thread_find_by_tids($tids, array('tid' => 'DESC'));

然后再次筛选就会发现是从最新的主题开始了

xn_tag修改为单选

顺便记录一个,默认插件是可以让你选择多个标签的,如果你的站点需求,只让单选,可以做如下修改.打开/plugin/xn_tag/hook/post_js.htm,把里面所有的内容替换为如下内容:

<script>
var forumlist = <?php echo xn_json_encode($forumlist_show); ? >;
// 初始化值,选中的值
var tagids = <?php echo xn_json_encode($tagids); ? >;
var action = '<?php echo $action;?>';
var jfid = $('select[name="fid"]');
var fid = <?php echo intval($fid); ? >||$('select[name="fid"]').val();
jfid.on('change',
function() {
    var fid = jfid.val();
    fid_on_change(fid);
});
function fid_on_change(fid) {
    var s = '';
    var forum = forumlist[fid];
    $.each(forum.tagcatelist,
    function(k, tagcate) {
        s += '<select class="custom-select mr-1 mb-3 w-auto" name="tagid[]">';
        s += '<option value=0>' + tagcate.name + '</option>';
        $.each(tagcate.taglist,
        function(k, tag) {
            s += '<option value=' + tag.tagid + (xn.in_array(tag.tagid, tagids) || (tag.tagid == tagcate.defaulttagid && action == 'selected') ? ' selected': '') + '>' + tag.name + '</option>';
        });
        s += '</select>';
    });
    $('#nav_tag_list_div').html(s);
}
fid_on_change(fid);
$('#nav_tag_list_div').on('click', 'a.tag_option',
function() {
    var jthis = $(this);
    var tagid = jthis.attr('tagid');
    jthis.toggleClass('active');
    // 隐藏域
    var v = jthis.hasClass('active') ? tagid: '';
    jthis.next().attr('value', v);
});
// tag 选中区域。
</script>

页码翻页功能美化,免得手机上出现页码条过长

去掉上一页和下一页

开发模式改/xiunophp/misc.func.php注释掉大约390行和396行的代码

$page != 1 && $s .= pagination_tpl(str_replace('{page}', $page-1, $url), '◀', '');
$page != $totalpage && $s .= pagination_tpl(str_replace('{page}', $page+1, $url), '▶');

我TM,奇怪了,怎么粘贴上来变成了emoji表情...
线上模式改/xiunophp/xiunophp.min.php删除掉如下内容:

$page != 1 && $s .= pagination_tpl(str_replace('{page}', $page-1, $url), '◀', '');
$page != $totalpage && $s .= pagination_tpl(str_replace('{page}', $page+1, $url), '▶');

缩短页码显示数量

开发模式打开/xiunophp/misc.func.php大约第378行找到$shownum = 5; // 显示多少个页 * 2改为$shownum = 2;
线上模式打开/xiunophp/xiunophp.min.php搜索$shownum = 5;改为$shownum = 2;

意思是左右各几个页码,5就是10个,2就是4个

修改上传图片的质量

打开/view/js/xiuno.js在大约1122行找到var qulity = options.qulity修改后面的数字,1为位无损,小于1则压缩图片质量

游客登录提示

找到你正在使用的模板目录的thread.htm文件,在合适位置加入如下内容:
比如我用的默认模板,就打开view/htm/thread.htm在147行左右加入下面的代码.

<?php if(empty($uid)){?>
        <div class="card text-center"><p></p><p class="text-center">
            你可以在 <a href="<?php echo url("user-login");?>"><b>登录</b></a> or <a href="<?php echo url("user-create");?>"><b>注册</b></a> 后,对此帖发表评论!</p>
        </div>
<?php }?>

解决透明背景PNG图片显示问题

默认上传透明背景的PNG图片会直接显示为黑色背景,解决方法如下:
1.打开view/js/xiuno.js文件,在大约1121行找到如下内容进行替换,
替换前:

var thumb_height = options.height || 2400;
var action = options.action || 'thumb';
var filetype = options.filetype || xn.image_file_type(file_base64_data);//xn.base64_data_image_type(file_base64_data);
var qulity = options.qulity || 0.9; // 图片质量, 1 为无损
    
if(thumb_width < 1) return callback(-1, '缩略图宽度不能小于 1 / thumb image width length is less 1 pix');

替换后:

var thumb_height = options.height || 2400;
var action = options.action || 'thumb';
//var filetype = options.filetype || xn.image_file_type(file_base64_data);//xn.base64_data_image_type(file_base64_data);
var filetype = xn.image_file_type(file_base64_data);//xn.base64_data_image_type(file_base64_data);
var qulity = options.qulity || 0.9; // 图片质量, 1 为无损
    
if(thumb_width < 1) return callback(-1, '缩略图宽度不能小于 1 / thumb image width length is less 1 pix');

2.在1226行左右找到if(filetype == 'jpg') filetype = 'jpeg';在下面增加一行if(filetype == 'png') filetype = 'png';.具体如下:

//filetype = 'png';
if(filetype == 'jpg') filetype = 'jpeg';
if(filetype == 'png') filetype = 'png';
var s = canvas.toDataURL('image/'+filetype, qulity);
if(callback) callback(0, {width: width, height: height, data: s});

3.清空后台缓存,强制刷新浏览器看效果

修复git_tags插件开启伪静态以后报错问题.

找到/git_tags/view/js/tag.js把63,88以及97行的?tag-xxx.htm前面的问号去掉即可.或者你可以直接下载附件.
git_tags伪静态修复版
要是还不放心,自己对照着改吧

//自己在你的tag.js里面搜索下面这三个,去掉tag前面的问号.
...
var url = '?tag-del.htm'
...
var url = '?tag-add.htm'
...
a href="?tag-'+msg+'.htm"
...

帖子增强插件修[首页帖子列表显示板块2]功能为彩色标签

1.打开/plugin/haya_post_info/hook/thread_list_inc_username_before.htm
找到:

<a href="<?php echo url("forum-$_thread        [fid]");?>" target="_blank" title="<?php echo $_thread        ['forumname'];?>" class="badge  small mr-2 haya-post-info-home-thread-forum-username-before">

替换为:

<a href="<?php echo url("forum-$_thread        [fid]");?>" target="_blank" title="<?php echo $_thread        ['forumname'];?>" class="badge 
<?php if ($_thread        ['fid'] == 1) { ?>
badge-primary
<?php } ?>
<?php if ($_thread        ['fid'] == 2) { ?>
badge-secondary
<?php } ?>
<?php if ($_thread        ['fid'] == 3) { ?>
badge-success
<?php } ?>
<?php if ($_thread        ['fid'] == 4) { ?>
badge-info
<?php } ?>
<?php if ($_thread        ['fid'] == 5) { ?>
badge-warning
<?php } ?>
<?php if ($_thread        ['fid'] == 6) { ?>
badge-danger
<?php } ?>
<?php if ($_thread        ['fid'] == 7) { ?>
badge-secondary
<?php } ?>
<?php if ($_thread        ['fid'] == 8) { ?>
badge-dark
<?php } ?>
<?php if ($_thread        ['fid'] == 9) { ?>
badge-primary
<?php } ?>
<?php if ($_thread        ['fid'] == 10) { ?>
badge-warning
<?php } ?> small mr-2 haya-post-info-home-thread-forum-username-before">

2.后台帖子增强插件设置 - 首页帖子列表显示板块2 - 开启

举例:
比如红色就按照这样子格式:badge-danger

<?php if ($_thread        ['fid'] == 5) { ?>
badge-danger
<?php } ?>

附上颜色对照表:

xiuno修改置顶的小图标

可能有人不太喜欢那个小旗帜图标,把置顶图标直接换成向上顶的箭头吧
css代码,放到:全局 : html > head (css)

<style>
[class^="icon-top-"]:before {
content: "\f0aa";}
</style>

XiunoBBS 官方搜索插件改进

简单的说就是让搜索支持组合搜索,比如你站点上有个标题叫我是你爹的文章,搜索或者你爹都可以收到,如果你搜索我+空格+你爹中间多一个空格你会发现什么都没有.毕竟上古时期的玩意了,修复修复. 打开xn_search\route\search.php ,添加和修改以下代码

foreach($keyword_arr as $key => $cond_val){
    $cond_sql .= ($range == 1?"subject":"message")." LIKE '%$cond_val%'";
    if($key != count($keyword_arr) - 1)$cond_sql .= ' AND ';
}​

主题URL字段自定义

打开index.inc.php,找到如下:

case 'thread':    include _include(APP_PATH.'route/thread.php');     break;

在下面添加一行.其中tiezi就是你要自定义的url字段.不能改成已经存在的字段.

`case 'tiezi':    include _include(APP_PATH.'route/thread.php');     break;`

完事以后修改一下所有你在用的模板和插件里面对应的.把thread改成你要的.清理缓存,完事.

利用大白自定义插件实现站外链接跳转提示

代码放到自定义JS里面,作用于全局.

<script>!function() {
    $("a").each(function() {
        var url = $(this).attr('href');
        if (url.length > 0 && url.indexOf('http') >= 0 && url.indexOf(window.location.host) < 0) {
            // console.log(url);
            $(this).click(function() {
                $.confirm('即将离开网站,请注意您的帐号和财产安全。</br>' + $(this).attr('href') + '', function() {
                    window.open(url);
                });
                return false;
            });
        }
    });}();</script>

非插件实现图片灯箱

适合有强迫症的人,不喜欢装太多插件的.
使用的JS就2KB大小,项目地址:https://tokinx.github.io/ViewImage/

在你要实现图片灯箱的页面加入下面的html即可,默认只需要加在主题页面

<script>
$(".message img").on("click",function (){
window.ViewImage && ViewImage.init('.message img');
});
</script>
<script src="//tokinx.github.io/ViewImage/view-image.min.js"></script>

或者使用大白自定义工具,添加到主题页的html或者js中

解决发帖时候出现xhr.responseText:, type:error

注释掉post.func.php 里的include xn_html_safe.func.php 即可,但是不建议这样,有安全风险

给帖子图片增加圆角和阴影特效的方法

打开/view/css/bootstrap-bbs.css大概242行,找到

.message img {
 ...
 }

替换为

 .message img {
   max-width: 100%;
   height: auto !important;
   border: 1px solid #dee2e6;
   margin-bottom: 0.75rem;
   margin-right: 0.5em;
   border-radius:6px;
   box-shadow: 6px 6px 12px 0px rgba(0,0,0,0.2),0px 0px 8px 0px rgba(0,0,0,0.19);
 }