军哥谈CI框架之JQuery实现全国城市级联菜单的应用

来源:互联网 发布:js实现图片3d自动旋转 编辑:程序博客网 时间:2024/05/01 15:19
当一丝丝秋风吹过,便带来了秋的消息。它展开笑颜,轻轻地拂去夏日的烦躁,而秋的夜晚,军哥不再寂寞,只因一切有你们做伴……

好了,不抒情了,免得有淫鸡皮疙瘩一身,那就要不得了~~哈哈哈


这一回啊,军哥要讲一讲如何在CI框架中实现基于JQuery的全国城市级联菜单应用。城市级联菜单效果如何在框架中去实现,这个军哥相信有不少朋友非常关心。之前有用高老师的Brophp框架做过一次,军哥也一并贴出来以供大家下载brophp中实现城市级联菜单 brophp_area_demo.rar


一、先来说一下思路吧。

1、先准备好地区数据表(全国这么多的城市、乡镇是不会无缘无故的跑出来滴)。
area表结构如下:
  1. `id` mediumint(8) unsigned NOT NULL auto_increment PRIMARY KEY, #地区ID
  2. `name` char(255) NOT NULL, #地区名称
  3. `level` tinyint(4) unsigned NOT NULL default '0' COMMENT '级别', #地区级别
  4. `upid` mediumint(8) unsigned NOT NULL default '0' COMMENT '从属于', #所属父地区
  5. `list` smallint(6) NOT NULL default '0' COMMENT '排序' #地区排序



当然,有了这样的表结构之后,那么多的数据不可能一一手工去创建,关键也没这个必要,军哥也准备了sql文件帮助大家快速建表。详见ci_city.sql文件。示例代码CI_city.rar

2、写操作area数据表的Model
3、写控制器
4、写视图
5、JQueryAjax

以上只是一个大概的写代码顺序,实际中肯定是相互之间交错进行开发的。


二、接下来,进入到军哥有图有真相的环节啦,相信已经有淫迫不及待了吧,嘻嘻~~看图

1、初始化页面效果图:

2、点击某一省份效果图:

3、点击某一城市/地区效果图:
4、点击某一县市效果图(包括有乡镇的县市和无乡镇的县市):

三、图看完了,接着上一些干货啦,这次还有比较详细的注释哟~~


1、模型(即Model源码在 application/models文件夹)
  1. if (!defined('BASEPATH'))
  2. exit('No direct script access allowed');
  3. /**
  4. * @author JayJun
  5. * @copyright 2012.09.05
  6. */
  7. class M_area extends CI_Model {
  8. //获取省份、城市/地区、县市及乡镇信息
  9. function get($type,$upid = 0) {
  10. $data = '';
  11. switch ($type) {
  12. //查询所有省份
  13. case 'province':
  14. $this->db->select('id,name,level,upid,list');
  15. $data = $this->db->get_where('area',array('upid'=>0));
  16. break;
  17. //查询某一省份下的所有城市/城区
  18. //或查询某一城市/城区下的所有县市
  19. //或查询某一县市下的所有乡镇
  20. case 'city':
  21. $this->db->select('id,name,level,upid,list');
  22. $data = $this->db->get_where('area',array('upid'=>$upid));
  23. break;
  24. }
  25. return $data;
  26. }
  27. }


2、控制器(源码在 application/controllers文件夹)
  1. if (!defined('BASEPATH'))
  2. exit('No direct script access allowed');
  3. /**
  4. * @author JayJun
  5. * @copyright 2012.09.05
  6. */
  7. class area extends CI_Controller {
  8. // 初始化
  9. function __construct() {
  10. parent::__construct();
  11. //配置文件获取应用根目录
  12. $this->base_url = $this->config->item("base_url");
  13. //加载地区表Model
  14. $this->load->model('M_area');
  15. }
  16. //显示城市选择下拉框页
  17. function index() {
  18. $data['base_url'] = $this->base_url;
  19. //获取所有的省份信息,省份的upid均为0,此时可以不写第二个参数,默认为0
  20. $data['province'] = $this->M_area->get('province');
  21. //获取北京所有的城市/地区信息,以便于初始化载入这些信息,北京的ID值为1
  22. $data['beijing'] = $this->M_area->get('city',1);
  23. $this->load->view("area_index",$data);
  24. }
  25. //获取ajax提交upid值产生的option
  26. function select() {
  27. //获取get方式提交来的upid
  28. $upid = $this->input->get('upid');
  29. if ($upid != '')
  30. {
  31. $data['city'] = $this->M_area->get('city',$upid);
  32. $this->load->view("area_select",$data);
  33. }
  34. }
  35. }


3、视图(源码在 application/views文件夹
area_index.php文件:
  1. !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
  5. <title>在CI框架中,JQuery实现全国城市级联菜单效果的例子</title>
  6. <link rel="stylesheet" href="<?php echo $base_url; ?>/public/css/base.css" type="text/css" />
  7. <link rel="stylesheet" href="<?php echo $base_url; ?>/bootstrap/css/bootstrap.min.css" type="text/css" />
  8. <script type="text/javascript" src="<?php echo $base_url; ?>/public/scripts/jquery-1.7.1.min.js"></script>
  9. </head>
  10. <body>
  11. <table class="table table-bordered mt50 bc">
  12. <tr>
  13. <td width="10%" class="fb f18">所在地区:</td>
  14. <td>
  15. <!-- 省份下拉框开始 -->
  16. <select name="pid">
  17. <?php
  18. foreach ($province->result() as $item):
  19. ?>
  20. <option value="<?php echo $item->id; ?>"><?php echo $item->name; ?></option>
  21. <?php
  22. endforeach;
  23. ?>
  24. </select>
  25. <!-- 省份下拉框结束 -->
  26. <!-- 城市/地区下拉框开始 -->
  27. <select name="cid">
  28. <option value=''>请选择</option>
  29. <?php
  30. foreach ($beijing->result() as $item):
  31. ?>
  32. <option value="<?php echo $item->id; ?>"><?php echo $item->name; ?></option>
  33. <?php
  34. endforeach;
  35. ?>
  36. </select>
  37. <!-- 城市/地区下拉框结束 -->
  38. <!-- 县市下拉框开始 -->
  39. <select name="xid">
  40. <option value=''>请选择</option>
  41. </select>
  42. <!-- 县市下拉框结束 -->
  43. <!-- 乡镇下拉框开始 -->
  44. <select name="tid">
  45. <option value=''>请选择</option>
  46. </select>
  47. <!-- 乡镇下拉框结束 -->
  48. </td>
  49. </tr>
  50. </table>
  51. </body>
  52. </html>

area_select.php文件:
  1. if($city->result()) {
  2. foreach ($city->result() as $item):
  3. echo "<option value='".$item->id."'>".$item->name."</option>";
  4. endforeach;
  5. }

4、JQuery(写在area_index.php文件中):
  1. <script type="text/javascript">
  2. $(function(){
  3. //默认隐藏县市和乡镇下拉框
  4. $("select[name='xid']").hide();
  5. $("select[name='tid']").hide();
  6. //选择省份触发事件
  7. $("select[name='pid']").change(function(){
  8. //通过远程 HTTP GET 请求载入信息
  9. $.get("<?php echo site_url('area/select'); ?>",{ upid:this.value },function(data){
  10. //再次隐藏县市和乡镇下拉框
  11. $("select[name='xid']").hide();
  12. $("select[name='tid']").hide();
  13. $("select[name='cid'] option:gt(0)").remove();//清除城市/地区下拉框的除第一个option之外的所有子元素
  14. //设定所选择省份下的城市/地区下拉框option值
  15. $("select[name='cid']").append(data);
  16. });
  17. });
  18. //选择城市/城区触发事件
  19. $("select[name='cid']").change(function(){
  20. //通过远程 HTTP GET 请求载入信息
  21. $.get("<?php echo site_url('area/select'); ?>",{upid:this.value},function(data){
  22. //判断是否点击了城市/城区下的"请选择"
  23. if (data){
  24. $("select[name='xid']").show();//显示县市下拉框
  25. $("select[name='xid'] option:gt(0)").remove();//清除县市下拉框的除第一个option之外的所有子元素
  26. //设定所选择城市/地区下的县市下拉框option值
  27. $("select[name='xid']").append(data);
  28. }else{ //若点击则隐藏县市和乡镇下拉框
  29. $("select[name='xid']").hide();
  30. $("select[name='tid']").hide();
  31. }
  32. });
  33. });
  34. //选择县市触发事件
  35. $("select[name='xid']").change(function(){
  36. //通过远程 HTTP GET 请求载入信息
  37. $.get("<?php echo site_url('area/select'); ?>",{upid:this.value},function(data){
  38. //判断是否存在乡镇数据,若存在则显示
  39. //同时判断是否点击了县市下的"请选择"
  40. if (data){
  41. $("select[name='tid']").show();//显示乡镇下拉框
  42. $("select[name='tid'] option:gt(0)").remove();//清除乡镇下拉框的除第一个option之外的所有子元素
  43. //设定所选择县市下的乡镇下拉框option值
  44. $("select[name='tid']").append(data);
  45. }else{ //若点击则隐藏乡镇下拉框
  46. $("select[name='tid']").hide();
  47. }
  48. });
  49. });
  50. })
  51. </script>



好了,不知道你学会没有,至少实现思路有了吧,另外,军哥相信没有代码100%不存在Bug的,所以如果你发现Bug,欢迎不吝赐教~~

嘿嘿,当然军哥在写的时候,其实已经将一些重大的Bug做了修补,比方说用户当点击某一城市地区之后,又点击了它的“请选择”之后出现的问题,还有就是当用户点击县市下拉框的时候,有的县市是有乡镇数据,而有的却没有乡镇数据等情况,军哥都做了妥善的处理~~


四、应用
(1)、先下载附件,解压之后,拷贝到网站根目录下;
(2)、找到文件ci_city.sql,建库建表;
(3)、修改配置文件CI_city/application/config/database.php,只需设置$db['default']['password'] ='你的数据库密码'; ,大概第10
(4)、浏览器输入http://localhost/CI_city/ 即可访问。


示例代码CI_city.rar

原文地址:http://bbs.lampbrother.net/read-htm-tid-131944.html

阅读(100) | 评论(0) | 转发(0) |
0

上一篇:第一个项目感想

下一篇:那些年!在兄弟连的时光...

相关热门文章
  • 安顺瑞立房地产开发有限公司...
  • 上海律师事务所   第节 非...
  • 8500WN12核顶配 极速稳定上网...
  • 8500WN智能网卡曝光 强悍配置...
  • 西洋参
  • IP Sec VPN与NAT破镜重圆
  • 网站导航
  • GoAgent图文设置教程
  • UT2.0正式版下载
  • tomcat6.0配置(含配置视频下载...
  • 大家都是用什么来管理hadoop集...
  • 网站被人挂了吗,添加了些程序...
  • Nginx如何保证不走宕机的那个...
  • 大家谈谈MYSQL客户端和服务器...
  • 以下代码运行后为何会输出5?...
给主人留下些什么吧!~~
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 微信忘记收款了怎么办 线雕隆鼻顶线怎么办 苹果7触屏不灵怎么办 苹果5s键盘太小怎么办 苹果5s按键失灵怎么办 苹果7突然没触摸怎么办 苹果屏幕ic坏了怎么办 苹果6手机触摸屏失灵怎么办 苹果5s屏幕黑了怎么办 乐视手机充电慢怎么办 苹果5s触摸屏失灵怎么办 苹果6出现闪屏怎么办 苹果4s没有卡槽怎么办 苹果se触屏失灵怎么办 苹果6s屏幕乱跳怎么办 6s屏幕触摸失灵怎么办 苹果6sp屏幕失灵怎么办 苹果6s屏幕不动怎么办 苹果6s卡住了怎么办 苹果6s经常卡屏怎么办 苹果6s点不动了怎么办 手机屏自己乱点怎么办 苹果手机摔开了怎么办 苹果屏幕摔开了怎么办 苹果手机6开不了机怎么办 苹果6开不开机怎么办 苹果6s开不开机怎么办 苹果6手机开不了机怎么办 苹果6s不能开机怎么办 苹果6p无法开机怎么办 苹果6s开不了机怎么办 苹果7屏幕划不动怎么办 苹果6老是卡机怎么办 苹果手机黑屏开不了机怎么办 苹果6plus掉水里了怎么办 苹果6黑屏开不了机怎么办 苹果手机6死机了怎么办 苹果7手机死机怎么办啊 苹果7突然死机了怎么办 苹果手机5s死机怎么办 苹果六s死机了怎么办