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 相关文章推荐
PHP4(windows版本)中的COM函数
Oct 09 PHP
用PHP连接Oracle数据库
Oct 09 PHP
PHP array_flip() 删除重复数组元素专用函数
May 16 PHP
微信公众平台开发关注及取消关注事件的方法
Dec 23 PHP
PHP实现指定字段的多维数组排序函数分享
Mar 09 PHP
PHP+Jquery与ajax相结合实现下拉淡出瀑布流效果【无需插件】
May 06 PHP
PHP中文字符串截断无乱码解决方法
Oct 10 PHP
AES加解密在php接口请求过程中的应用示例
Oct 26 PHP
Yii框架实现的验证码、登录及退出功能示例
May 20 PHP
PHP简单实现遍历目录下特定文件的方法小结
May 22 PHP
PHP有序表查找之二分查找(折半查找)算法示例
Feb 09 PHP
TP5框架安全机制实例分析
Apr 05 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
PHPMyadmin 配置文件详解(配置)
2009/12/03 PHP
Ubuntu中启用php的mail()函数并解决发送邮件速度慢问题
2015/03/27 PHP
解析 thinkphp 框架中的部分方法
2017/05/07 PHP
Js动态创建div
2008/09/25 Javascript
JavaScript动态插入script的基本思路及实现函数
2013/11/11 Javascript
jquery 鼠标滑动显示详情应用示例
2014/01/24 Javascript
Javascript中封装window.open解决不兼容问题
2014/09/28 Javascript
jquery常用方法及使用示例汇总
2014/11/08 Javascript
Jquery 实现图片轮换
2015/01/28 Javascript
JQuery查找DOM节点的方法
2015/06/11 Javascript
JavaScript实现广告的关闭与显示效果实例
2015/07/02 Javascript
Javascript函数式编程语言
2015/10/11 Javascript
node.js微信公众平台开发教程
2016/03/04 Javascript
node.js学习之交互式解释器REPL详解
2016/12/08 Javascript
js验证手机号、密码、短信验证码代码工具类
2020/06/24 Javascript
Angular2 自定义表单验证器的实现方法
2018/12/14 Javascript
JS Array.from()将伪数组转换成数组的方法示例
2020/03/23 Javascript
Tensorflow环境搭建的方法步骤
2018/02/07 Python
windows10下安装TensorFlow Object Detection API的步骤
2019/06/13 Python
python UDP(udp)协议发送和接收的实例
2019/07/22 Python
详解HTML5 LocalStorage 本地存储
2016/12/23 HTML / CSS
加拿大女鞋品牌:ALDO
2016/11/13 全球购物
番木瓜健康和保健产品第一大制造商:Herbal Papaya
2017/04/25 全球购物
食堂员工工作职责
2013/12/18 职场文书
餐饮业员工工作决心书
2014/03/11 职场文书
大学生社会实践方案
2014/05/11 职场文书
公司自我介绍演讲稿
2014/08/21 职场文书
优秀少先队员事迹材料
2014/12/24 职场文书
人事行政主管岗位职责
2015/04/09 职场文书
面试通知短信
2015/04/20 职场文书
幼儿园安全工作总结2015
2015/04/20 职场文书
观看焦裕禄观后感
2015/06/09 职场文书
优秀党员主要事迹范文
2015/11/05 职场文书
八年级英语教学反思
2016/02/15 职场文书
win10下go mod配置方式
2021/04/25 Golang
Win11无法访问设备和打印机 如何解决页面空白
2022/04/09 数码科技