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 相关文章推荐
如何删除多级目录
Oct 09 PHP
常用的php ADODB使用方法集锦
Mar 25 PHP
php面向对象全攻略 (十六) 对象的串行化
Sep 30 PHP
Windows和Linux中php代码调试工具Xdebug的安装与配置详解
May 08 PHP
php中操作memcached缓存进行增删改查数据的实现代码
Aug 15 PHP
WordPress导航菜单的滚动和淡入淡出效果的实现要点
Dec 14 PHP
php  PATH_SEPARATOR判断当前服务器系统类型实例
Oct 28 PHP
Yii2实现log输出到file及database的方法
Nov 12 PHP
thinkphp5 加载静态资源路径与常量的方法
Dec 24 PHP
Laravel关联模型中过滤结果为空的结果集(has和with区别)
Oct 18 PHP
分享几种好用的PHP自定义加密函数(可逆/不可逆)
Sep 15 PHP
如何利用PHP实现上传图片功能详解
Sep 24 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
fleaphp常用方法分页之Pager使用方法
2011/04/23 PHP
PHP和Mysqlweb应用开发核心技术 第1部分 Php基础-1 开始了解php
2011/07/03 PHP
PHP中register_globals参数为OFF和ON的区别(register_globals 使用详解)
2012/02/05 PHP
php弹出提示框的是实例写法
2019/09/26 PHP
鼠标经过的文本框textbox变色
2009/05/21 Javascript
js 获取Listbox选择的值的代码
2010/04/15 Javascript
jQuery学习笔记之jQuery的动画
2010/12/22 Javascript
JS替换文本域内的回车示例
2014/02/18 Javascript
jQuery遍历json中多个map的方法
2015/02/12 Javascript
基于JavaScript如何实现ajax调用后台定义的方法
2015/12/29 Javascript
JS转换HTML转义符的方法
2016/08/24 Javascript
AngularJs  Using $location详解及示例代码
2016/09/02 Javascript
JavaScript评论点赞功能的实现方法
2017/03/13 Javascript
Vue源码学习之初始化模块init.js解析
2017/11/02 Javascript
vue2.0 如何把子组件的数据传给父组件(推荐)
2018/01/15 Javascript
Vue2.0结合webuploader实现文件分片上传功能
2018/03/09 Javascript
JavaScript高级函数应用之分时函数实例分析
2018/08/03 Javascript
Jquery实现无缝向上循环滚动列表的特效
2019/02/13 jQuery
vue动画效果实现方法示例
2019/03/18 Javascript
js实现随机数小游戏
2019/06/28 Javascript
详解Vue中的基本语法和常用指令
2019/07/23 Javascript
vue项目打包后请求地址错误/打包后跨域操作
2020/11/04 Javascript
[27:02]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第三场
2014/05/24 DOTA
Python标准库笔记struct模块的使用
2018/02/22 Python
Python打包方法Pyinstaller的使用
2018/10/09 Python
Python从list类型、range()序列简单认识类(class)【可迭代】
2019/05/31 Python
使用pickle存储数据dump 和 load实例讲解
2019/12/30 Python
Laravel中Kafka的使用详解
2021/03/24 PHP
会计专业推荐信
2013/10/29 职场文书
小学门卫岗位职责
2013/12/17 职场文书
列车长先进事迹材料
2014/01/25 职场文书
规范化管理年活动总结
2014/08/29 职场文书
六查六看个人剖析材料
2014/10/14 职场文书
小石潭记导游词
2015/02/03 职场文书
企业法律事务工作总结
2015/08/11 职场文书
Python实战之用tkinter库做一个鼠标模拟点击器
2021/04/27 Python