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配置心得包含MYSQL5乱码解决
Nov 20 PHP
解析PHP计算页面执行时间的实现代码
Jun 18 PHP
使用配置类定义Codeigniter全局变量
Jun 12 PHP
PHP输出九九乘法表代码实例
Mar 27 PHP
浅谈PHP值mysql操作类
Jun 29 PHP
php实现不通过扩展名准确判断文件类型的方法【finfo_file方法与二进制流】
Apr 18 PHP
phpStudy配置多站点多域名和多端口的方法
Sep 01 PHP
ThinkPHP框架实现导出excel数据的方法示例【基于PHPExcel】
May 12 PHP
php实现的rc4加密解密类定义与用法示例
Aug 16 PHP
php5.5使用PHPMailer-5.2发送邮件的完整步骤
Oct 14 PHP
Laravel 不同生产环境服务器的判断实践
Oct 15 PHP
laravel实现上传图片,并且制作缩略图,按照日期存放的代码
Oct 16 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学习笔记之面向对象编程
2012/12/29 PHP
PHP中使用memcache存储session的三种配置方法
2014/04/05 PHP
php函数连续调用实例分析
2015/07/30 PHP
关于php中一些字符串总结
2016/05/05 PHP
PHP使用正则表达式实现过滤非法字符串功能示例
2018/06/04 PHP
PHP堆栈调试操作简单示例
2018/06/15 PHP
Yii2框架中一些折磨人的坑
2019/12/15 PHP
网站页面自动跳转实现方法PHP、JSP(上)
2010/08/01 Javascript
javascript闭包的理解和实例
2010/08/12 Javascript
javascript 另一种图片滚动切换效果思路
2012/04/20 Javascript
jQuery实现类似滑动门切换效果的层切换
2013/09/23 Javascript
JS获取图片lowsrc属性的方法
2015/04/01 Javascript
javascript self对象使用详解
2016/10/18 Javascript
JSON 数据详解及实例代码分析
2017/01/20 Javascript
JS简单验证上传文件类型的方法
2017/04/17 Javascript
JavaScript内存泄漏的处理方式
2017/11/20 Javascript
基于Vue制作组织架构树组件
2017/12/06 Javascript
Vue CLI2升级至Vue CLI3的方法步骤
2019/05/20 Javascript
茶余饭后聊聊Vue3.0响应式数据那些事儿
2019/10/30 Javascript
javascript实现评分功能
2020/06/24 Javascript
JavaScript实现无限轮播效果
2020/11/19 Javascript
[05:40]DOTA2荣耀之路6:Wings最后进攻
2018/05/30 DOTA
详解Python中的元组与逻辑运算符
2015/10/13 Python
Python实现获取本地及远程图片大小的方法示例
2018/07/21 Python
Pandas之ReIndex重新索引的实现
2019/06/25 Python
全球最大的网上自行车商店:Chain Reaction Cycles
2016/12/02 全球购物
彪马加拿大官网:PUMA加拿大
2018/10/04 全球购物
Internet体系结构
2014/12/21 面试题
应届生保险求职信
2013/11/11 职场文书
给校长的一封建议书
2014/03/12 职场文书
广播体操口号
2014/06/18 职场文书
亲属关系公证书样本
2015/01/23 职场文书
基石观后感
2015/06/12 职场文书
个人自我鉴定怎么写?
2019/07/01 职场文书
你喜欢篮球吗?Python实现篮球游戏
2021/06/11 Python
Redis高可用集群redis-cluster详解
2022/03/20 Redis