elgg 获取文件图标地址的方法


Posted in PHP onMarch 20, 2010

过程如下:
首先,实体保存的时候用这个方法(系统本身的):
比如有一个Activity类,继承自ElggObject,创建了一个它的实例 activity,

// Now see if we have a file icon 
if ((isset($_FILES['icon'])) && (substr_count($_FILES['icon']['type'],'image/'))) { 
$prefix = "activity/".$activity->guid; 
$filehandler = new ElggFile(); 
$filehandler->owner_guid = $activity->owner_guid; 
$filehandler->setFilename($prefix . ".jpg"); 
$filehandler->open("write"); 
$filehandler->write(get_uploaded_file('icon')); 
$filehandler->close(); 
$thumbtiny = get_resized_image_from_existing_file($filehandler->getFilenameOnFilestore(),25,25, true); 
$thumbsmall = get_resized_image_from_existing_file($filehandler->getFilenameOnFilestore(),40,40, true); 
$thumbmedium = get_resized_image_from_existing_file($filehandler->getFilenameOnFilestore(),100,100, true); 
$thumblarge = get_resized_image_from_existing_file($filehandler->getFilenameOnFilestore(),200,200, false); 
if ($thumbtiny) { 
$thumb = new ElggFile(); 
$thumb->owner_guid = $activity->owner_guid; 
$thumb->setMimeType('image/jpeg'); 
$thumb->setFilename($prefix."tiny.jpg"); 
$thumb->open("write"); 
$thumb->write($thumbtiny); 
$thumb->close(); 
$thumb->setFilename($prefix."small.jpg"); 
$thumb->open("write"); 
$thumb->write($thumbsmall); 
$thumb->close(); 
$thumb->setFilename($prefix."medium.jpg"); 
$thumb->open("write"); 
$thumb->write($thumbmedium); 
$thumb->close(); 
$thumb->setFilename($prefix."large.jpg"); 
$thumb->open("write"); 
$thumb->write($thumblarge); 
$thumb->close(); 
} 
}

这个过程后,文件将被保存至一个由用户名字符串组成的一个目录结构下,比如用户名是abc,则被保存在了a/b/c/下,然后由图片的guid+size+.jpg组成一个文件名。
获取src地址的时候,通过实体->getIcon();方法来获取。getIcon是entities.php中的方法。然后这个方法会调用get_entity_icon_url方法,在get_entity_icon_url方法中有一行:
$url = trigger_plugin_hook('entity:icon:url', $entity->getType(), array('entity' => $entity, 'viewtype' => $viewtype, 'size' => $size), $url);
它会触发一个钩子(hook),这个hood需要在插件的start.php中注册。注册时这样写:
register_plugin_hook('entity:icon:url', 'object', 'activity_activityicon_hook');
第一个参数是钩子类型,第二个是实体类型,也就是activity的类型,第三个是钩子函数名。
然后在start.php中写出activity_activityicon_hook方法:
/** 
* 获取图标 
* This hooks into the getIcon API and provides nice user icons for users where possible. 
* 
* @param string $hook 钩子名 
* @param string $entity_type 实体类型 
* @param string $returnvalue 图片url地址 
* @param unknow $params 参数表列 
* @return string $url 图片url地址 
*/ 
function activity_activityicon_hook($hook, $entity_type, $returnvalue, $params) { 
global $CONFIG; 
if ((!$returnvalue) && ($hook == 'entity:icon:url') && ($params['entity'] instanceof Activity)) { 
$entity = $params['entity']; 
$type = $entity->type; 
$viewtype = $params['viewtype']; 
$size = $params['size']; 
if ($icontime = $entity->icontime) { 
$icontime = "{$icontime}"; 
} else { 
$icontime = "default"; 
} 
$filehandler = new ElggFile(); 
$filehandler->owner_guid = $entity->owner_guid; 
$filehandler->setFilename("activity/" . $entity->guid . $size . ".jpg"); 
if ($filehandler->exists()) { 
$url = $CONFIG->url . "pg/activityicon/{$entity->guid}/$size/$icontime.jpg"; 
return $url; 
} 
} 
}

这个方法会返回一个url,这个url就是src的地址。url返回到get_entity_icon_url后,会根据图片尺寸继续加工,返回最终url。这样就获取到了src地址。
PHP 相关文章推荐
简单的PHP图片上传程序
Mar 27 PHP
PHP 上传文件大小限制
Jul 05 PHP
PHP Session_Regenerate_ID函数双释放内存破坏漏洞
Jan 27 PHP
PHP错误和异长常处理总结
Mar 06 PHP
codeigniter中测试通过的分页类示例
Apr 17 PHP
yii操作cookie实例简介
Jul 09 PHP
实例讲解PHP设计模式编程中的简单工厂模式
Feb 29 PHP
php版微信公众号自定义分享内容实现方法
Sep 22 PHP
在Laravel中使用DataTables插件的方法
May 29 PHP
PHPMailer ThinkPHP实现自动发送邮件功能
Jun 10 PHP
PHP获取当前系统时间的方法小结
Oct 03 PHP
PHP基于swoole多进程操作示例
Aug 12 PHP
PHP 解决utf-8和gb2312编码转换问题
Mar 18 #PHP
ecshop 订单确认中显示省市地址信息的方法
Mar 15 #PHP
php smarty函数扩展
Mar 15 #PHP
php Smarty date_format [格式化时间日期]
Mar 15 #PHP
libmysql.dll与php.ini是否真的要拷贝到c:\windows目录下呢
Mar 15 #PHP
php下获取客户端ip地址的函数
Mar 15 #PHP
PHP 模拟$_PUT实现代码
Mar 15 #PHP
You might like
同一空间绑定多个域名而实现访问不同页面的PHP代码
2006/12/06 PHP
PHP和javascript常用正则表达式及用法实例
2014/07/01 PHP
php strftime函数的详细用法
2018/06/21 PHP
js面向对象 多种创建对象方法小结
2012/05/21 Javascript
妙用Jquery的val()方法
2012/06/27 Javascript
js解析xml字符串和xml文档实现原理及代码(针对ie与火狐)
2013/02/02 Javascript
javascript确认框的三种使用方法
2013/12/17 Javascript
location.href用法总结(最主要的)
2013/12/27 Javascript
jquery实现标签支持图文排列带上下箭头按钮的选项卡
2015/03/14 Javascript
js获取新浪天气接口的实现代码
2016/06/06 Javascript
JavaScript & jQuery完美判断图片是否加载完毕
2017/01/08 Javascript
在 Angular2 中实现自定义校验指令(确认密码)的方法
2017/01/23 Javascript
使用Webpack提高Vue.js应用的方式汇总(四种)
2017/07/10 Javascript
Angularjs 事件指令详细整理
2017/07/27 Javascript
改变vue请求过来的数据中的某一项值的方法(详解)
2018/03/08 Javascript
微信小程序实现运动步数排行功能(可删除)
2018/07/05 Javascript
基于nodejs的微信JS-SDK简单应用实现
2019/05/21 NodeJs
element的el-table中记录滚动条位置的示例代码
2019/11/06 Javascript
Servlet返回的数据js解析2种方法
2019/12/12 Javascript
js实现筛选功能
2020/11/24 Javascript
对Python中gensim库word2vec的使用详解
2018/05/08 Python
python cumsum函数的具体使用
2019/07/29 Python
python变量的作用域是什么
2020/05/26 Python
python mock测试的示例
2020/10/19 Python
Python OpenCV中的numpy与图像类型转换操作
2020/12/11 Python
英国著名书店:Foyles
2018/12/01 全球购物
Osklen官方在线商店:巴西服装品牌
2019/04/25 全球购物
Vrbo西班牙:预订您的度假公寓(公寓、乡村房屋…)
2020/04/27 全球购物
Java多态性的定义以及类型
2014/09/16 面试题
酒店人事专员岗位职责
2013/12/19 职场文书
材料会计岗位职责
2014/03/06 职场文书
民族团结先进个人事迹材料
2014/06/02 职场文书
2015年清明节演讲稿范文
2015/03/17 职场文书
集团财务总监岗位职责
2015/04/03 职场文书
道歉信范文
2015/05/12 职场文书
Mysql效率优化定位较低sql的两种方式
2021/05/26 MySQL