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.ini中文版(1)
Oct 09 PHP
Mysql的常用命令
Oct 09 PHP
php is_file 判断给定文件名是否为一个正常的文件
May 10 PHP
8个出色的WordPress SEO插件收集
Feb 26 PHP
php 文件上传类代码
Aug 06 PHP
深入解析fsockopen与pfsockopen的区别
Jul 05 PHP
phpexcel导入excel数据使用方法实例
Dec 24 PHP
php获取服务器端mac和客户端mac的地址支持WIN/LINUX
May 15 PHP
PHP实现递归无限级分类
Oct 22 PHP
分享PHP计算两个日期相差天数的代码
Dec 23 PHP
SSO单点登录的PHP实现方法(Laravel框架)
Mar 23 PHP
laravel实现查询最后执行的一条sql语句的方法
Oct 09 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
Codeigniter(CI)框架分页函数及相关知识
2014/11/03 PHP
PHP获取一年中每个星期的开始和结束日期的方法
2015/02/12 PHP
PHP简单判断iPhone、iPad、Android及PC设备的方法
2016/10/11 PHP
PHP判断数组是否为空的常用方法(五种方法)
2017/02/08 PHP
js取滚动条的尺寸的函数代码
2011/11/30 Javascript
原生Js页面滚动延迟加载图片实现原理及过程
2013/06/24 Javascript
Javascript执行效率全面总结
2013/11/04 Javascript
经过绑定元素时会多次触发mouseover和mouseout事件
2014/02/28 Javascript
jQuery Form 表单提交插件之formSerialize,fieldSerialize,fieldValue,resetForm,clearForm,clearFields的应用
2016/01/23 Javascript
JS实现Select的option上下移动的方法
2016/03/01 Javascript
jQuery Mobile和HTML5开发App推广注册页
2016/11/07 Javascript
微信小程序 input输入框控件详解及实例(多种示例)
2016/12/14 Javascript
JS实现的系统调色板完整实例
2016/12/21 Javascript
JS实现直接运行html代码的方法
2017/03/13 Javascript
微信小程序的分类页面制作
2017/06/27 Javascript
微信小程序使用wxParse解析html的方法教程
2018/07/06 Javascript
JS正则表达式验证端口范围(0-65535)
2020/01/06 Javascript
[02:27]2014DOTA2国际邀请赛 VG赛后采访:更大的挑战在等着我们
2014/07/13 DOTA
[36:33]完美世界DOTA2联赛循环赛 Matador vs Forest 第一场 11.06
2020/11/06 DOTA
Python标准库sched模块使用指南
2017/07/06 Python
python对DICOM图像的读取方法详解
2017/07/17 Python
python读取与写入csv格式文件的示例代码
2017/12/16 Python
Windows下anaconda安装第三方包的方法小结(tensorflow、gensim为例)
2018/04/05 Python
python中ASCII码字符与int之间的转换方法
2018/07/09 Python
解决python测试opencv时imread导致的错误问题
2019/01/26 Python
django的model操作汇整详解
2019/07/26 Python
html5 冒号分隔符对齐的实现
2019/07/31 HTML / CSS
小天鹅官方商城:LittleSwan
2017/06/16 全球购物
建筑工程管理专业自荐信范文
2013/12/28 职场文书
班级安全教育实施方案
2014/02/23 职场文书
经典而简洁的婚礼主持词
2014/03/13 职场文书
专题民主生活会对照检查材料思想汇报
2014/09/29 职场文书
银行授权委托书范本
2014/10/04 职场文书
党员组织生活会发言材料
2014/10/17 职场文书
公务员保密工作承诺书
2015/05/04 职场文书
丧事答谢词大全
2015/09/30 职场文书