`
kirenenko04
  • 浏览: 152119 次
  • 性别: Icon_minigender_2
  • 来自: 上海
社区版块
存档分类
最新评论

一个门店省市店名三级联动

 
阅读更多

首先看一下三个按钮,

是用UL LI标签 展示,并且用一个隐藏的元素进行记录:

<div class="store_select">
	<?php $provinces = $this->getAllProvince();?>
	<?php echo $this->__('请前往')?>
	
		
		<ul name="store_province_ul" id="store_province_ul" class="store_province_ul">
			<li><span class="span_store_province" select_value=""><?php echo $this->__('请选择省');?></span></li>
			<?php foreach ($provinces as $row):?>
			<li value="<?php echo $row['province']?>"><span class="span_store_province" select_value="<?php echo $row['province']?>"><?php echo $row['province']?></span></li>
			<?php endforeach;?>
		</ul>
		<input type="hidden" value="" id="store_province" name="store_province" />
		
		<img id="load_city_ajax" src="<?php echo $this->getSkinUrl('images/ajax-loader.gif');?>" />
		
		<ul name="store_city_ul" id="store_city_ul" class="store_city_ul">
			<li><span class="span_store_city" select_value=""><?php echo $this->__('请选择市');?></span></li>
		</ul>
		<input type="hidden" value="" name="store_city" id="store_city" />
		
		<img id="load_title_ajax" src="<?php echo $this->getSkinUrl('images/ajax-loader.gif');?>" />
		
		<ul name="store_title_ul" id="store_title_ul" class="store_title_ul">
			<li><span class="span_store_title" select_value=""><?php echo $this->__('请选择门店')?></span></li>
		</ul>
		<input type="hidden" value="" name="store_title" id="store_title" />
		
	<?php echo $this->__('门店选购')?>
	<!--  <a href="#tip" id="fancy-option" style="display:none"></a> -->
	<span class="send_mobile"><a id="send_mo_btn" href="#send_add_mobile"><?php echo $this->__('地址发送到手机');?></a></span>
	<span class="view_store"><a href="<?php echo $this->getUrl().'store-locator-list';?>"><?php echo $this->__('查看门店地图');?></a></span>
	</div>

 2.然后看下JS,逻辑是这样的

我们要进行选择的是三个UL LI 下的元素。

为了模拟SELECT 效果,其逻辑略复杂,具体看代码

<script type="text/javascript">
/* storelocator/getstorelocator/getCityByProvince' */
(function($){	

	$('#load_city_ajax').hide();
	$('#load_title_ajax').hide();
	//将所有有值的身份进行隐藏:
	
	$('.span_store_province').each(function(){
		if ($(this).attr('select_value') == '') {
			$(this).parent().show();
		} else {
			$(this).parent().hide();
		}
	})

	//点击一个省份
	$('.span_store_province').live("click",function() {
		var select_province = $(this).attr('select_value');
		var expand = false;//目前展开状态:TRUE:展开,FLASE:闭合
		$('.span_store_province').each(function (){
			if ($(this).attr('select_value') != select_province && $(this).parent().is(":visible") == true) {
				expand = true;
			}
		})

		if (expand == false) {
			//需要展开所有的LI
			$('.span_store_province').each(function (){
				$(this).parent().show();
			})
		    
		} else {
			//需要关闭其他的LI,
			$('.span_store_province').each(function (){
				if ($(this).attr('select_value') != select_province) {
					$(this).parent().hide();
				} else {
					$(this).parent().show();
				}
			})
			//并且AJAX刷新CITY内容
			
			$('#store_province').val($(this).attr('select_value'));

			var curr_province = $('#store_province').val();
			if (curr_province) {
				$('#store_city_ul').hide();
				$('#load_city_ajax').show();
				$.getJSON("<?php echo $this->getUrl('storelocator/getstorelocator/getCityByProvince');?>",{province:curr_province}, function(data){
						var res = '<li><span class="span_store_city" select_value="">请选择市</span></li>';
					     $.each(data, function(i,item){
						     var city = item.city;
						     res += '<li style="display:none;"><span class="span_store_city" select_value="'+city+'">' + city + '</span></li>';
						  });
					     $('#store_city_ul').html(res);
					     $('#load_city_ajax').hide();
					     $('#store_city_ul').show();
			     });
				var res = '<li><span select_value="" class="span_store_title">请选择门店</span></li>';
				 $('#store_title_ul').html(res);
			     $('#load_title_ajax').hide();
			     $('#store_title_ul').show();
			} else {
				var res = '<li><span select_value="">请选择市</span></li>';
				$('#store_city_ul').html(res);
				$('#load_city_ajax').hide();
			    $('#store_city_ul').show();
				
			}
		}
		
	})
	
	$('.span_store_city').live("click",function() {
		var select_city = $(this).attr('select_value');
		var expand = false;//目前展开状态:TRUE:展开,FLASE:闭合
		$('.span_store_city').each(function(){
			if ($(this).attr('select_value') != select_city && $(this).parent().is(":visible") == true) {
				expand = true;
			}
		})

		if (expand == false) {
			$('.span_store_city').each(function (){
				$(this).parent().show();
			})
		} else {
			//关闭其他CITY
			$('.span_store_city').each(function (){
				if ($(this).attr('select_value') != select_city) {
					$(this).parent().hide();
				} else {
					$(this).parent().show();
				}
			})
			//请求其他的店铺TITLE
			$("#store_city").val($(this).attr('select_value'));
			var curr_city = $("#store_city").val();
			
			$('#store_title_ul').hide();
			$('#load_title_ajax').show();
			
			if (curr_city) {
				$.getJSON("<?php echo $this->getUrl('storelocator/getstorelocator/getTitleByCity');?>",{city:curr_city}, function(data){
					var res = '<li><span select_value="" class="span_store_title">请选择门店</span></li>';
				     $.each(data, function(i,item){
					     var title = item.title;
					     res += '<li style="display:none;"><span class="span_store_title"  select_value="'+title + '">' + title + '</span></li>';
					    
					  });
				     $('#store_title_ul').html(res);
				     $('#load_title_ajax').hide();
				     $('#store_title_ul').show();
		     	});
			} else {
				var res = '<li><span select_value="" class="span_store_title">请选择门店</span></li>';
				 $('#store_title_ul').html(res);
			     $('#load_title_ajax').hide();
			     $('#store_title_ul').show();
			}
		}
	})
	
	$('.span_store_title').live('click',function(){
		
		select_title = $(this).attr('select_value');
		
		var expand = false;//目前展开状态:TRUE:展开,FLASE:闭合

		$('.span_store_title').each(function(){
			if ($(this).attr('select_value') != select_title && $(this).parent().is(":visible") == true) {
				expand = true;
			}
		})

		if (expand == false) {
			//展开所有的
			$('.span_store_title').each(function(){
				$(this).parent().show();
			})
		} else {
			//闭合其他的
			$('.span_store_title').each(function(){
				if($(this).attr('select_value') != select_title) {
					$(this).parent().hide();
				}
			})
		}

		$("#store_title").val(select_title);
		
	})

     
})(jQuery);
</script>

 最后提一下上面2处有使用到AJAX访问请求,

方法是PHP写的:

<?php
class Bysoft_StoreLocator_GetstorelocatorController extends Mage_Core_Controller_Front_Action   
{ 
	public function getStoreLocatorAction(){
		$this->loadLayout();
		$this->renderLayout();
	}
	/*
	 * 从省名获取所有的城市名
	 */
	public function getCityByProvinceAction() {
		$read= Mage::getSingleton('core/resource')->getConnection('core_read');
		$province = $_REQUEST['province'];
		$city_arr = array();
		$sql = "
			SELECT `city` FROM `store_locator` WHERE `province` = '{$province}'
			GROUP BY `city`
		";
	
		echo json_encode($read->fetchAll($sql));
		
	}
	/*
	 * 从城市名获取各个店名
	 */
	public function getTitleByCityAction() {
		$read= Mage::getSingleton('core/resource')->getConnection('core_read');
		$city = $_REQUEST['city'];
		$title_arr = array();
		$sql = "
		SELECT `title` FROM `store_locator` WHERE `city` = '{$city}'
		GROUP BY `title`
		";
		echo json_encode($read->fetchAll($sql));
		
	}
	/*
	 * 从店名获取店信息(仅获取一条)
	 */
	public function getAddByTitleAction() {
		$read= Mage::getSingleton('core/resource')->getConnection('core_read');
		$title = $_REQUEST['title'];
		$sql = "
		SELECT * FROM `store_locator` WHERE `title` = '{$title}'
		limit 1
		";
		$results = array();
		foreach ($read->fetchAll($sql) as $row) {
			$address = $row['address'];
			$add_phone = explode(' ',$row['address']);
			if (isset($add_phone[0])) {
				$row['address'] = $add_phone[0];
			} else {
				$row['address'] = '';
			}
			if (isset($add_phone[1])) {
				$row['telephone'] = $add_phone[1];
			} else {
				$row['telephone'] = '';
			}
			
			$results[] = $row;
		}
		echo json_encode($results);
	}
}

 

纯属个人学习原创,如有问题,请多指教。

谢谢。

 

 

 

 

分享到:
评论

相关推荐

    省市县三级联动+全国行政区划json数据包

    在IT领域,尤其是在前端开发中,"省市县三级联动"是一种常见的功能,它涉及到用户界面中的下拉选择框,用于选择国家、省份、城市及区县等地理信息。这种功能通常应用于地址输入、物流配送、门店查找等场景,提供用户...

    全国省市区数据sql (mysql)三级联动

    全国省市区数据在IT行业中是常见的地理信息系统(GIS)的基础数据,主要用于实现地理位置的三级联动效果,这在网站、APP等应用中非常常见,比如地址选择、物流配送、门店查询等功能。在这里,我们讨论的核心是MySQL...

    省市县XML三级联动

    在IT行业中,"省市县XML三级联动"是一个常见的前端开发功能,主要用于用户在网页或应用程序中选择地理位置时提供便捷的交互体验。这个功能通常应用于地址输入、物流配送、门店选址等场景,使得用户能逐级从省级、...

    jQuery省市二级联动关联店面查询表单代码

    在这个“jQuery省市二级联动关联店面查询表单代码”项目中,开发者利用jQuery实现了用户友好的店面查询功能,特别适用于网络营销场景,帮助用户快速找到连锁店铺的全国网点。 首先,我们要理解“省市二级联动”的...

    省市县三级联动

    在IT行业中,"省市县三级联动"是一种常见的地理信息系统(GIS)或前端开发中的功能设计,主要用于实现下拉选择框的动态关联。这种设计通常应用于需要用户选择详细地理位置的场景,如物流配送、政务系统、房产信息等...

    二维三级联动

    二维三级联动是一种常见的数据交互和展示方式,在UI设计和数据管理中广泛应用,特别是在移动应用、网页和数据分析系统中。这种联动通常涉及到两个维度的数据,并在第三个层级上建立关联,以实现更加灵活和丰富的用户...

    Excel内部函数实现省、市、店三级组合框联动的精彩模板

    在Excel中,三级联动组合框是一种高效的数据筛选和查询工具,尤其适用于处理具有层次结构的数据,如省份-城市-店面的三级结构。本教程将详细讲解如何利用Excel的内部函数和窗体控件来实现这样的功能,而无需编写VBA...

    jQuery省市二级联动关联店面查询表单代码.zip

    这个名为"jQuery省市二级联动关联店面查询表单代码.zip"的压缩包提供了一个实现这一功能的jQuery代码实例。这个实例适用于那些需要在网站上提供店面查询或地址填写的表单,让用户能更便捷地找到相应店面。 首先,...

    layui自定义插件citySelect实现省市区三级联动选择

    在本文中,我们将深入探讨如何使用layui框架创建一个名为citySelect的自定义插件,以实现省市区三级联动选择的功能。这个插件是由ggerChen编写的,版本为1.0,它依赖于layui的几个核心组件:layer、form、element和...

    省市县三级导航JS+Ajax

    首先,省市县三级导航的逻辑结构是基于中国行政区划的三个层次:省(省份)、市(城市)、县(区县)。用户依次选择省份,然后在选定省份的基础上展示对应的市,接着在选定市的基础上显示对应的县或区。这种导航方式...

    PHP 使layui用三级联动省市区插件 在script标签内不生效问题

    LayUI是一个轻量级的前端组件库,提供丰富的UI组件,包括用于创建三级联动效果的省市区选择器。 首先,我们来分析这个问题的原因。当在`&lt;script&gt;`标签中尝试使用LayUI的`layarea`插件时,如果插件的渲染过程发生在...

    地区联动带百度地图查询

    1. **地区联动**:地区联动是指当用户在一个下拉菜单中选择一个地区(如省份)时,另一个下拉菜单(如城市)会自动更新,只显示与用户所选省份相关的城市。这通常通过JavaScript或者AJAX实现,利用前端框架如jQuery...

    全国省市区数据库

    同样,会通过建立三个表(province、city、district)并利用外键关联实现三级联动。 这些数据库中的省市区数据通常需要定期更新,以保持与现实世界的同步。更新方式可能包括爬取官方网站数据、购买官方更新包或使用...

    中国省市区城市列表mysql数据表,可直接导入数据库、可转JSON数据,带行政区划码和经纬度

    标题中的“中国省市区城市列表mysql数据表”指的是一个包含了中国所有省份、城市、区县的数据表,专门设计用于MySQL数据库系统。这个数据表能够帮助用户快速构建与地理位置相关的应用程序,比如地图服务、物流配送...

    js实现省,市,区,门店,电话,地址多级联动

    在JavaScript(JS)开发中,实现省、市、区、门店以及电话和地址的多级联动是一项常见的功能,尤其在构建动态web应用时。这种功能主要用于用户输入或选择其所在的位置,以便提供更加精确的服务,如导航、配送等。...

    国美电器门店三级检查工作管理办法.doc

    该办法分为门店自检、分部核查和总部抽查三个层级,旨在通过层层监督和考核,确保各门店的服务质量和整体运营效果。 1. 目的: 制定这一办法的主要目的是加强门店员工的服务意识,增强总部和分部对门店的管理和...

    全国省市县名称及邮政编码数据库sql文件

    数据库设计时,可能会采用分层结构,将省份、城市和区县作为三个关联的表,通过外键进行连接,而邮政编码表则通过地区ID与之关联,形成一个灵活且可扩展的架构。 数据库的应用场景广泛,例如: - 地图应用:提供...

    三级分销制度全.doc

    2. **管理津贴**:一级代理商可以从其下级的销售中获得20%的管理津贴,二级代理获得10%,三级代理获得5%。这种结构鼓励代理商发展更多的下线,扩大销售网络。 3. **市场拓展奖励**:代理商在达到一定级别后,成功...

    区域内门店如何有效地实施联动协同

    这份文档《区域内门店如何有效地实施联动协同》为我们提供了一个深入理解这一主题的宝贵资源。以下是对这一主题的详细阐述: 首先,联动协同的核心是增强各门店间的沟通与合作。在超市管理中,每个门店都有其特定的...

Global site tag (gtag.js) - Google Analytics