使用magento eav数据模型为用户提供图片上传功能的实践
2016-03-21 19:36
645 查看
一,在megento表中,增加一个存储上传图片路径的属性,
给magento的customer实体类型增加一个audit_file_path属性,因为要customer使用的是EAV模型,得操作几个关联的数据表,方便使用magento模型的方法,
1,为表eav_attribute添加一个条记录,即增加一个audit_file_path属性对应于attribute_code字段,其中backend_type为varchar类型,在eav里对应的属性值会被存储到customer_entity_varchar表当中,SQL语句如下:
2,属性添加成功后,会生成attribute_id:157,其它字段值可参考eav_entity_attribure表里面,entity_type_id的实体类型为customer的一些记录设置,SQL语句如下:
3,接着为customer_eav_attribute表(用户实体),增加属性id为157的一条记录,SQL语句如下:
二,在megento系统中的app\design\frontend\Packagename\yourstore\template目录中的找到对应的模板.phtml,并添加文件上传的html结构,代码如下:
在对应js文件中添加文件按钮的添加与移除按钮,js代码如下:
三,在magento系统中,app\code\local\[b]Packagename\yourmodule\controllers目录下找到自己对应的anction方法处理文件的上传,与存储并存到数据库,方便以后查阅文件,这里是以图形式上传,代码如下:[/b]
总结:在整个操作过程中,难点在与magento的EVA数据模型的理解,及在内置的eav模型的使用,里面使用Varien_File_Uploader对象处理图片的存储,简单易行
给magento的customer实体类型增加一个audit_file_path属性,因为要customer使用的是EAV模型,得操作几个关联的数据表,方便使用magento模型的方法,
1,为表eav_attribute添加一个条记录,即增加一个audit_file_path属性对应于attribute_code字段,其中backend_type为varchar类型,在eav里对应的属性值会被存储到customer_entity_varchar表当中,SQL语句如下:
INSERT INTO yo_eav_attribute(entity_type_id,attribute_code,attribute_model,backend_model,backend_type,backend_table,frontend_model,frontend_input,frontend_label,frontend_class,source_model,is_required,is_user_defined,default_value,is_unique,note) VALUE(1,'audit_file_path',NULL,NULL,'varchar',NULL,NULL,'text','Audit file path',NULL,NULL,0,0,0,0,NULL)
2,属性添加成功后,会生成attribute_id:157,其它字段值可参考eav_entity_attribure表里面,entity_type_id的实体类型为customer的一些记录设置,SQL语句如下:
INSERT INTO yo_eav_entity_attribute(entity_type_id,attribute_set_id,attribute_group_id,attribute_id,sort_order) VALUE(1,1,1,157,110)
3,接着为customer_eav_attribute表(用户实体),增加属性id为157的一条记录,SQL语句如下:
INSERT INTO yo_customer_eav_attribute VALUE(157,1,NULL,0,NULL,1,0,NULL)
二,在megento系统中的app\design\frontend\Packagename\yourstore\template目录中的找到对应的模板.phtml,并添加文件上传的html结构,代码如下:
<div class="fileContainer"> <div class="audit_file_wrp"> <input type="file" name="audit_file[]" class="audit_file" /> <span class="auditRemove">remove</span> </div> </div> <div><span class="addAuditFile">add file</span></div>
在对应js文件中添加文件按钮的添加与移除按钮,js代码如下:
jQuery(document).ready(function(){ //增加上传文件按钮 jQuery('.addAuditFile').click(function(){ var addHtml='<div class="audit_file_wrp"> <input type="file" name="audit_file[]" class="audit_file" /> <span class="auditRemove">remove</span></div>'; jQuery(addHtml).appendTo('.fileContainer'); }); //删除上传文件按钮,至少保留一个 jQuery('.fileContainer').on('click', '.auditRemove', function() { if (jQuery('.auditRemove').length > 1) { jQuery(this).parents('.audit_file_wrp').remove(); } else { alert('at least one image need to be selected'); } }); });
三,在magento系统中,app\code\local\[b]Packagename\yourmodule\controllers目录下找到自己对应的anction方法处理文件的上传,与存储并存到数据库,方便以后查阅文件,这里是以图形式上传,代码如下:[/b]
/** * 获取当前用户对象 */ $customer = Mage::getSingleton ( "customer/session" )->getCustomer (); /** * 获取当前对象ID */ $customerId = $customer->getId (); /** * 加载当前用户对象的模型 */ $model = Mage::getModel ( 'customer/customer' )->load ( $customerId ); /** * 设置存储图片的默认路径 */ $basedir = Mage::getBaseDir ( 'media' ); /** * 遍历上传的文件,并存储到对应路径 */ $imagePath=array(); foreach($_FILES ["audit_file"]["name"] as $key=>$image){ if (isset ( $_FILES ["audit_file"] ['name'][$key] ) && (file_exists ( $_FILES ["audit_file"] ['tmp_name'][$key] ))) { try { $uploader = new Varien_File_Uploader ( array( 'name'=> $_FILES ["audit_file"] ['name'][$key], 'type'=> $_FILES ["audit_file"] ['type'][$key], 'tmp_name'=> $_FILES ["audit_file"] ['tmp_name'][$key], 'error'=> $_FILES ["audit_file"] ['error'][$key], 'size'=> $_FILES ["audit_file"] ['size'][$key] ) ); /** * 定义可上传的文件格式 */ $uploader->setAllowedExtensions ( array ( 'jpg', 'jpeg', 'gif', 'png' ) ); /** * 定义存储的文件名是否可变 */ $uploader->setAllowRenameFiles ( false ); $uploader->setFilesDispersion ( false ); /** * 定义具体路径 */ $path = $basedir . DS . 'sellerimage'.DS.'audit'; /** * 保存文件到具体路径,并按照用户id设置用户名 */ $RenameArr=explode('.',$image); $RenameArr[0]="audit_file_".$customerId."_".$key; $imagePath[$key]=implode('.',$RenameArr); $uploader->save ( $path, $imagePath[$key]); } catch ( Exception $e ) { /** * 显示上传出错的信息 */ Mage::getSingleton ( 'core/session' )->addError ( $this->__ ( $e->getMessage () ) ); } } } /** * 存储文件名到数据库 */ $model->setAuditfilepath(implode(',',$imagePath)); $model->save();
总结:在整个操作过程中,难点在与magento的EVA数据模型的理解,及在内置的eav模型的使用,里面使用Varien_File_Uploader对象处理图片的存储,简单易行
相关文章推荐
- linux rpm方式完全卸载mysql
- “互联网+”时代 快消品供应链如何实现变革与颠覆?
- 自序:我为什么写这样一个博客
- PTA 链表删除结点的题目测试
- 开通博客
- 对理想软件开发团队模式的设想以及对软件流程的理解
- 通过 java 把excel xls中数据转为可直接插入数据库的sql文件
- Nyoj 网络的可靠性(水题)
- PTA 链表删除结点的题目测试
- 实现项目WC
- java第十一节-包装类,基本类型,String之间的转换
- iOS刷新tableView某个cell或section
- 文章页上一篇下一篇
- 第七讲--buffer cache内存组织结构剖析
- 20160316作业
- 磁盘管理二(LVM及磁盘配额)
- 【Poj 2507】The Lost House(树型dp)
- 安装VS的过程
- 表单
- 20160316作业