使用magento eav数据模型为用户提供图片上传功能的实践
一,在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语句如下:
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\Packagename\yourmodule\controllers目录下找到自己对应的anction方法处理文件的上传,与存储并存到数据库,方便以后查阅文件,这里是以图形式上传,代码如下:
/**
* 获取当前用户对象
*/
$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对象处理图片的存储,简单易行
使用magento eav数据模型为用户提供图片上传功能的实践的更多相关文章
- java模拟表单上传文件,java通过模拟post方式提交表单实现图片上传功能实例
java模拟表单上传文件,java通过模拟post方式提交表单实现图片上传功能实例HttpClient 测试类,提供get post方法实例 package com.zdz.httpclient; i ...
- megapix-image插件 使用Canvas压缩图片上传 解决手机端图片上传功能的问题
最近在弄微信端的公众号.订阅号的相关功能,发现原本网页上用的uploadify图片上传功能到手机端有的手机类型上就不能用了,比如iphone,至于为啥我想应该不用多说了吧(uploadify使用fla ...
- Ueditor图片上传功能的配置
之前的项目中碰到过图片上传功能的配置问题,但是没有记录下来,今天有个朋友突然又问到了我这个问题,当时没想起来之前怎么解决的,后来看了Ueditor的官方文档才回想起来. 官网文档巨多,一般大家遇到问题 ...
- drupal中安装CKEditor文本编辑器,并配置图片上传功能 之 方法二
drupal中安装CKEditor文本编辑器,并配置图片上传功能 之 方法一 中介绍了ckeditor的安装和配置方法,其实还有另一种新方法,不用IMCE模块. 不过需要ckfinder的JS库,可以 ...
- FLASH图片上传功能—从百度编辑器UEditor里面提取出来
为了记录工作中碰到的各种问题,以及学习资料整理,今天开始,将以往的文章进行了一个整理,以后也开始认真的记录学习过程中的各种问题 在HTML里面的文件上传功能一直是个问题,为了实现上传文件大小限制,怎样 ...
- Android开发之使用GridView+仿微信图片上传功能(附源代码)
前言:如果转载文章请声明转载自:https://i.cnblogs.com/EditPosts.aspx?postid=7419021 .另外针对有些网站转载本人的文章结果源码链接不对的问题,本人在 ...
- QQ空间发表日志的图片上传功能实现
w间接促使了用户注意图片的顺序,进一步优化的方向的是手指触动或鼠标点击来同时进行图片的增删和调序,避免精确的数字输入. 有效code <form action="wcon/wact&q ...
- Android 使用GridView+仿微信图片上传功能(附源代码)
由于工作要求最近在使用GridView完成图片的批量上传功能,我的例子当中包含仿微信图片上传.拍照.本地选择.相片裁剪等功能,如果有需要的朋友可以看一下,希望我的实际经验能对您有所帮助. 直接上图,下 ...
- Dede后台广告管理模块增加图片上传功能插件
用户问题:网站广告后台管理非常方便,但是织梦后台的广告管理模块,发布广告时图片没有上传选项,只能用URL地址,很不方便,那么织梦帮就教大家一个方法实现广告图片后台直接上传,非常方便.先给大家看下修改后 ...
随机推荐
- DexClassLoader和PathClassLoader类载入机制
0x00 在DexClassLoader和PathClassLoader载入Dex流程一文中,我们分析了dex文件怎样形成了DexFile结构体.本文中解说类载入机制,实际上就是生成ClassObje ...
- 《从零開始学Swift》学习笔记(Day 56)—— Swift编码规范之命名规范
原创文章,欢迎转载.转载请注明:关东升的博客 程序代码中到处都是自定义的名字,取一个有样而且符合规范的名字非常重要. 命名方法非常多,可是比較有名的,广泛接受命名法有: 匈牙利命名,一般仅仅是命名变量 ...
- android:关于主工程和library project
.如何将一个android工程作为库工程(library project) library project是作为jar包被其它android工程使用的,首先它也是普通的android工程.然后: )在 ...
- CodeForces--621A--Wet Shark and Odd and Even(数学水题)
Wet Shark and Odd and Even Time Limit: 2000MS Memory Limit: 262144KB 64bit IO Format: %I64d & ...
- 样条函数(spline function)—— 分段多项式函数(piecewise polynomial function)
1. 分段多项式函数 样条函数是某种意义上的分段函数. Spline (mathematics) - Wikipedia 最简单的样条函数是一种分段多项式函数(piecewise polynomial ...
- POJ 2752 KMP中next数组的应用
题意: 让你从小到大输出给的字符串中既是前缀又是后缀的子串的长度. 思路: 先要了解这个东西: KMP中next数组表示的含义:记录着字符串匹配过程中失配情况下可以向前多跳几个字符,它描述的也是子串的 ...
- BS程序性能调优
首先想到的是优化算法.改进技术.扩展设备去做优化.其实在讨论性能的时候,绕不开对业务的理解,不同的业务系统对性能的要求不同,优化方式也不一样.优化性能的前提是保证业务的正确性.我们平时关注的性能主要是 ...
- Educational Codeforces Round 35
Nearest Minimums 相同的数里最小的数里的最小距离 Solution Two Cakes Solution Three Garlands 瞎比试 Solution Inversion C ...
- jQuery中事件模块介绍
事件模块 1.提供其他DOM方法 包括:next 和 nextAll方法 1.1 next方法实现 目标:扩展框架方法,获取当前元素的下一个元素 问题:如何获取下一个元素? 1.1.1 提供 next ...
- AngularJs轻松入门
AngularJs轻松入门系列博文:http://blog.csdn.net/column/details/angular.html AngularJs轻松入门(一)创建第一个应用 AngularJs ...