[CI2.0] 简单内容管理系统 - tinyCMS
本帖最后由 huboo82 于 2011-3-21 19:24 编辑tinyCMS
基于页面的内容管理,每页面可包含一个或多个(仅显示最后提交页面内容)不同内容版本,就这功能。
tinyCMS 基于 Codeigniter 2.0 开发,使用 Sqlite v2 版数据库,使用了 Transdmin 后台主题,使用了 STBlog 上传代码,借鉴了 Typecho 的后台样式与交互方式,集成了CKEditor 3.5.2,集成了swfupload;数据库在 application/db/tinycms.sdb, 以下划线开头的数据库仅包含一条用户信息:admin/123456,另一个为测试时使用的数据库,用户登录信息相同。
关于 tinyCMS 所使用 CI 的一点改动:注释了 system/database/drivers/sqlite/sqlite_driver.php 行:502 并添加 行:503;
由于使用 swfupload 上传文件,CI 在检查 mime 类型时会出错,导致无法上传,修改 system/libraries/Upload.php 行:582
public function is_allowed_filetype($ignore_mime = FALSE)
修改为
public function is_allowed_filetype($ignore_mime = TRUE)
2011/3/16:CI 更新至 2.0.1,修改了一些错误,附件已更新。
免责声明:作者不对使用 tinyCMS 所造成的一切可能后果承担责任。
发布授权协议:GPLv3
manage_page & manage_content 注释
/**
* create/edit page
*
* @access public
* @param $page_id integer
* @param $data array
* @return integer
*/
public function manage_page($data, $page_id = NULL)
{
/*
组织数据
$content_data:内容数据,数组中的 key 与数据表 tbl_content 中的字段一一对应
$page_data:页面数据,数组中的 key 与数据表 tbl_page 中的字段一一对应
*/
$content_data = array(
'content' => $data['content'],
'content_date' => time(),
'content_status' => 'pages'
);
$page_data = array(
'page_title' => $data['title'],
'page_in_navigation' => $data['in_nav'],
'page_shown' => $data['shown']
);
//如果 $data['content_id'] 不为真,则设置其值为 NULL
$data['content_id'] = $data['content_id'] ? $data['content_id'] : NULL;
//如果 $page_id 不为 NULL
if( ! is_null($page_id))
{
//通过 manage_content 方法来处理内容数据
$content_id = $this->manage_content($content_data, $data['content_id']);
//如果 $data['content_id'] 不为 NULL
if( ! is_null($data['content_id']))
{
//如果 附件数据 $data['attachment'] 为真,更新所有附件的 attach 值为 $data['content_id']
if($data['attachment'])
{
foreach($data['attachment'] as $attachment)
{
$this->db->where('content_id', $attachment);
$this->db->update('content', array('attach' => $data['content_id']));
}
}
}
//否则 $data['content_id'] 为 NULL
else
{
//在页面与内容关系表中插入一条新的数据,指明新的内容与页面的关系
$this->db->insert('relationship', array('page_id' => $page_id, 'content_id' => $content_id));
//如果 附件数据 $data['attachment'] 为真,更新所有附件的 attach 值为 $content_id
if($data['attachment'])
{
foreach($data['attachment'] as $attachment)
{
$this->db->where('content_id', $attachment);
$this->db->update('content', array('attach' => $content_id));
}
}
}
//更新页面表
$page_data['content_id'] = $content_id;
$this->db->where('page_id', $page_id);
$this->db->update('page', $page_data);
$insert_id = $page_id;
}
//否则 $page_id 为 NULL
else
{
//通过 manage_content 方法来处理内容数据
$page_data['content_id'] = $this->manage_content($content_data);
//如果 附件数据 $data['attachment'] 为真,更新所有附件的 attach 值为 $page_data['content_id']
if($data['attachment'])
{
foreach($data['attachment'] as $attachment)
{
$this->db->where('content_id', $attachment);
$this->db->update('content', array('attach' => $page_data['content_id']));
}
}
//插入页面表
$this->db->insert('page', $page_data);
$insert_id = $this->db->insert_id();
//插入页面与内容关系表
$this->db->insert('relationship', array('page_id' => $insert_id, 'content_id' => $page_data['content_id']));
}
//返回页面 id
return $insert_id;
}
/**
* create/edit content
*
* @access public
* @param $id integer
* @param $data array
* @return integer
*/
public function manage_content($data, $id = NULL)
{
//如果 $id 不为 NULL,更新内容表,否则插入内容表,最后返回 $id
if( ! is_null($id))
{
$this->db->where('content_id', $id);
$this->db->update('content', $data);
}
else
{
$this->db->insert('content', $data);
$id = $this->db->insert_id();
}
return $id;
}
截图:
友情支持~~~ 不错的哦 打给个数据库的sql吗,sqlite2我打不开 真的不错啊 回复 4# jaclon
http://www.xdowns.com/soft/38/110/2008/Soft_43030.html :)先玩玩看,谢过楼主 不错啊!!! 顶 ,多谢分享 本帖最后由 joecfan 于 2011-3-16 15:43 编辑
我今天接触php第二天,php的语法都不怎么会,把你的代码下下来,运行了下,page.php出错了,找了半天,真有半天时间,NND,发现page.php ,else标记符前面少了php,还有把config.php的$config['rewrite_short_tags'] = TRUE;,把false改成true ,现在都没问题了。LZ做的东西真不错。