主页 > PHP | WEB开发 > stblog学习笔记1

stblog学习笔记1

2010 年 12 月 01 日 没有评论

最近在学习CI 的开源产品StBlog,初次学习感觉这个产品写的很不错 对于我这样子的一个CI 新手来说是一个很不错的学习机会。在大致的理解了一下整个的博客系统的架构之后,感觉这个里面有好多东西都是我在之前一段时间里面学习CI没有接触到的东西,就比如说自定义模版的路径,这样子以来 使得整个网站有了一个新的功能 那就是可以选择主题和皮肤了!主要的实现过程就是自己在项目的类库文件夹中首先扩展Loader.php文件(class MY_Loader extends CI_Loader),然后在这个类里面定义两个方法(一个是项目的前台的重写路径,一个是后台的重写路径,后台的路径可以说不变还是原来的那个),该方法的功能是用来重写视图的路径的,详见代码:

 public function __construct() 
    {
        parent::CI_Loader();
    }

	 /**
	 * 打开皮肤功能
	 * 
	 * @access public
	 * @return void
	 */ 
    public function switch_theme_on()
    {
    	$this->_ci_view_path = FCPATH . ST_THEMES_DIR . DIRECTORY_SEPARATOR . $this->theme . DIRECTORY_SEPARATOR;
    }

	 /**
	 * 关闭皮肤功能
	 * 
	 * @access public
	 * @return void
	 */ 
    public function switch_theme_off()
    {
    	//just do nothing
    }

接着我们要扩展系统的控制器类(class QT_Controller extends Controller和class HT_Controller extends Controller),然后继承系统的控制器类,在这个类文件中实际上是有两个类的 一个是前台的(QT_Controller),只要是控制前台要操作的一些操作的,然后在之后的写前台的操作代码是只要继承这个类(QT_Controller)就可以了,别忘了在这个类中写上

/** 前台页面均使用主题皮肤功能 */
	    $this->load->switch_theme_on();

功能是开启主题皮肤功能我们很多的加载什么类啊 辅助函数啊等都可以在这个前台主控制器里面加载。再来说后台(HT_Controller)其实是跟前台一样的功能的,只不过不同的是使用了

 /** 后台管理页面,不使用皮肤 */
	    $this->load->switch_theme_off();

不开启主题皮肤功能,如果要开启的只要写成

/** 前台页面均使用主题皮肤功能 */
	    $this->load->switch_theme_on();

就OK了,这样子就描述完了实现前后台主题皮肤的功能!
接下来研究了主要的前台模型的类文件,感觉自己还是很有相当大的差距的,人家写的就是不一样。首先为了避免出现直接的数据库的数据表名,我们可以在模型文件类里面用const来定义表常量,就是把表名赋值给一个自定义的常量,之后在条用表名的时候用这个常量就可以了!其次也许是为了方便检查错误把,在初始化函数里面使用

log_message('debug', "STBLOG: Posts Model Class Initialized");

这样子通过查看日志文件就可以知道这个类已经被加载了。
看到stblog整个模型文件里面函数时,感到都有一个特征 而且我感到这样子蛮好的,就是先把所有各种各样带条件查询相关的函数写在一块,然后把所有的CURD的操作写在一块,这样子感觉整个模型文件蛮清晰的!要找一个函数能够快速找到!
再来说说单个函数的写法,其实要是我自己写的话,也无非就是整理查询条件等东西:首先,所有的查询方法中都有默认的参数项,在生成条件($this->db->where(XXXX))之前我们可以先判断这个参数值的一些情况如:是否为空 是否是数字类型的等等情况,然后在生成条件语句,再者我们可以用链式的写法如:

$this->db->select('uid')->from(self::TBL_USERS)->where($key, $value);

,在这之后我们还可以不断的写我们需要的各种条件语句 如order_By啊等,在这之后我们只要用

$this->db->select('uid')->from(self::TBL_USERS)->where($key, $value);

l来返回结果集或者:

$this->db->get(self::TBL_USERS)->row();

l来返回第一行数据,或者

$this->db->get(self::TBL_USERS)->num_rows();

l返回结果数据的数目等等
因为stblog在他的autoload.php文件中默认加载了一些类和辅助函数!因此在整个项目的书写时只要随时拿来用就可以了!
此外 要注意的是有个函数叫做setting_item()的,这个函数的作用是用来获取数据表setting的一些值的,一次获取一个指定name的值,这个函数定义在library的common.php文件中,虽然这个是个类,但是setting_item()函数是定义在类之外的,也就相当于我们一般的辅助函数之类的用法,这个函数用到了stblog自定义的缓存类stcache.php文件,这个文件里面的东西看起来很简单,这个文件中使用文件的辅助函数(file),只要利用文件辅助函数来将数据写入文件实现数据的定时缓存的!
stblog的url都是使用路由来实现的,一开始我也纳闷了半天,后天突然想到可能是设置了路由,打开routes.php一看 果不其然,里面设置了很多的路由规则!看的时候一定要注意哦!
一般情况下我们从网上下载下来CI系统,所有的东西都是放在system文件夹中的,而我们只要开发的目录是在application目录中,其实我个人也不是很喜欢这个样子的目录结果,我实现类似于TP那样子的,把我们要开发的项目目录文件夹APP放在框架同级目录 ,而不是在框架目录里面,其实在CI中要做到这点很简单的,只要把整个application文件剪切出来放在与system文件夹同级目录就行了,并不需要修改任何地方!这样子就实现了类似TP那样子的外围目录效果了!在CI中我们一般的如js啊css啊图片啊等都是在与system文件夹同级目录的目录上建立一个或者几个文件夹来存放相应的东西的!我们的上传文件的目录也是定义在这个地方,当然这个目录是自己定义的,可以放在自己想要的任意位置!我们甚至可以将我们的模版目录定义到入口文件的地方,定义的方法上面已经讲过了!不过要记住的一点就是所有的目录都是相对于index.php文件的,为什么呢?因为stblog是采用单一入口流程来运行的!

Tags: CI StBlog

发表评论

电子邮件地址不会被公开。 必填项已用*标注


*

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>