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

YII 商品选择器组件

    博客分类:
  • YII
阅读更多

系统中可能很多地方都需要选择商品,例如模板机制、活动等地方。

系统中可参考商品赠品的功能实现。

使用方法如下:

1.引入js:

{script src='@static/js/jquery.widget.js'}

 2.在页面中指定组件的容器,所谓组件就是指ajax加载的一个已经实现了大部分功能的页面,为了方便管理,需要为此加载的页面指定一块区域来容纳它,一般容器可以选择DIV,方便前端进行修改样式,例如在页面中第一如下代码(此处加了class属性,方便绑定事件,同时也可以方便处理页面中多个商品选择容器):

<!-- 商品选择器 -->
<div class="goods-picker-container"></div>

 3.编写js代码进行初始化操作:

<script type="text/javascript">
	$().ready(function() {
		//组件初始化,点击某个按钮展开商品选择控件
		$(".goods-picker").click(function() {
			var container = $(this).parents(".goods-sku").find(".goods-picker-container");
			var sku_id = $(this).data("sku-id");
			// 一个页面中如果有多个组件,则需要为每个组件定义一个唯一的ID,此ID
			// 建议就是分页控件的ID,也主要是为了区分开每个组件的分页已经表单
			// 如果页面中只有一个,默认为GoodsPickerPage
			var page_id = "GoodsPickerPage_" + sku_id;
			//判断容器是否已经初始化了组件
			// $.goodspickers()可获取页面中所有的选择器组件对象,
			// 也可以根据ID获取指定的组件对象
			if (!$.goodspickers(page_id)) {

				// 如果已经有选择了的商品则可以想下面这样初始化已选择的数据,有两种形式
				var values = [];

				// 设置已选择:第一种方法,加载控件前传递已选择的商品信息
				$(container).parents(".goods-sku").find(".goods-gift-list").find("li").each(function() {
					var goods_id = $(this).find(".gift-goods-id").val();
					var sku_id = $(this).find(".gift-sku-id").val();
					values[goods_id + "-" + sku_id] = {
						goods_id: goods_id,
						sku_id: sku_id,
					};
				});
				// 初始化组件,为容器绑定组件
				var goodspicker = $(container).goodspicker({
					// 组件ajax提交的数据,主要设置分页的相关设置
					data: {
						page: {
							// 分页唯一标识
							page_id: page_id
						},
					// 不能将自己作为赠品
					//except_sku_ids: sku_id
					},
					// 已加载的数据
					values: values,
					// 选择商品和未选择商品的按钮单击事件
					// @param selected 点击是否选中
					// @param sku 选中的SKU对象
					// @return 返回false代表
					click: function(selected, sku) {
						// 此click函数根据业务需求自定义
						if (selected == true) {
							var html = $("#gift_template").html();
							var element = $($.parseHTML(html));
							$(element).data("sku-id", sku.sku_id);
							$(element).data("goods-id", sku.goods_id);
							$(element).find("img").attr("src", sku.goods_image);
							$(element).find(".goods_name").html(sku.sku_name);
							$(element).find(".gift-sku-id").val(sku.sku_id);
							$(element).find(".gift-goods-id").val(sku.goods_id);
							$(element).attr("data-gift-sku-id", sku.sku_id);
							$(container).parents(".goods-sku").find(".goods-gift-list").append(element);
						} else {
							$(container).parents(".goods-sku").find(".goods-gift-list").find("[data-gift-sku-id='" + sku.sku_id + "']").remove();
						}
					},
					// 设置已选择:第二种方法,加载控件后传递已选择的商品信息
					// 回调函数加载已选择的商品
					callback: function() {
						/**
						var goodspicker = this;
						// 已选择
						$(container).parents(".goods-sku").find(".goods-gift-list").find("li").each(function() {
							var goods_id = $(this).find(".gift-goods-id").val();
							var sku_id = $(this).find(".gift-sku-id").val();
							// 通过组件的add函数选择指定的商品信息				
							goodspicker.add(goods_id, sku_id);
						});
						 **/
					}
				});

			} else {
				if ($(container).is(":hidden")) {
					$(container).show();
				} else {
					$(container).hide();
				}
			}
		});

		//移除赠品
		$("body").on("click", ".gift-del", function() {
			var target = $(this).parents("li");
			var goods_id = $(target).data("goods-id");
			var sku_id = $(target).data("sku-id");

			var page_id = "GoodsPickerPage_" + $(this).parents(".goods-sku").data("sku-id");

			if ($.goodspickers(page_id)) {
				// 获取控件
				var goodspicker = $.goodspickers(page_id);
				// 通过组件的remove函数取消选择指定的商品信息
				goodspicker.remove(goods_id, sku_id);
			}

			$(target).remove();
		});
	});
</script>

 4.页面展现效果



 

 

 

 

  • 大小: 386.1 KB
分享到:
评论

相关推荐

    Yii 2.0进阶版 高级组件 优化京东平台

    Yii 2.0进阶版 高级组件 优化京东平台 包括前后台源代码,使用php 实现数据库mysql

    yii2.0 标签组件

    yii2.0 tags标签组件下载。

    Yii 2.0高级组件优化京东电商平台

    Yii 2.0 高级组件 ES/Redis/ Sentry 优化京东平台 Yii 2.0 高级组件 ES/Redis/ Sentry 优化京东平台

    yii2 百度编辑器

    yii2 百度编辑器扩展插件

    Yii 2.0进阶版 高级组件 ES/Redis/ Sentry 优化京东平台 收藏 难度高级

    Yii 2.0进阶版 为百度分享的链接及密码 Yii 2.0进阶版 为百度分享的链接及密码

    yii2-metronic:YII2的Metronic组件库

    这是一个基于的Yii2组件/小部件库。使用时需要先加载好Metronic的js和css资源。 安装 composer install evondu/yii2-metronic 使用方法 1、GrdiView 使用方法与原本YII2中的一样,其主要是修改了样式和布局,使它...

    yii2-mailqueue, 用于 yii2 swiftmailer https的yii2的电子邮件队列组件.zip

    yii2-mailqueue, 用于 yii2 swiftmailer https的yii2的电子邮件队列组件 yii2-mailqueue适用于 yii2-swiftmailer的yii2的电子邮件队列组件安装安装这个扩展的首选方法是通过 composer插件。运行...

    yii2-weui:为yii2封装weui组件

    yii2-weuiWeUI for Yii 2为Yii2封装weui组件,让微信开发更简单本组件为车卡通微信会员管理系统而做,]]authorfufudaoanu-zhangnuowei000InstallationInstall With ComposerThe preferred way to install this ...

    Yii 2.0进阶版 高级组件优化京东平台

    Yii 2.0进阶版 为百度分享的链接及密码 Yii 2.0进阶版 为百度分享的链接及密码

    yii2-components:Yii2框架的组件

    Yii2的组件Yii2框架的一些简单组件安装下载档案或克隆此存储库。 将包含文件的归档文件解压缩到路径/至/ project / components目录中。 如果它不存在,那么我们创建它。使用我们使用use指令进行连接。 让我们看一下...

    yii2-colorpicker

    Yii2 的颜色选择器小部件 Yii2 的颜色选择器小部件 安装 安装此扩展的首选方法是通过 。 要么跑 php composer.phar require --prefer-dist cliff363825/yii2-colorpicker "*" 或添加 "cliff363825/yii2-...

    yii的控制器

    集成控制器

    Yii2中组件的注册与创建方法

    今天本来打算研究一下yii2.0的AR模型的实现原理,然而,计划赶不上变化,突然就想先研究一下yii2.0的数据库组件创建的过程。通过对yii源码的学习,了解了yii组件注册与创建的过程,并发现原来yii组件注册之后并不是...

    yii框架yii框架yii框架yii框架yii框架

    很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架

    yii-resque, 基于 php Resque的Yii组件,基于.zip

    yii-resque, 基于 php Resque的Yii组件,基于 Resque我是 php的一个组件,它基于 php-resque resque和 php-resque-scheduler的组件,我们还通过使用 ResqueBoard测试了日志处理程序 using 。需求php函数扩展。Red

    yii2-language-picker:Yii2语言选择器小部件

    Yii2语言选择器 Yii2语言选择器小部件 介绍 该小部件提供了易于使用的语言选择器,可轻松更改我们网站的语言。 语言更改可以同步或异步(通过Ajax)进行。 默认方法是异步的(通过Ajax调用),但是,如果该方法由于...

    Yii框架应用组件用法实例分析

    主要介绍了Yii框架应用组件用法,结合实例形式分析了Yii应用组件基本功能、定义、使用方法及操作注意事项,需要的朋友可以参考下

    yii framework(Yii)框架window版

    Yii是一个基于组件的高性能PHP框架,用于开发大型Web应用。Yii采用严格的OOP编写,并有着完善的库引用以及全面的教程。从 MVC,DAO/ActiveRecord,widgets,caching,等级式RBAC,Web服务,到主题化,I18N和L10N,...

    yii2-jstree:Yii2 jsTree 组件

    Yii2 jsTree 组件jsTree 是 jquery 插件,提供交互式树。 它是完全免费的、开源的,并在 MIT 许可下分发。 jsTree 易于扩展、主题化和可配置,它支持 HTML 和 JSON 数据源以及 AJAX 加载。 这个包允许你在几分钟内将...

Global site tag (gtag.js) - Google Analytics