开篇:润墨网以专业的文秘视角,为您筛选了一篇基于PHP CodeIgniter框架的CMS系统开发范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!
丁善磊
河南省濮阳市电子计算机技术开发中心,河南濮阳 457000
摘要 本文通过介绍CodeIgniter(以下简写为CI)框架,并简单介绍了利用该框架进行典型CMS之新闻系统开发过程,旨在说明CI是一个可供PHP网站开发者使用的轻便、功能强大的PHP开发框架。使用CI可以大大减少代码的编写量,这使得开发者可将主要的精力投入到项目的创造性开发上,利用CI更快速地进行PHP网站项目的开发。
关键词 网站开发;CMS;PHP框架;CodeIgniter
中图分类号TP39 文献标识码A 文章编号 1674-6708(2012)81-0219-02
CI是一个简单快速的PHP MVC框架,是美国EllisLab公司的产品。PHP开发者都知道,PHP的开发框架有许多,常见的有ThinkPHP、CanPHP、CakePHP、SpeedPHP等,笔者使用过ThinkPHP和CakePHP,但都不如CI使用起来得心应手,总体感觉CI更为简单,功能却不失强大。说CI简单,一是CI代码量少,目前最新版本2.3仅为2.21M,其中包括1.3M用户说明文档。
二是移植起来简单,它在PHP4和PHP5中都得到了很好的支持。
三是开发者可以自由选择是否使用模板引擎来创建视图,一般情况我们只需按照原来的习惯,混编HTML和PHP而形成模板文件。
1 CI的特点
CI的主要特点有:CI是开源的,免费的。CI是经过Apache/BSD-style开源许可授权的,可以无偿使用而无需支付任何使用费用。
CI是轻量级的。CI的核心只需要很少的库文件支持,额外的库文件只需在请求的时候加载,所以核心系统运行起来是既快又轻。CI运行速度快。虽然CI与其它PHP框架一样也使用M-V-C模型方法,但CI的运行速度更快。CI生成的URL干净而且是对搜索引擎友好。
CI功能强大。CI拥有大量的类库,包括:数据库读写类、电子邮件类、session类、图片操作类等,可以满足大多数网络开发任务需要。另外还有经常用到的日历类、Email类、文件上传类、表单验证类、FTP类、HTML表格类、图像处理类、语言类、分页类、Session类、数据库类等,甚至还有购物车类、众多的辅助函数等等供开发人员使用,这些类和函数在开发手册都有使用范例,可以很容易地使用。
CI可扩展性好。通过自定义类库、辅助函数来进行扩展,或者通过扩展类、系统钩子来实现扩展。CI可脱离模板引擎。CI自带有模板解析程序,通常情况下仍使用HTML和PHP混编模板。
2 CI的安装过程
CI的安装过程非常简单。CI安装分为四个步骤:
第一步,解压缩安装包。安装包解压后的结构是这样的:/application,用来放置应用程序,/system是CI的核心文件,/user_guide则是用户使用说明文档,index.php是网站入口文件,license.txt是使用许可协议文件。
第二步,将解压后的文件上传至支持PHP环境的服务器,/User_guide是用户说明文档,无需上传。
第三步,打开application/config文件下的config.php文件,这个文件是设置网站项目的配置信息,如网站的根URL,Session的加密等。
第四步,打开application/config文件下的 database.php文件,进行数据库连接参数的设置。这一点在随后的开发中还会详细介绍。
出于网站系统安全考虑,可以通过隐藏CI文件的位置来增加安全性。
比如,可以修改system和application目录的名字,把它改成任何你想改的。如果名字进行了修改,则必须打开主目录下面的index.php文件设置里面的$system_path和$application_folder变量,把它设成你修改后的名字。
更好的保证系统安全的方法是,将system和application两个文件夹放到网站根目录以外的地方,这也是很多网站系统采用的方法。如果移动了以上两个文件夹,则必须打开主目录下的index.php文件并编辑$system_path和$application_folder两个变量,最好使用绝对路径进行替换。
另外需要注意的是,一是在默认设置下,CI在每个文件夹中都有一个.htaccess配置文件以拒绝直接访问,当把代码部署到实际环境时最好移除之,因为生成环境的web服务可能会改变或不支持.htaccess的配置。因此在系统交付使用时,要关闭PHP的错误报告以及其他任何与开发时有关的功能,做到这一点在CI中只需设置ENVIRONMENT常量即可。
3 新闻系统开发的简要过程
新闻系统的简单构成:网站首页index.php,一般包括页头header、页脚footer和主体,主体一般包括最新文章、推荐文章以及其他的BOX;然后是文章列表页category.php,用来显示每个分类下的文章列表,然后是文章内容页content.php,显示文章的具体内容。
首先我们来创建一个控制器,这是网站开发的第一步。使用Dreamweaver或其它文本编辑器,创建一个名为news.php的文件,文件的位置在/application/controllers下,代码如下:
Class News extends CI_Controller{
Public function index()
{
$data[‘title’] = ‘Welcome to My News Site.’;
$data[‘sitename’] = ‘My News Site’;
$this->load->view(‘index_view’,$data);
}
}
?>
代码一目了然,定义了一个News类,注意类名第一个字母一定要大写。
接下来第一个过程是自建过程,用来初始化类。因为是首页,所以建一个index的方法,用来载入首页视图文件index_view.php,此文件一般放在/application/view/templates文件夹下,当网站被访问的时候,CI会加载默认控制器。控制器可以向视图文件传递变量,我们这里定义了一个数组,一个变量是页面标题,一个是站点名称。在视图文件里,直接使用$title、$sitename即可。
视图文件index_view.php代码如下:
var _gaq = _gaq || [];_gaq.push(['_setAccount', 'UA-22575914-1']);_gaq.push(['_setDomainName', '']);_gaq.push(['_trackPageview']);(function () {var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'www') + '/ga.js';var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);})();var _userid = '';var _siteid =708;var _istoken = 1;var _model = 'Model03'; WebPageSpeed =578; UrchinTrack();
然后我们打开application/config文件夹下的routes.php文件进行默认控制器的设置。比如本例,我们指定News为默认控制器:
$route['default_controller']='news';
这时,如果是在本机操作,在浏览器地址栏输入localhost或者127.0.0.1,就会打开装载的视图文件index_view.php。网页将显示” My News Site”字样。
开发CMS必然要用到数据库,CI与Mysql结合得也很好。就本例来讲,我们创建一个名为news的数据库,再建立两个表,一个是文章类别表category,一个是文章内容表article。数据库建好后,需要在配置文件中进行数据库的连接设置。打开application/config/文件夹下的database.php文件,这里假如你的数据库连接名和密码都是root,配置信息如下:
$db['default']['hostname'] = 'localhost';
$db['default']['username'] = 'root';
$db['default']['password'] = 'root';
$db['default']['database'] = 'news';
这样就可以连接数据库了,当然开发者可根据自己的情况进行其它数据库信息的配置。
接下来,我们需要写一个模型,命名为News_model,网站要完成的逻辑功能函数一般都在模型里编写,比如对数据库的CRUD(Creat、Read、Update、Delete)操作,我们在/application/model/下新建一个news_model.php文件,代码如下:
Class News_model extends CI_Model{
Function query($tableName)
{
$this->db->where('字段名','字段值');
$this->db->select('字段');
$query=?$this->db->get($tableName );
Return $query->result();
$this->db->insert($tableName,$data);
}
Function update ($tableName,$data)
{
$this->db->where('字段名','字段值');
$this->db->update($tableName,$data);
}
Function delete($tableName){
$this->db->where('字段名','字段值');
$this->db->delete($tableName);
}
}
在模型里定义的方法(过程)可以在控制器里直接调用。我们把控制器作如下修改,以调用数据库。
Class News extends CI_Controller{
function__construct()
{
$this->load->model(‘News_model’);
}
Public function index()
{
$data[‘title’] = ‘Welcome to My News Site.’;
$data[‘sitename’] = ‘My News Site’;
$data = $this->model->query(‘article’);
$this->load->view(‘index_view’,$data);
}
}
?>
这里我们在初始化控制器类的时候装载了模型,CI还可以自动载入模型。方法是打开application/config文件夹下的autoload.php文件,找到并设置$autoload['model'] = array(‘News_model‘)。
需要说明的是,自动加载和手动载入模型对内存的消耗是一样的。除非非常必要,一般尽量不要自动加载模型。当然,对于贯穿整个项目的模型自动加载会省却很多的书写代码。
由于调用了数据库,视图文件index_view.php也要做相应的修改,请注意对数据库部分的显示:
新闻列表
foreach($data[‘news’] as $rows){
echo ‘’ . $rows[‘title’] . ‘’ ;
endforeach;
}
?>
var _gaq = _gaq || [];_gaq.push(['_setAccount', 'UA-22575914-1']);_gaq.push(['_setDomainName', '']);_gaq.push(['_trackPageview']);(function () {var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'www') + '/ga.js';var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);})();var _userid = '';var _siteid =708;var _istoken = 1;var _model = 'Model03'; WebPageSpeed =578; UrchinTrack();
接下来还需编写文章列表页和内容页的代码,它们与首页视图文件index_view.php相似。当然一个新闻系统所需要的完整功能还有很多,比如用户和用户权限功能等等,欢迎读者与笔者联系,一起探讨使用CI过程中遇到的各种问题,共同提高运用CI框架开发CMS系统的水平。
4 结论
本文简单介绍了利用一个轻量级PHP框架CI开发常见CMS系统——简单新闻系统的开发过程,用CI框架进行更为复杂的CMS系统开发原理是一样的,总之,CI的确是一个优秀的PHP网站系统开发框架。
参考文献
[1]CodeIgniter官方网站.网址:http://.
[2]CodeIgniter中文站.网址:http://.cn.