用户
 找回密码
 入住 CI 中国社区
搜索
查看: 18507|回复: 13
收起左侧

[中级] Ci 合理分开配置网站前台后台的方法

[复制链接]
发表于 2014-4-23 16:33:05 | 显示全部楼层 |阅读模式
本帖最后由 G1enn 于 2014-4-23 16:34 编辑

原文章链接:  http://klenn.blog.163.com/blog/static/234553167201432342313857/

CI 2.0 多目录(应用程序)配置。
       多目录的意思是指在同一个网站中有多套程序,最简单的例子就是网站的前台展示与后台管理。二者由于在网站功能中分属不同部分,通常会有不同的界面, 用到images/stylesheet/javavascript基本是分开的,所以设置不同目录。直观的例子来看,形如以下:
网站前台URL:http://klenn.blog.163.com 网站后台管理URL:http://klenn.blog.163.com/admin



       源码下载解压后文件结构如下图,默认是只有一个目录的。

      为了达成多目录共享一个CodeIgniter的目标,我们要完成以下步骤:
1、 在application目录下新建子目录admin,将上图中红框标注的5个文件夹复制到admin下。这五个文件夹的的作用简单描述一下,详细说明可参考CI官网:
admin/config:基本配置文件
autoload.php 可设置本目录程序默认加载哪些类库;
config.php 可设置仅限本目录程序的一些全局变量;
database.php 可设置仅限本目录程序的数据库连接(DSN)变量;
routes.php  可设置本目录程序的默认加载控制器。
admin/controllers:存放本目录控制器
admin/libraris:存放本目录CI类库
admin/models:存放本目录的模型文件,这个地方有必要解释一下,通常前台后台用到的数据表(table)是相同的,但是对数据表的基本 操作是不同的,现在的做法用来将各部分常用的数据模型操作写成function分别存放,当然也不排除两部分会有相同情况,如都可以自定义方法 get_all()用来读取当前模型(table)的所有数据。
admin/view:存放本目录的视图,可以理解为page。
2、设置入口文件。因为根目录下的index.php默认是去找applcation下的controllers下的控制器,为了读取 applcation/admin/controllers下的控制器,我们需要在网站根目录下新建admin文件,并将根目录下的index.php复 制至此,接下来编辑此index.php,找到:
$system_path = "system";   //改为 $system_path = "../system";$application_folder="application";  //改为 $application_folder = "../application/admin";另外此目录可能用到的css/js/images 文件夹 也可以放在新建的admin之下。
此时的程序目录结构如下:
至此,第一个目标已经实现,我把两个目录的默认控制器加载的视图分别做了一下修改,现在给大家展示下我们第一个目标的成果。
前台:

后台:



发表于 2014-4-24 10:25:56 | 显示全部楼层
我的做法比较简单,看下图

scr.jpg

data 存放全局设置,日志,缓存,配置文件settings.php是定义的常量,包括数据库,加密字符串
system 框架核心
admin 管理后台,里面就是application目录和index.php文件,index文件需要require settings.php,同时修改system目录位置。application里面的database.php用的settings里定义的常量,config.php里面的ecryption_key也可以用setting里的常量,还有log_path。这样更改数据库配置什么的,不需要一个个app里面去改了。
main 主站点,同上
passport 通行证
喜欢的话,静态目录可以单独出来,做个static域名

这样的话每个目录都可以单独解析一个域名,共用一个配置,共用日志,缓存目录。而且核心文件和配置文件都在可访问目录之外,安全性相对好。
比如我的,admin.abc.com解析到admin,www.abc.com到main, passport.abc.com解析到passport。

发表于 2014-5-12 23:14:51 | 显示全部楼层
wwwhx110com 发表于 2014-5-9 00:35
你这个方法很好,但是代码怎么实现,能共享一下吗

就是把每个app的application/config目录里常用的配置,都统一放到data/settings.php下,定义成常量,require到各个app/index.php中,每个index.php还需要修改system路径。
发表于 2017-7-24 18:06:14 | 显示全部楼层
我跟楼主一样的做法,但是在线上部署的时候没办法访问后台,前台可以, application 里面分了admin、home 里面的东西都一样,在本地是可以的,两个都能跑起来。就是线上不行。
 楼主| 发表于 2014-4-24 17:35:09 | 显示全部楼层
sunboat 发表于 2014-4-24 10:25
我的做法比较简单,看下图

多谢分享{:soso_e179:}
 楼主| 发表于 2014-4-28 17:44:56 | 显示全部楼层
{:soso_e116:}
发表于 2014-5-9 00:35:37 | 显示全部楼层
sunboat 发表于 2014-4-24 10:25
我的做法比较简单,看下图

你这个方法很好,但是代码怎么实现,能共享一下吗
发表于 2014-5-9 16:42:32 | 显示全部楼层
楼主介绍的方法不错!
发表于 2014-5-13 11:13:10 | 显示全部楼层
我的做法也是定义一个assets。

解决多应用共享资源问题
http://codeigniter.org.cn/forums ... 6&fromuid=19458

发表于 2015-7-9 18:09:57 | 显示全部楼层
感觉搞复杂了吧。
发表于 2016-1-20 14:53:20 | 显示全部楼层
图片都不能看 - -

本版积分规则