• 技术文章 >php教程 >php手册

    基于mysql的bbs设计(四)

    2016-06-21 09:03:17原创412
    5。版面模块设计
    所谓分类,更多的是为telnet服务端考虑的,在cq66模式下,用户可以按
    照自己的意愿进行分类,反正最后都是直接以版为基本单位访问的。
    对于版面文章的访问,存放的时候以整篇文章为参数,文章的分块由本层
    完成,如果上层以块为单位传送,则在上层全部传完,组合后,再传参到本层
    分解;在读取 的时候,本层则以块为单位访问,如果上层要以全文为单位访问
    ,则在上层做合并 工作,本层不管。
    至于要不要独立出索引,不影响上层的操作,主要和下层的数据库构造有
    关, 主要考虑可行性,效率需求等。
    权限的检查放在哪里进行呢?还是放在上层吧,其实就telnet服务器端,
    和cq66 的客户端,根本不会给一般用户显示特殊指令的菜单,当然,用户可
    以直接发送cq66 的指令,服务器方还是要检查的。但应该不用在它下面的功
    能模块层再检查一次吧
    。 Class BoardManage {
    private:

    public:
    // 有关分类的操作
    int GetClassNameInfo( int maxclass, char **classid,
    char ** classname );
    返回分类的信息,中英文名。
    int GetBoardName( int maxboards, char *classid,
    char **boardname );
    返回某分类中的版面信息,一般分类,直接select ..
    from sboard
    where boardclass == .... 特殊分类则查相应的表。。。。

    // 修改需要版面管理员以上的特权
    int NewClass( char * newclassname, int type );
    新建分类,普通分类还是特殊分类,
    int DeleteClass( char *newclassname );
    删除分类,但不cascade,即本层不负责一致性,由上层负责将
    相应的版面的分类信息改为别的。分类改名也是先删再建,
    int AddClassBoard( const char *classname, char *newboardname );
    将已建好的版加入某分类中,专门针对特殊分类,对一般分类,其
    效果和modifyboardinfo一样,
    int DeleteClassBoard( const char *classname, char *boardname );
    从分类中删除某个版,也是针对特殊分类,对一般分类,效果也
    是和modifyboardinfo一样,一个版的分类属性可以为空,即不属
    于任何分类。

    // 有关版的信息的操作。
    int NewBoard( const char *boardid,char *boardname);
    新建一个版,建立对应的表。其他参数取默认值。
    int DeleteBoard( const char *boardid );
    删除一个版,删除对应的表。
    int GetBoardInfo( const char *boardid, char *boardname,
    int& numposts, char *masters, char *class,
    long &level );
    取的版面的信息。
    int ModifyBoardId( const char *oldid, char *newid );
    改变版的英文id,对应table的名称也要改变,
    int ModifyBoardInfo( const char *boardid, char *boardname,
    int numposts, char *masters, char *class,
    long level );
    修改版面信息,需要特权。

    // 有关版面文章的操作。
    int AddText( char *boardid, char *title, char *writer,
    char *text );
    往版面中增加文章,内部将长文章分割成2k的块。
    int DeleteText( char *boardid, int num );
    删除文章,只是做一个标记,并不立刻修改对应的table。
    int FlushTable( char *boardid );
    刷新版面,删除被删文章的对应的记录。
    int MarkText( char *boardid, int num, char mark );
    给文章做标记。
    int ModifyTitle( char *boardid, int num, char *newtitle );
    修改文章的标题。
    int ModifyText( char *boardid, int num, char *newtext );
    修改文章内容,不是自己的文章需要特权。
    int GetTextInfo( const char *boardid, int num, char *title,
    char *writer, char& mark );
    取得文章的标题信息。
    int GetText( const char *boardid, int num, int block,
    char *text );
    读取文章的内容,以块为单位。

    // 文章和作者的查询
    // 一次将查询的结果全部返回?
    int QueryWriter( const char *boardid, char *writer,
    char **result );
    查询版面上,某作者的文章。
    int QueryTitle( const char *boardid, char *title,
    char **result );
    查询版面上,标题中包含指定内容的文章。
    }
    参数的传递是一件比较讨厌的事,从抽象的角度,希望返回的数据与
    底层无关,所以应该加以处理,但从效率的角度,又不希望数据进行多次
    复制,另一方面,空间的申请释放,究竟是在上层中完成还是在本层中完成
    呢?一不小心,很容易有内存错误。



    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:nbsp char int boardid const
    上一篇:挑战最棒的留言本的源码(三) 下一篇:基于mysql的bbs设计(二)
    VIP课程(WEB全栈开发)

    相关文章推荐

    • 【活动】充值PHP中文网VIP即送云服务器• Sajax融合服务器端的PHP和JS• 究竟是什么令微软为Windows改进PHP• Php 生成静态html文件• php安全之狗尾续貂• 简化的实现方法(限制为同一会话页面)
    1/1

    PHP中文网