好吧,其实也没有什么可介绍的,这是我在用模板写程序的时候,扩展出的一个框架
非要来点高大上的介绍?
好吧,音乐走起(装比模式开启)
lovefc框架是一个非常简单的框架,它的主要组成其实就几个类文件
另外我要说明的是,这个框架其实就是对lovefc模板的扩展,
核心文件就是lovefc.class.php
如果你厌烦了大型框架,如thinkphp
不妨使用它来开发一些项目吧
它的优点:
我一时不知从何说起
讲个最简单的吧
用过thinkphp的都知道
tp里面有个生成url的函数U函数
在模板中是这样使用的
{:U(index)}
实际上会编译成
<?php echo U('index');?>
每次都会执行一遍这个函数生成url
在lovefc框架中
生成地址的模板代码是
{(app::url(action=index))}
实际上会编译成
<?php echo app::url('action=index');?>
每次都会执行一遍这个函数生成url
???你TM在逗我?
这不是一样的吗?
确实是一样的
但谁让我有创意啊
实际上框架当中自带了一个生成地址的ubb
在模板中写
{([url(action=index)])}
没错,它跟{(app::url(action=index))}的效果是一样一样的
等等,既然都一样,这个功能有个卵用?简直浪费人的感情嘛。
好吧,其实一开始,我是拒绝的,是不要求加特技的
这个ubb的强大之处在于
它会直接在模板编译后的代码中生成url
而不会生成php代码了
是不是听晕了?
没关系,下面让你们更晕一点
在模板中写
{([url(action=index)])}
会直接编译成
./?action/index
不需要再执行php代码的时候
用app::url()这个函数去生成了
也就是省了一步
当然还有效率
模板中的链接最少也要有10个或者更多吧
如果按照常规的做法
就要执行十几遍app::url()函数
当用这个ubb后,也就不用执行了
它会一次性的将地址全都生成在编译文件中
当然这个生成地址的url是可以这样写的
{($app=1)}
{( [url(action=index&id= {($app)}) ] )}
实际上不要打空格的,我这是方便你们看,谁让我是好人昵?
这段模板代码你们可以自己写在模板代码中测试看看结果
以上就是我的全部讲话,如果大家有什么不懂的话,还可以问我,这次的养猪专业知识讲座到这里,还没结束昵
下面讲讲怎么在控制器和视图的结合使用,视图是啥?其实就是模板文件
lovefc框架中,工作目录里必须要定义了一个控制器的文件夹 controller
可能大家看demo工作目录的时候已经发现了controller目录下还有个demo子文件夹
里面还有两个类文件,一个叫做index_contro.class.php,一个叫做index_opera.class.php
这里是很重要的部分,不理解它,你也没办法使用这个框架了,请各位同学认真一点,必须要严肃一点,
所以先把脚从我脸上拿开可好?
大家打开工作目录里的配置文件
demo/config/config.php
会看到
//版本设置,键名为版本号,键值为版本的模板子目录名
'EDITION'=>array(
1=>'demo',
),
这是干什么用的昵?这是切换版本用的
EDITION这个数组里面的键名就是版本号
1=>demo
这个demo就是view/demo/
代表访问的模板文件目录
举个栗子给你看
访问
./?action=index&vs=1
其实就是访问
view/demo/index.tpl
这个模板文件
加入你把配置文件改成
'EDITION'=>array(
1=>'demo2',
),
那么
./?action=index&vs=1
就是访问
view/demo2/index.tpl
当然配置里还有一个
'VS'=>1,
//定义访问初始版本
这个就看你喜欢随便填了,当然必须要有这个版本号
这个功能适合我们做版本切换的,比如wap和web版本
你可以这样设置
'EDITION'=>array(
1=>'wap',2=>'web',
),
这样在view/wap放wap模板文件
在view/web放web模板文件
controller目录下还有个demo子文件夹,其实这个demo文件夹的名称和版本号里的应该是一样的
里面有两个类文件
index_contro.class.php,一个叫做index_opera.class.php
index_contro.class.php是读取数据,然后赋值到模板的类
里面的方法代表的就是模板文件的名称
就比如
<?php
class index_contro{
public function index(){
$head='登录页面';
return $head;
}
}
这就是定义index方法,这里注意了它返回的值会自动赋值到模板变量里。自动哦,,,这里是特效
在模板变量中,他们返回的值都用
@index表示(这里一定要注意了)
如果返回的是一个数组,
@index就是一个数组这个方法定义好了
大家可以到
view/demo/index.tpl中输出一下这个值
直接在里面写模板代码
{(
@index)}
然后访问运行一下就可以看到结果了
我写的demo示例里不是有个user方法吗?它就会把值传到view/demo/user.tpl里去
index_opera.class.php是干什么的?其实它是一个操作类,注意这里面的方法名你就可以随便定义了
对,想怎么定义就这么定义,它的访问url是./?d=方法名,当然前面也能加上模板名称的
就比如
./?action=模板名&d=要操作的方法名&vs=版本号
讲了这么多,感觉大家已经是很晕头转向了
我来举个简单的栗子(其实demo里也有个例子)
来,跟我左手右手一个慢动作
首先在
index_opera.class.php
定义一个方法名
<?php
class index_opera{
public function demo(){
$get=INPUT($_GET['id']);
//这个INPUT方法是框架自带的,就是自动转义变量,如果你传入的是$_GET,则会对这个数组里的所有值进行转义
return $get;//返回它,对,就这样,现在它就能在模板里使用了
}
}
然后我们在
view/demo目录下建立一个模板文件demo.html
里面写上模板代码,如下
测试结果:
{(if
@app==1)}
id等于1
{(/if)}
然后保存
好了,下面就是见证奇迹的时刻了
访问 项目/?action=demo&d=demo&id=1
看看输出结果
访问 项目/?action=demo 在试试
综合以上结论,现在你们知道这个类可以干什么了吧.对,就是执行操作的,并且会把操作结果赋值给
@app,然后在模板里使用
其实操作d方法后,在任何模板里都能取到它返回的值,关键在于你有没有
@app这个值的输出和判断下面做一下相关的延伸
假如我在
view/demo这个文件下又定义了一个文件夹
就比如
view/demo/admin
这个目录
下面也有好多模板文件
我该怎么访问这个目录下的模板的文件昵?
so easy!
访问的地址就是
./?文件夹名&action=模板名称
对,就是这样子的
就比如你要访问
view/demo/admin/index.tpl
输入这样的地址就行了
./?admin&action=index
当然了这里要注意的是
action默认的是index
你可以不带这个值的,完全可以滴
在子文件夹里也可以使用的控制器的
你就要在
controller/demo下新建一个读取类了
文件夹名_contor.class.php
这样就可以了
它的方法名返回的结果就赋值给了view/demo/文件夹名/模板文件名称 这个模板文件
好了,讲了这么多,口也渴了,容我先喝几碗热翔簌簌口
接下来讲啥昵,嗯,这位同学说的对,就是数据库操作。
loevfc框架的数据库操作是函数封装的
数据库的配置在demo/config/config.php这个文件里
'DB_HOST'=>'localhost',
//主机地址
'DB_NAME'=>'lovefc',
//数据库名
'DB_USER'=>'root',
//数据库用户名
'DB_PASS'=>'12345',
//数据库用户密码
'DB_AR'=>true,
//长链接
'DB_BM'=>'utf8',
//数据库编码
'DB_FILE'=>APP_PATH.'/config/shjkqnj78777777774.db',
//sqlite数据库存放路径,目录必须要存在
'DB_TYPE'=>'sqlite',
//数据库类型,用那种数据库就填那种数据库,一共就两种
这一大坨东西就是数据库配置了,目前框架就支持两种数据库mysql和sqlite
写程序当然要建表,你不用在导入,导出了
框架里弄了个自动安装
就在install文件夹了
你在里面写建表sql语句
一行分割一下就行了
不懂的看demo
里面有四个文件
mysql.php
这里面写的是mysql的建表语句
sqlite.php
这里面是sqlite的建表语句
drop.sql
安装前要删除的数据表,删除语句
insert.sql
添加数据的sql语句
这样全都写好了
打开任何页面的时候都会执行安装的
重新安装需要删除
install里面的index,html文件
实际上你可以打开
lovefc/core/install.calss.php这里面看看
安装页面弄好了,是不是挺傻瓜的?
下面我要读取一个数据了
$user=config::fetch('lovefc_user','where uid=?',array(1));
对,就是这样执行
有两个方法
config::fetch()
config::fetchall()
他们的参数都是一样的
唯一不同的是
fetch只会返回一条数据
fetchall返回所有查询的数据
使用如下
config::fetch('表名','查询的语句’,'预处理传入的数组','要读取的字段名,多个字段用,链接','要获取的数据类型')
简单实用
config::fetch('lovefc_user','where uid=1’)
config::fetch('lovefc_user','where uid=1’,null,'name')
注意了,这里还有个小惊喜,如果你只查询了一个字段,将直接返回它的值,不在是一个数组了,不知道你们有没有听懂
关联查询
config::fetchall('lovefc','LEFT JOIN lovefc2
ON lovefc.id = lovefc2.id where lovefc.status=?',array(2));
如果你使用预处理的话就要多加一个参数了,第三个值必须要是数组
不懂预处理的当我没说
config::fetch('lovefc_user','where uid=?’,array(1))
其他的数据库操作要简单一点
config::add('数据库表名’,'数组');
这个是添加数据的函数
只有两个参数
第二个参数必须是一个数组,键名为字段,键值为要写入的值
举个例子
$data=array('name'=>'封尘','pwd'=>'12345');
config::add('lovefc_user',$data);
config::dele(’数据库表名','查询语句')
这是删除操作,当然这是支持预处理操作的
config::dele(’lovefc_user','where id=?',array(1))
config::update($table,$data,$where)
* $table 表名
* $data 数组键名代表字段名,键值表示要更新的值
* $where代表更新的条件值
* 附加参数 可随意定义参数名,参数值为where中?指定的参数,此值应为一个数组
嗯,这就是更新操作了
当然还有更多,我没讲完,相信大家看了这么多,已经没啥耐心了
如果你觉得我这个比装的还可以,这个框架还能用,
不妨加qq群103214560
一起来研究讨论吧!
下载链接
http://pan.baidu.com/s/1bwiBuu
正在开启装逼模式 请稍后... ━━━━━━━━━━━━━ ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉99.9% ━━━━━━━━━━━━━
正在加载牛逼模式..............
出现错误,系统已崩溃。
正在返回逗逼模式…………
逗逼模式已爆满
正在尝试连接2b模式
arte…arte…arte…arte…
对不起,你已处于2b模式的黑名单,
2b模式拒绝你的进入
正在进入傻逼模式
恭喜你进入成功!