跳转至内容
  • 社区首页
  • 版块
  • 最新
  • 标签
  • 热门
折叠

GitHub中文论坛

95909

9590

@9590
关于
帖子
4
主题
2
分享
0
群组
0
粉丝
0
关注
0

帖子

最新 最佳 有争议的

  • 开始从 discuzX3.4 迁移到 nodebb(一)
    95909 9590

    首先要了解下discuzX3.4和nodebb的数据库结构,discuzX用的是mysql,nodebb用的是mongodb。

    最重要的当然是用户相关的数据表和帖子数据表。discuzX能查到数据表字典,nodebb只能自己用mongodb的admin工具看了。

    一、用户数据

    1、nodebb和discuz数据表的对照

     Nodebb用户表须用的数据(字段):
    
    db.objects.findOne({username:"admin"})  -->
    {
    	"_id" : ObjectId("65cb8801e09f69ff71141520"),
    	"_key" : "user:1",
    	"joindate" : 1707837441083,
    	"lastonline" : 1708000177292,
    //"status" : "online",
    	"uid" : 1,
    	"username" : "admin",
    //"userslug" : "admin",
    	"password" : "$2a$12$VIKLGFC3AS1B4sDuVNivIOQO1HVpxjdOJXyUDBnDZqbu5nK",
    //"password:shaWrapped" : 1,
    	"email" : "32342@yeah.net",
    //"email:confirmed" : 1,
    //"groupTitle" : "[\"\"]",
    //"gdpr_consent" : 1,
      "profileviews" : 0,      // 空间点击数 views
      "reputation" : 0,       // 声誉,积分 credits
    	"topiccount" : 1,       // 主题 threads
    	"lastposttime" : 1707837441933,
    	"postcount" : 1,        // 帖子 posts (包含了主题)
    //"rss_token" : "17305070-9558-4f2a-bef1-aba7902e0990",
    	"picture" : "/assets/uploads/profile/1-profileavatar-1707989852545.jpeg",
    	"uploadedpicture" : "/assets/uploads/profile/1-profileavatar-1707989852545.jpeg",
    	"fullname" : "全名guojin",
    	"aboutme" : "关于我是一个管理员",
    	"birthday" : "2024-02-15",
    	"location" : "广州",
    	"signature" : "签名:我是一个管理员",
    	"website" : "https://weibo.com/我的网"
    }
    

    discuzX 的表分得比较散,有好几个表:

    pre_common_member 用户主表

    字段名 数据类型 默认值 允许非空 备注
    uid mediumint(8) unsigned NO 会员id
    email char(40) NO 邮箱
    username char(15) NO 用户名
    password char(32) NO 密码
    status tinyint(1) 0 NO 判断用户是否已经删除 需要discuz程序加判断,并增加整体清理的功能。原home字段为flag
    emailstatus tinyint(1) 0 NO email是否经过验证 home字段为emailcheck
    avatarstatus tinyint(1) 0 NO 是否有头像 home字段为avatar
    videophotostatus tinyint(1) 0 NO 视频认证状态 home
    adminid tinyint(1) 0 NO 管理员id
    groupid smallint(6) unsigned 0 NO 会员组id
    groupexpiry int(10) unsigned 0 NO 用户组有效期
    extgroupids char(20) NO 扩展用户组
    regdate int(10) unsigned 0 NO 注册时间
    credits int(10) 0 NO 总积分
    notifysound tinyint(1) 0 NO 短信声音
    timeoffset char(4) NO 时区校正
    newpm smallint(6) unsigned 0 NO 新短消息数量
    newprompt smallint(6) unsigned 0 NO 新提醒数目
    accessmasks tinyint(1) 0 NO 标志
    allowadmincp tinyint(1) 0 NO 标志
    onlyacceptfriendpm tinyint(1) 0 NO 是否只接收好友短消息
    conisbind tinyint(1) unsigned 0 NO 用户是否绑定QC

    uc_members 用户表

    字段名 数据类型 默认值 允许非空 备注
    uid mediumint(8) unsigned NO 用户ID
    username char(15) NO 用户名
    password char(32) NO 密码
    email char(32) NO 用户Email
    myid char(30) NO 漫游id
    myidkey char(16) NO 漫游id
    regip char(15) NO 注册IP
    regdate int(10) unsigned 0 NO 注册时间
    lastloginip int(10) 0 NO 上次登陆的IP(程序转换成数值类型)
    lastlogintime int(10) unsigned 0 NO 上次登录的时间
    salt char(6) NO 密码干扰串,用来和密码进行配合验证,防止被暴力破解
    secques char(8) NO 用户的安全提问

    pre_common_member_field_forum 用户论坛字段表

    字段名 数据类型 默认值 允许非空 备注
    uid mediumint(8) unsigned NO 会员id
    publishfeed tinyint(3) 0 NO 用户自定义发送哪些类型的feed(原字段为customaddfeed)
    customshow tinyint(1) unsigned 26 NO 自定义帖子显示模式
    customstatus varchar(30) NO 自定义头衔
    medals text NO 勋章信息
    sightml text NO 签名
    groupterms text NO 公共用户组
    authstr varchar(20) NO 找回密码验证串
    groups mediumtext NO 用户所有群组
    attentiongroup varchar(255) NO 用户偏好

    pre_common_member_profile 用户栏目表

    字段名 数据类型 默认值 允许非空 备注
    uid mediumint(8) unsigned NO 会员id
    realname varchar(255) NO 实名
    gender tinyint(1) 0 NO 性别 (0:保密 1:男 2:女)
    birthyear smallint(6) unsigned 0 NO
    birthmonth tinyint(3) unsigned 0 NO
    birthday tinyint(3) unsigned 0 NO
    constellation varchar(255) NO 星座(根据生日自动计算)
    zodiac varchar(255) NO 生肖(根据生日自动计算)
    telephone varchar(255) NO 固定电话
    mobile varchar(255) NO 手机
    idcardtype varchar(255) NO 证件类型:身份证 护照 军官证等
    idcard varchar(255) NO 证件号码
    address varchar(255) NO 邮寄地址
    zipcode varchar(255) NO 邮编
    nationality varchar(255) NO 国籍
    birthprovince varchar(255) NO 出生省份
    birthcity varchar(255) NO 出生城市
    birthdist varchar(20) NO 出生行政区/县
    birthcommunity varchar(255) NO 出生小区
    resideprovince varchar(255) NO 居住省份
    residecity varchar(255) NO 居住城市
    residedist varchar(20) NO 居住行政区/县
    residecommunity varchar(255) NO 居住小区
    residesuite varchar(255) NO 小区、写字楼门牌号
    graduateschool varchar(255) NO 毕业学校
    company varchar(255) NO 公司
    education varchar(255) NO 学历
    occupation varchar(255) NO 职业
    position varchar(255) NO 职位
    revenue varchar(255) NO 年收入
    affectivestatus varchar(255) NO 情感状态
    lookingfor varchar(255) NO 交友目的(交友类型)
    bloodtype varchar(255) NO 血型
    height varchar(255) NO 身高
    weight varchar(255) NO 体重
    alipay varchar(255) NO 支付宝帐号
    icq varchar(255) NO ICQ
    qq varchar(255) NO QQ
    yahoo varchar(255) NO YAHOO
    msn varchar(255) NO MSN
    taobao varchar(255) NO 阿里旺旺
    site varchar(255) NO 主页
    bio text NO 自我介绍 来自论坛bio字段
    interest text NO 兴趣爱好
    field1 text NO 自定义字段1
    field2 text NO 自定义字段2
    field3 text NO 自定义字段3
    field4 text NO 自定义字段4
    field5 text NO 自定义字段5
    field6 text NO 自定义字段6
    field7 text NO 自定义字段7
    field8 text NO 自定义字段8

    pre_common_member_count 用户统计表

    字段名 数据类型 默认值 允许非空 备注
    uid mediumint(8) unsigned NO 会员id
    extcredits1 int(10) 0 NO 声望
    extcredits2 int(10) 0 NO 金钱
    extcredits3 int(10) 0 NO 扩展
    extcredits4 int(10) 0 NO 扩展
    extcredits5 int(10) 0 NO 扩展
    extcredits6 int(10) 0 NO 扩展
    extcredits7 int(10) 0 NO 扩展
    extcredits8 int(10) 0 NO 扩展
    friends smallint(6) unsigned 0 NO 好友个数 home
    posts mediumint(8) unsigned 0 NO 帖子数
    threads mediumint(8) unsigned 0 NO 主题数
    digestposts smallint(6) unsigned 0 NO 精华数
    doings smallint(6) unsigned 0 NO 记录数
    blogs smallint(6) unsigned 0 NO 日志数
    albums smallint(6) unsigned 0 NO 相册数
    sharings smallint(6) unsigned 0 NO 分享数
    attachsize int(10) unsigned 0 NO 上传附件占用的空间 home
    views mediumint(8) unsigned 0 NO 空间查看数
    oltime smallint(6) unsigned 0 NO 在线时间
    todayattachs smallint(6) unsigned 0 NO 当天上传附件数
    todayattachsize int(10) unsigned 0 NO 当天上传附件容量
    feeds mediumint(8) unsigned 0 NO 广播数
    follower mediumint(8) unsigned 0 NO 听众数量
    following mediumint(8) unsigned 0 NO 收听数量
    newfollower mediumint(8) unsigned 0 NO 新增听众数量
    blacklist mediumint(8) unsigned 0 NO 拉黑用户数

    pre_common_member_status 用户状态表

    字段名 数据类型 默认值 允许非空 备注
    uid mediumint(8) unsigned NO 会员id
    regip char(15) NO 注册IP
    lastip char(15) NO 最后登录IP
    lastvisit int(10) unsigned 0 NO 最后访问
    lastactivity int(10) unsigned 0 NO 最后活动
    lastpost int(10) unsigned 0 NO 最后发表
    lastsendmail int(10) unsigned 0 NO 上次发送email时间 home原字段为lastsend
    invisible tinyint(1) 0 NO 是否隐身登录
    buyercredit smallint(6) 0 NO 买家信用等级及积分
    sellercredit smallint(6) 0 NO 卖家信用等级及积分
    favtimes mediumint(8) unsigned 0 NO 个人空间收藏次数
    sharetimes mediumint(8) unsigned 0 NO 个人空间分享次数
    profileprogress tinyint(2) unsigned 0 NO 个人资料完成度

    2、处理头像

    discuz 默认自定义头像目录:data/attachment/forum/pw/upload/33370.jpg

    discuzX的默认自定议头像目录:

    /uc_server/data/avatar/000/xx/xx/xx_avatar_middle.jpg

    其中 xx/xx/xx_ 正好是 uid,位数不够的系统会自动补零

    因此写了个程序,把xx_avatar_middle.jpg文件拷贝到一个目录里(一会儿复制到服务端去),并把文字名改为 xxxxxx_avatar_middle.jpg,最后还把{uid: “xxxxxx”, path: "/assets/uploads/profile/000/dz_avatar/62011_avatar_middle.jpg”} 存成json文件,以备后面使用。

    服务端我复制到目录:~/nodebb/public/uploads/profile/dz_avatar

    import os,shutil,json
    
    
    # file_list 为文件名称列表
    def find_files_path(str_list, path=r"./"):
        # 组合绝对路径,当前路径+目录
        whole_path = os.getcwd() + path
        # 遍历目录下的文件
        files_path = os.walk(whole_path)
        # 路径空列表,用来存储查找文件路径
        path_data = []
        try:
            # 遍历要寻找的文件
            for str in str_list:
                # 查找目录下对应的文件
    
                for root, dirs, files in files_path:
                    # 遍历所有文件名称,添加符合文件名称的文件路径进列表
                    for f in files:
    
                        if str in f:
                            real_path = (root  + "\\" + f).replace("./", "\\")
                            #print(real_path)
                            uid_file = real_path[-26:].replace("\\", "").lstrip("0") #去0,得到文件名:uid + _avatar_middle.jpg
                            
                            path_data.append({"uid": real_path[-26:-18].replace("\\", "").lstrip("0"),
                                              "path": '/assets/uploads/profile/dz_avatar/'+uid_file})
    
                            shutil.copyfile(real_path, "./" + uid_file)  # 拷贝文件
        except Exception as e:
            print("遍历出现错误:" + e)
        finally:
            return path_data
    
    uid_file_list = find_files_path(["big"], "./")
    
    print(uid_file_list)
    
    #data = {'name': 'John', 'age': 30, 'city': 'New York'}
     
    with open('avatar_data.json', 'w') as f:
        json.dump(uid_file_list, f)
    
    
    NodeBB

  • 开始从 discuzX3.4 迁移到 nodebb(零)
    95909 9590

    论坛这事儿

    论坛这东西现在已经变得非常的小众,我玩论坛始于25年前(暴露了年龄哈哈),现在逛论坛的时间并不多了,最多看看知乎或者公众号文章,也会偶尔跟着潮流制作一些视频。慢慢发现,好的内容还是很受大家欢迎,一个好的视频内容(不是只流量大的)其实也要有好的文案。本人写东西也只是才是这几年的事,偶尔在实体杂志上写一小方块东西。码字是很花时间的,但也是对自己知识和智慧的集中考验。

    论坛相对于公众号文章和即时聊天来看,是一个奇怪的中间产品,口水多但有时能积累起一些很有干货的主题,十分精彩。

    最近想接手一个论坛,用于自己写东西做知识梳理和内容积累,也顺便尝试汇集志同道合的朋友。

    现代论坛

    旧论坛是discuzX3.4,看了一下对比现代的web产品,多少有点倒胃口。功能相当多,界面繁复,速度又慢。。。

    看了下三大现代论坛flarum, nodebb, discourse,最终选了在功能和资源消耗折中的nodebb。原论坛用户数量和帖子积累得不少,所以想办法把数据尽可能迁移过去,发现网上这方面资料并不多,有的也很旧了。开这个帖子记录一下,也希望对其他朋友有用。我的代码都是自学过来的,学得也支离破碎,因为工作用不上,所以纯靠兴趣发动,特别希望有高手也支招。

    首先要了解下discuzX3.4和nodebb的数据库结构,discuzX用的是mysql,nodebb用的是mongodb。

    最重要的当然是用户相关的数据表和帖子数据表。discuzX能查到数据表字典,nodebb只能自己用mongodb的admin工具看了。

    NodeBB nodebb bbs discuz

  • NodeBB 安装教程
    95909 9590

    装3.65遇到两个坑,nodejs要装16以上,运行./nodebb setup之前要先运行npm install sharp (否则会出错)

    NodeBB

  • 内幕交易信息!为2024筹划中
    95909 9590

    还内幕,能赚钱你自己来需要来这?

    技术交流
  • 登录

  • 第一个帖子
    最后一个帖子
0
  • 社区首页
  • 版块
  • 最新
  • 标签
  • 热门