原作者:[coolcheng168](http://www.dayrui.net/home.php?mod=space&uid=2686) chm整合-yufan Q:956932910 个人网站[http://www.phper.kuphp.net/](http://www.phper.kuphp.net/)
论坛推荐[http://bbs.lampym.com/index.php?c=thread&fid=12](http://bbs.lampym.com/index.php?c=thread&fid=12)
程序自带了一个万能List标签,写SQL的extend看起来晦涩难懂,很怪异。我改进了一下,独立了一个SQL标签,有需要的可以拿去。
先来一个例子:
{sql:rs table="fn_content_1" where="catid=$catid" pagesize="2" urlrule="catid=$catid"}
<li><span class="date">{date("Y-m-d", $t['updatetime'])}</span> <a href="{$t['url']}">{$t['title']}</a></li>
{/sql:rs}
其他的写法:
{sql:rs field="id,catid,title,thumb" table="fn_content_1" where="catid=$catid" pagesize="2" urlrull="catid=$catid"}
{sql:rs field="id,catid,title,thumb" table="fn_content_1" where="catid=$catid" pagesize="2" urlrull="catid=$catid"}
{sql:rs table="fn_content_1" where="catid=$catid" limit="1,10" urlrull="catid=$catid"}
{sql:rs table="fn_content_1" where="catid=$catid" limit="1,10" order="id desc" urlrull="catid=$catid"}
多表链接:
{sql:rs table="fn_content_1" join="fn_comment on fn_content_1.id=fn_comment.contentid" where="catid=$catid" limit="1,10" urlrull="catid=$catid"}
也可以多层嵌套,嵌套的时候别忘记将sql:rs中rs替换成其他的变量,加入pagesize这个就可以实现分页,分页输出为{$pagelist}和官方的一致。
更多的就不举例了,等待大家去发现吧。是不是比官方的牛逼啊。呵呵,实现起来并不困难。要实现这样将会替换掉原有的官方SQL标签,官方的SQL标签如下:
{sql:模型名称 执行方法}
格式:{sql:user where("pid=1")->order("uid asc")->select();}
返回:$return数组
替换后这个标签就没用了。如果要保留这个标签的话,就在下面的正则里修改一下就好了。
现在开始,首先修改handle_view_file函数:
找到:
'#'.$this->left_delimiter.'sql:([a-z_0-9]+)\s+(.+?)'.$this->right_delimiter.'#is',
替换成
'#'.$this->left_delimiter.'sql:([a-z_0-9]+)\s+(.+?)'.$this->right_delimiter.'#is',
'#'.$this->left_delimiter.'\s?\/sql:[a-z_0-9]+\s?'.$this->right_delimiter.'#i',
找到:
"<?php \$sql_model = \$this->load_model('\\1');\$return = \$sql_model->\\2; ?>",
替换成
"<?php \$return_\\1 = \$this->_sqldata('\\1','\\2'); extract(\$return_\\1); \$count_\\1=count(\$return_\\1); if (is_array(\$\\1)) { foreach (\$\\1 as \$key=>\$t) { ?>",
"<?php } } ?>",
下面新添加一个函数来实现:
protected function _sqldata($r,$param){
//将变量替换成相应的值
$match = array();
preg_match_all('/\$([a-z_0-9]+)\s?/i', $param, $match);
foreach($match[1] as $key => $value) {
if(isset($GLOBALS[$value])) {
$param = str_replace($match[0][$key], $GLOBALS[$value], $param);
}
}
//将变量赋值到system数组中
$system=array();
preg_match_all("/([a-z]+)\=[\"]?([^\"]+)[\"]?/i", stripslashes($param), $matches, PREG_SET_ORDER);
$arr = array('field','table','join', 'where','order','limit','pagesize','urlrule');
foreach ($matches as $v) {
if(in_array($v[1], $arr)) {
$system[$v[1]] = $v[2];
continue;
}
}
$dbparams = Controller::load_config('database');
$db = mysql::getInstance($dbparams);
if (isset($system['field']) && $system['field']){
$field = ' ' . $system['field'] . ' ';
}else{
$field = ' * ';
}
if (isset($system['table']) && $system['table']){
$table = ' FROM ' . $system['table'] . ' ';
}else{
$table = ' FROM ' . $dbparams['prefix'] . 'content_' . App::get_site_id();
}
if (isset($system['join']) && $system['join']){
$join = ' LEFT JOIN ' . $system['join'] . ' ';
}
if (isset($system['where']) && $system['where']){
$where = ' WHERE ' . $system['where'] . ' ';
}
if (isset($system['order']) && $system['order']){
$order = ' ORDER BY ' . $system['order'] . ' ';
}
if (isset($system['limit']) && $system['limit']){
$limit = ' LIMIT ' . $system['limit'];
}
if (isset($system['pagesize']) && $system['pagesize']){
$pageurl = '';
$page = (int)$_GET['page'] ? (int)$_GET['page'] : 1;
if ($system['urlrule'] && preg_match('/catid=(\d+)/i',$system['urlrule'],$catid)) {
//获取栏目url,urlrule必须有catid字符
$cats = get_category_data(App::get_site_id());
$cat = $cats[$catid[1]];
$pageurl = getCaturl($cat, '{page}');
$pagesize = $system['pagesize'] ? $system['pagesize'] : 10;
}
elseif($system['urlrule']){
$pageurl = str_replace(array('_page_', ''), '{page}', $system['urlrule']);
$pagesize = $system['pagesize'] ? $system['pagesize'] : 10;
}
else{
$pagesize = $system['pagesize'] ? $system['pagesize'] : 10;
$pageurl = '{page}';
}
$sql = 'SELECT count(*) AS total' . $table . $join . $where;
$count = $db->fetch_row($sql);
$total = $count['total'];
$pagelist = Controller::instance('pagelist');
$pagelist->loadconfig();
$start_id = $pagesize * ($page - 1);
$limit = ' LIMIT ' . $start_id . ',' . $pagesize;
$pagelist = $pagelist->total($total)->url($pageurl)->num($pagesize)->page($page)->output();
}
$sql = 'SELECT' . $field . $table . $join . $where . $order . $limit;
//echo $sql;
//die();
$data = $db->get_array($sql);
//print_r($data);
unset($field,$table,$join,$where,$order);
return array('pagelist' => $pagelist, $r => $data, 'sql' => $sql, 'total' => isset($total) ? $total : count($data));
}
到此就完成了
- 添加
- 后台留言发邮件
- finecms v182升级
- finev1.8.0目录
- finecms-yufan简单教程
- 改后台版权,但是本人建议别改
- v1.8简单的文章评论
- 后台更换编辑器
- 开手机站
- 一键分享到qq空间微博等
- 上传主机后需要注意的地方
- FineCMS 模板设计指南,部分文件介绍
- 数据表部分介绍
- 在线客服
- 漂浮广告
- 免费主机推荐
- 免费主机的使用-菜鸟新手观看
- execl导入到mysql
- 弹出自己qq
- 新浪微博组件
- 文本框拉伸
- qq互联和其他组件
- cms推荐
- 文章标题省略号
- 网盘分享
- 推荐一些网站
- 后台
- 万能sql标签
- 网站多语言
- 文章循环
- 网站登陆框的设置
- 代言宝插件和分享插件以及客服系统
- 广告插件
- 购物方面
- 表单使用
- 全站栏目调用代码 用于网站地图
- 图片上传大小限制修改
- 文件上传限制
- 系统核心配置 SYS_DOMAIN说明
- 表单使用介绍
- 关于allow_url_fopen与curl扩展的开启
- 流行WEB服务器伪静态规则配置说明
- 系统配置文件介绍(config目录下)
- 会员模型及会员注册配置使用介绍
- 网站多语言配置方法
- 后台管理目录(admin)更改方法介绍
- 《友情链接》插件使用说明
- 一个虚拟主机创建N个站点
- 首页调用文章的阅读数和评论数的标签代码
- loop
- 留言插件使用
- 栏目调用2
- 调用当前栏目和指定栏目
- 分页使用
- 二级导航调用
- 房产
- 调用当前新闻之类的栏目
- 指定栏目下的子栏目调用
- 模版路径的标签
- 自定义字段之下拉菜单
- 首页调用单页内容
- 无限极栏目调用
- 投票
- 简单的mvc
- 给模型添加字段
- 留言内容发到邮箱
- 视频的添加
- 小白企业站教程