Skip to content

Instantly share code, notes, and snippets.

@halfcoder
Last active December 20, 2015 20:58
Show Gist options
  • Save halfcoder/6193824 to your computer and use it in GitHub Desktop.
Save halfcoder/6193824 to your computer and use it in GitHub Desktop.
Junior Ivy网站第二版施工方案

Junior Ivy网站第二版施工方案

最终效果

我们将在第一版网站的基础上予以升级,最终达到以下的效果。

前台架构

  • / 网站主页
  • /search 搜索
  • /page 页面

1.活动功能

  • /activity 我的活动|活动列表
  • /activity/create 创建活动
  • /activity/delete 删除活动
  • /activity/edit 编辑活动
  • /activity/join 参加活动
  • /activity/like “感兴趣”
  • /activity/list 活动列表
  • /activity/view 活动页面

2.文章功能

  • /article 文章列表(原有的大千世界与推荐资源板块)
  • /article/category 分类文章列表
  • /article/feed 分类文章RSS输出(可用于电子期刊)
  • /article/submit 文章投稿
  • /article/view 文章页面

3.博客功能

  • /blog 我的博客/博客文章列表
  • /blog/create 创建博客文章
  • /blog/delete 删除博客文章
  • /blog/edit 编辑博客文章
  • /blog/list 博客文章列表
  • /blog/view 博客文章页面

4.用户主页功能

  • /home 用户主页
  • /home/friend 朋友列表
  • /home/login 用户登录
  • /home/logout 用户登出
  • /home/lost 找回密码
  • /home/profile 基本信息设置
  • /home/register 用户注册
  • /home/setting 用户设置

5.主办方功能

  • /host 主办方列表
  • /host/activity 主办方创建的活动
  • /host/apply 主办方入驻
  • /host/blog 主办方发布的信息
  • /host/subscribe 主办方订阅
  • /host/view 主办方页面

6.用户页面功能

  • /people 普通用户页面
  • /people/addfriend 加为好友
  • /people/blog 感想列表
  • /people/delfriend 取消好友关系
  • /people/team 用户发起的团队页面

7.团队功能

  • /team 团队列表
  • /team/create 创建团队
  • /team/dismiss 解散团队
  • /team/edit 编辑团队
  • /team/join 加入团队
  • /team/view 团队页面

后台架构

  • /manager 后台首页

1.活动管理

  • /manager/activity 活动列表
  • /manager/activity/create 创建活动
  • /manager/activity/delete 删除活动
  • /manager/activity/edit 编辑活动

2.文章及分类管理

  • /manager/article 文章列表
  • /manager/article/create 创建文章
  • /manager/article/delete 删除文章
  • /manager/article/edit 编辑文章
  • /manager/article/category 分类列表
  • /manager/article/category/create 创建分类
  • /manager/article/category/delete 删除分类
  • /manager/article/category/edit 编辑分类

3.博客文章管理

  • /manager/blog 博客文章列表
  • /manager/blog/create 创建博客文章
  • /manager/blog/delete 删除博客文章
  • /manager/blog/edit 编辑博客文章

4.主办方管理

  • /manager/host 主办方列表
  • /manager/host/create 创建主办方
  • /manager/host/delete 删除主办方
  • /manager/host/edit 编辑主办方

5.团队管理

  • /manager/team 团队列表
  • /manager/team/create 创建团队
  • /manager/team/delete 删除团队
  • /manager/team/edit 编辑团队

6.用户管理

  • /manager/user 用户列表
  • /manager/user/create 创建用户
  • /manager/user/delete 删除用户
  • /manager/user/edit 编辑用户

施工方案

我们将分多个阶段逐步实现上述功能,保证整个站点的平滑升级。

第一阶段

将现有的“活动信息”板块实现为 活动 功能。同时引入多说评论系统益播公益404页面

第二阶段

加入基本的 用户 功能和 主办方 功能

第三阶段

实现全部的 用户 功能和全站顶栏。

第四阶段

  • 将现有的“大千世界”和“推荐资源”板块实现为 文章 功能;
  • “关于我们”板块实现为 页面 功能;
  • “我们的伙伴”和“友方网站组织”实现为 友情链接 功能;

第五阶段

  • “首页板块”实现为“首页设置”功能
  • 全面翻新后台

第六阶段

加入 用户页面 功能

第七阶段

加入 团队 功能

第八阶段

加入 博客 功能

第九阶段

加入 搜索 功能

第十阶段

加入 推荐系统

基础架构

基本组件

当前网站使用PHP语言开发,基于CodeIgniter框架2.1.2版。 第二版网站中,我们将使用PHP 5.2.17作为语言环境,将CodeIgniter框架升级到2.1.4版。

据相关消息,CodeIgniter框架的开发几近停顿,前景很不明朗。因此,不排除在未来更换基础开发框架的可能。

### 使用组件

系统配置

现有的系统配置功能已经较为齐全,其数据库结构如下:

CREATE TABLE IF NOT EXISTS `ji_config` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  `value` text,
  PRIMARY KEY (`id`),
  UNIQUE KEY `name` (`name`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=6 ;

仅作以下改动:

  • 【删除】id字段

改动后的数据库结构如下:

CREATE TABLE IF NOT EXISTS `ji_config` (
  `name` varchar(50) NOT NULL,
  `value` text,
  PRIMARY KEY (`name`),
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 ;

功能设计

活动功能

当前的“活动信息”板块使用两张数据表来分别保存来自外部的活动和Junior Ivy自己组织的活动,其结构如下:

CREATE TABLE IF NOT EXISTS `ji_activity_info` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(255) NOT NULL,
  `text` text,
  `place` int(11) NOT NULL DEFAULT '0',
  `type1` int(11) NOT NULL DEFAULT '0',
  `type2` int(11) NOT NULL DEFAULT '0',
  `topic1` int(11) NOT NULL DEFAULT '0',
  `topic2` int(11) NOT NULL DEFAULT '0',
  `signtime1` datetime NOT NULL,
  `signtime2` datetime NOT NULL,
  `acttime1` datetime NOT NULL,
  `acttime2` datetime NOT NULL,
  `createdtime` datetime DEFAULT NULL,
  `clicks` int(11) NOT NULL DEFAULT '0',
  `scorenum` int(11) NOT NULL DEFAULT '0',
  `score` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `clicks` (`clicks`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=107 ;

CREATE TABLE IF NOT EXISTS `ji_jiact_info` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(255) NOT NULL,
  `text` text,
  `place` int(11) NOT NULL DEFAULT '0',
  `type1` int(11) NOT NULL DEFAULT '0',
  `type2` int(11) NOT NULL DEFAULT '0',
  `topic1` int(11) NOT NULL DEFAULT '0',
  `topic2` int(11) NOT NULL DEFAULT '0',
  `signtime1` datetime NOT NULL,
  `signtime2` datetime NOT NULL,
  `acttime1` datetime NOT NULL,
  `acttime2` datetime NOT NULL,
  `clicks` int(11) NOT NULL DEFAULT '0',
  `scorenum` int(11) NOT NULL DEFAULT '0',
  `score` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `clicks` (`clicks`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ;
/*话说两个数据表设计成相似的……swordfeng你不觉得迥异么……*/

对其的改动有:

  • 【还看什么,果断】合并数据表
  • 【更改】signtime1字段改名为sign_begintime,更好地表明其申请开始时间的含义。
  • 【更改】signtime2字段改名为sign_endtime,更好地表明其申请结束时间的含义。
  • 【更改】acttime1字段改名为act_begintime,更好地表明其活动开始时间的含义。
  • 【更改】acttime2字段改名为act_endtime,更好的表明其活动结束时间含义。
  • 【删除】place、type1、type2、topic1、topic2字段。使用activity_relation数据表代替。
  • 【增加】host_id字段。用于保存主办方数据。 特别定义:0表示无主办方信息,可能由管理员添加或为第一版的遗留数据。
  • 【增加】allow_comment字段,用于控制是否允许评论。

此外,还有一些数据表用来保存活动的地点、主题、类型信息,其数据结构如下:

CREATE TABLE IF NOT EXISTS `ji_activity_info_places` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `placename` (`name`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=28 ;

CREATE TABLE IF NOT EXISTS `ji_activity_info_topics` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `topicname` (`name`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=19 ;

CREATE TABLE IF NOT EXISTS `ji_activity_info_types` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `typename` (`name`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=47 ;
/*话说三个数据表设计成相同的……我吐槽无力了……*/

对其的改动有:

  • 【果断】合并数据表
  • 【增加】type字段,用于表述之前以多个数据表区分的place、topic和type三种类型的tag。 (令人遗憾的是,这是个过渡性的设计。)

此外,别忘了:

  • 【增加】activity_relation数据表,用于保存活动与标签之间的关系,这样可以实现多个标签

改动之后的数据库结构如下:

CREATE TABLE IF NOT EXISTS `ji_activity` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `host_id` int(11) NOT NULL,
  `title` varchar(255) NOT NULL,
  `content` text NOT NULL,
  `sign_begintime` datetime NOT NULL,
  `sign_endtime` datetime NOT NULL,
  `act_begintime` datetime NOT NULL,
  `act_endtime` datetime NOT NULL,
  `createdtime` datetime DEFAULT NULL,
  `clicks` int(11) NOT NULL DEFAULT '0',
  `scorenum` int(11) NOT NULL DEFAULT '0',
  `score` int(11) NOT NULL DEFAULT '0',
  `allow_comment` BOOLEAN NOT NULLPRIMARY KEY (`id`),
  KEY `clicks` (`clicks`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

CREATE TABLE IF NOT EXISTS `ji_activity_tag` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  `type` varchar(50) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `typename` (`name`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

CREATE TABLE IF NOT EXISTS `ji_activity_relation` (
  `activity_id` int(11) NOT NULL,
  `tag_id` int(11) NOT NULL,
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 ;

多说评论系统

益播公益404页面

用户系统

现有的用户系统十分薄弱,仅能提供后台的用户登录、新建功能。其数据库结构如下:

CREATE TABLE IF NOT EXISTS `ji_admin_users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user` varchar(50) NOT NULL,
  `password` varchar(255) NOT NULL,
  `logintime` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `user` (`user`)
) ENGINE=MyISAM  DEFAULT CHARSET=gbk AUTO_INCREMENT=10 ;

新版用户系统与现有用户系统有很大不同,包含多个部分,根据相关需求分别设计。

基础部分

基础部分的数据表包含了一个用户最基本的信息,可用于登录、注册、找回密码等功能。分析其需求如下:

设计的数据库结构如下:

CREATE TABLE IF NOT EXISTS `ji_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(50) NOT NULL,
  `password` varchar(255) NOT NULL,
  `email` varchar(512) NOT NULL,
  `role` varchar(255) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `username` (`username`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

其中role字段用于记录用户在站点中的角色。 与现实生活类似,一个用户可以分饰多个角色。 具体实现参看“权限部分”。

权限部分

主办方功能

这是一个全新的功能,分析其需求如下:

  • 主办方入驻:由注册用户进行主办方入驻登记
  • 发布、编辑活动信息
  • 向管理员申请删除活动信息

设计的数据库结构如下:

CREATE TABLE IF NOT EXISTS `ji_host` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `fullname` varchar(50) NOT NULL,
  `location` varchar(255) NOT NULL,
  `type` text NOT NULL,
  `topic` text NOT NULL,
  `description` text NOT NULL
  PRIMARY KEY (`id`),
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

活动信息部分的功能,参见“活动功能”。 Junior Ivy官方将注册第一个主办方账号,同时其在上一版网站上发布的信息会自动赋host_id值为1。

文章功能

文章功能是在现有的“大千世界”和“推荐资源”两个板块的基础上合并而成。分析现有的数据库结构如下:

/*大千世界*/
CREATE TABLE IF NOT EXISTS `ji_tags` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `name` (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=gbk AUTO_INCREMENT=1 ;

CREATE TABLE IF NOT EXISTS `ji_world` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `type` int(11) NOT NULL COMMENT '0=ftf,1=otr',
  `title` varchar(255) NOT NULL,
  `author` varchar(50) NOT NULL,
  `time` datetime NOT NULL,
  `img` varchar(255) NOT NULL,
  `text` text NOT NULL,
  `clicks` int(11) NOT NULL DEFAULT '0',
  `score` int(11) NOT NULL DEFAULT '0',
  `scorenum` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `type` (`type`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=47 ;

CREATE TABLE IF NOT EXISTS `ji_world_tags` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `index` int(11) NOT NULL,
  `tag` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `index` (`index`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

/*推荐资源*/
CREATE TABLE IF NOT EXISTS `ji_srcbag` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(50) NOT NULL,
  `intro` text NOT NULL,
  `img` varchar(255) NOT NULL,
  `text` mediumtext NOT NULL,
  `clicks` int(11) NOT NULL DEFAULT '0',
  `score` int(11) NOT NULL DEFAULT '0',
  `scorenum` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ;

统一之后,文章功能只有两个表:article用来保存文章数据,category用来保存分类数据。更多的改动有:

  • 【设定】一篇文章只能属于一个分类。
  • 【增加】allow_comment字段,用于控制是否允许评论。
  • 【增加】slug字段,用于url美化。
  • 【增加】summary字段,用于保存文章摘要。

新版的数据表结构如下:

CREATE TABLE IF NOT EXISTS `ji_article` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `category_id` int(11) NOT NULL,
  `author_id` int(11) NOT NULL,
  `title` varchar(255) NOT NULL,
  `slug` varchar(255) NULL,
  `time` datetime NOT NULL,
  `image` varchar(255) NOT NULL,
  `summary` varchar(512) NOT NULL,
  `content` text NOT NULL,
  `clicks` int(11) NOT NULL DEFAULT '0',
  `score` int(11) NOT NULL DEFAULT '0',
  `scorenum` int(11) NOT NULL DEFAULT '0',
  `allow_comment` BOOLEAN NOT NULLPRIMARY KEY (`id`),
  UNIQUE KEY `slug` (`slug`),
  KEY `category_id` (`category_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

CREATE TABLE IF NOT EXISTS `ji_category` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(40) NOT NULL,
  `slug` varchar(20) DEFAULT NULL,
  `parent_id` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `name` (`name`,`slug`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

页面功能

页面功能是在原有的“关于我们”板块上改进而来。分析现有的数据库结构如下:

CREATE TABLE IF NOT EXISTS `ji_about` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `page` varchar(50) NULL,
  `title` varchar(50) NOT NULL,
  `summary` text NOT NULL,
  `content` mediumtext NOT NULL,
  `clicks` int(11) NOT NULL DEFAULT '0',
  `score` int(11) NOT NULL DEFAULT '0',
  `scorenum` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  UNIQUE KEY `page` (`page`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ;

对其的改动有:

  • 【更改】page字段改名为slug,更好的表示其url美化的作用。
  • 【删除】删除intro字段。页面的唯一访问入口是其链接,前台页面中不存在所谓的“页面列表”,因此不需要摘要功能字段。
  • 【增加】allow_comment字段,用于控制是否允许评论。

改动之后的数据库结构如下:

CREATE TABLE IF NOT EXISTS `ji_page` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `slug` varchar(255) NULL,
  `title` varchar(555) NOT NULL,
  `content` text NOT NULL,
  `clicks` int(11) NOT NULL DEFAULT '0',
  `score` int(11) NOT NULL DEFAULT '0',
  `scorenum` int(11) NOT NULL DEFAULT '0',
  `allow_comment` BOOLEAN NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `slug` (`slug`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

友情链接功能

友情链接功能是在现有的“我们的伙伴”和“友方网站组织”两个板块的基础上整合而成。现有的数据库结构如下:

CREATE TABLE IF NOT EXISTS `ji_asso` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `text` varchar(255) NOT NULL,
  `img` varchar(255) NOT NULL,
  `link` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;

CREATE TABLE IF NOT EXISTS `ji_support` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `text` varchar(255) NOT NULL,
  `img` varchar(255) NOT NULL,
  `link` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
/*话说两个数据表设计成相同的……swordfeng你不觉得迥异么……*/

对其的改动有:

  • 【果断】合并数据表
  • 【更改】text字段改名为description字段,以免与MySQL关键字text混淆,同时也是更好地体现其描述的含义。

改动之后的数据库结构如下:

CREATE TABLE IF NOT EXISTS `ji_link` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `description` varchar(255) NOT NULL,
  `image` varchar(255) NOT NULL,
  `link` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

用户页面功能

团队功能

博客功能

搜索功能

推荐系统

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment