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 相关文章推荐
如何使用脚本模仿登陆过程
Nov 22 PHP
php in_array 函数使用说明与in_array需要注意的地方说明
Apr 13 PHP
PHP静态调用非静态方法的应用分析
May 02 PHP
php笔记之:数据类型与常量的使用分析
May 14 PHP
php的webservice的wsdl的XML无法显示问题的解决方法
Mar 11 PHP
C#使用PHP服务端的Web Service通信实例
Apr 08 PHP
PHP开发中常见的安全问题详解和解决方法(如Sql注入、CSRF、Xss、CC等)
Apr 21 PHP
php实现设计模式中的单例模式详解
Oct 11 PHP
php提取字符串中网站url地址的方法
Dec 03 PHP
PHP实现的XML操作类【XML Library】
Dec 29 PHP
PHP用continue跳过本次循环中剩余代码的注意点
Jun 27 PHP
Laravel获取当前请求的控制器和方法以及中间件的例子
Oct 11 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
首页四格,首页五格For6.0(GBK)(UTF-8)[12种组合][9-18][版主安装测试通过]
2007/09/24 PHP
php Smarty 字符比较代码
2011/02/27 PHP
PHP字符串长度计算 - strlen()函数使用介绍
2013/10/15 PHP
PHP利用APC模块实现文件上传进度条的方法
2015/01/26 PHP
php阿拉伯数字转中文人民币大写
2015/12/21 PHP
PHP 无限级分类
2017/05/04 PHP
PHP实现字符串的全排列详解
2019/04/24 PHP
this[] 指的是什么内容 讨论
2007/03/24 Javascript
js Flash插入函数免激活代码
2009/03/31 Javascript
jQuery点击tr实现checkbox选中的方法
2013/03/19 Javascript
用js实现trim()的解决办法
2013/04/16 Javascript
jquery在ie7下选择器的问题导致append失效的解决方法
2016/01/10 Javascript
通过bootstrap全面学习less
2016/11/09 Javascript
JS 验证密码 不能为空,必须含有数字、字母、特殊字符,长度在8-12位
2017/06/21 Javascript
vue实现todolist基本功能以及数据存储功能实例详解
2019/04/11 Javascript
vue实现日历备忘录功能
2020/09/24 Javascript
Vue中Table组件行内右键菜单实现方法(基于 vue + AntDesign)
2019/11/21 Javascript
python提取字典key列表的方法
2015/07/11 Python
python 内置函数filter
2017/06/01 Python
Python实现曲线点抽稀算法的示例
2017/10/12 Python
pyttsx3实现中文文字转语音的方法
2018/12/24 Python
python使用requests模块实现爬取电影天堂最新电影信息
2019/04/03 Python
python图像和办公文档处理总结
2019/05/28 Python
Python任意字符串转16, 32, 64进制的方法
2019/06/12 Python
Python实现 PS 图像调整中的亮度调整
2019/06/28 Python
微信小程序python用户认证的实现
2019/07/29 Python
Python常见反爬虫机制解决方案
2020/06/01 Python
python 中关于pycharm选择运行环境的问题
2020/10/31 Python
沪江旗下的海量优质课程平台:沪江网校
2017/11/07 全球购物
西班牙在线宠物食品和配件商店:bitiba
2019/10/11 全球购物
党员年终民主评议的自我评价
2013/11/05 职场文书
知名企业招聘广告词大全
2014/03/18 职场文书
党员岗位承诺口号大全
2014/03/28 职场文书
委托证明模板
2014/09/16 职场文书
城南旧事观后感
2015/06/11 职场文书
用golang如何替换某个文件中的字符串
2021/04/25 Golang