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全局变量和类配合使用深刻理解
Jun 05 PHP
php curl基本操作详解
Jul 23 PHP
php 购物车完整实现代码
Jun 05 PHP
PHP采集类snoopy详细介绍(snoopy使用教程)
Jun 19 PHP
php禁止浏览器使用缓存页面的方法
Nov 07 PHP
PHP实现批量生成App各种尺寸Logo
Mar 19 PHP
PHP SplObjectStorage使用实例
May 12 PHP
PHP+shell实现多线程的方法
Jul 01 PHP
PHP的Yii框架的常用日志操作总结
Dec 08 PHP
thinkPHP中验证码的简单使用方法
Dec 26 PHP
PHP模拟http请求的方法详解
Nov 09 PHP
PHP For循环字母A-Z当超过26个字母时输出AA,AB,AC
Feb 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/09/24 PHP
怎样搭建PHP开发环境
2015/07/28 PHP
php实现阳历阴历互转的方法
2015/10/28 PHP
PHP表单数据写入MySQL数据库的代码
2016/05/31 PHP
PHP符合PSR编程规范的实例分享
2016/12/21 PHP
支持汉转拼和拼音分词的PHP中文工具类ChineseUtil
2018/02/23 PHP
js数字输入框(包括最大值最小值限制和四舍五入)
2009/11/24 Javascript
js函数的引用, 关于内存的开销
2012/09/17 Javascript
基于JavaScript实现 获取鼠标点击位置坐标的方法
2013/04/12 Javascript
js触发select onchange事件的小技巧
2014/08/05 Javascript
异步JavaScript编程中的Promise使用方法
2015/07/28 Javascript
JavaScript判断FileUpload控件上传文件类型
2015/09/28 Javascript
理解Javascript文件动态加载
2016/01/29 Javascript
简单谈谈ES6的六个小特性
2016/11/18 Javascript
JS中append字符串包含onclick无效传递参数失败的解决方案
2016/12/26 Javascript
Vue.js基础学习之class与样式绑定
2017/03/20 Javascript
JavaScript队列的应用实例详解【经典数据结构】
2017/04/12 Javascript
javascript将url解析为json格式的两种方法
2017/08/18 Javascript
详解如何优雅地在React项目中使用Redux
2017/12/28 Javascript
微信小程序自定义modal弹窗组件的方法详解
2020/12/20 Javascript
Python操作json数据的一个简单例子
2014/04/17 Python
使用Python保存网页上的图片或者保存页面为截图
2016/03/05 Python
Python实现连接postgresql数据库的方法分析
2017/12/27 Python
Python简单计算给定某一年的某一天是星期几示例
2018/06/27 Python
在python中实现强制关闭线程的示例
2019/01/22 Python
解决python3.6用cx_Oracle库连接Oracle的问题
2020/12/07 Python
美国购买舞会礼服网站:Couture Candy
2019/12/29 全球购物
乡镇爱国卫生月活动总结
2014/06/25 职场文书
营销总经理岗位职责范本
2014/09/02 职场文书
国庆节促销广告语2014
2014/09/19 职场文书
幼儿园学前班幼儿评语
2014/12/29 职场文书
物业工程部岗位职责
2015/02/11 职场文书
公司文体活动总结
2015/05/07 职场文书
css3实现的加载动画效果
2021/04/07 HTML / CSS
JavaScript canvas实现流星特效
2021/05/20 Javascript
浅谈JavaScript作用域
2021/12/06 Javascript