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 相关文章推荐
BBS(php & mysql)完整版(三)
Oct 09 PHP
php之字符串变相相减的代码
Mar 19 PHP
PHP学习之字符串比较和查找
Apr 17 PHP
php判断变量类型常用方法
Apr 24 PHP
屏蔽机器人从你的网站搜取email地址的php代码
Nov 14 PHP
php更新mysql后获取影响的行数发生异常解决方法
Mar 28 PHP
深入php list()函数的详解
Jun 05 PHP
THINKPHP内容分页代码分享
Jan 14 PHP
php防止网站被攻击的应急代码
Oct 21 PHP
初识ThinkPHP控制器
Apr 07 PHP
详解Laravel视图间共享数据与视图Composer
Aug 04 PHP
利用switch语句进行多选一判断的实例代码
Nov 14 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
农民和部队如何穿矿
2020/03/04 星际争霸
一个PHP的String类代码
2010/04/20 PHP
PHP接入微信H5支付的方法示例
2019/10/28 PHP
json 入门基础教程 推荐
2009/10/31 Javascript
JQuery与iframe交互实现代码
2009/12/24 Javascript
open 动态修改img的onclick事件示例代码
2013/11/13 Javascript
chrome不支持form.submit的解决方案
2015/04/28 Javascript
jQuery预加载图片常用方法
2015/06/15 Javascript
jQuery图片旋转插件jQueryRotate.js用法实例(附demo下载)
2016/01/21 Javascript
jQuery on()方法绑定动态元素的点击事件无响应的解决办法
2016/07/07 Javascript
javascript之IE版本检测超简单方法
2016/08/20 Javascript
js实现延迟加载的几种方法
2017/04/24 Javascript
Vue.js中的computed工作原理
2018/03/22 Javascript
npm全局模块卸载及默认安装目录修改方法
2018/05/15 Javascript
vuex进阶知识点巩固
2018/05/20 Javascript
vue实现父子组件之间的通信以及兄弟组件的通信功能示例
2019/01/29 Javascript
Vue3为什么这么快
2020/09/23 Javascript
[06:14]《辉夜杯》外卡赛附加赛 4支战队巡礼
2015/10/23 DOTA
用Python的urllib库提交WEB表单
2009/02/24 Python
爬山算法简介和Python实现实例
2014/04/26 Python
Python实现动态添加类的属性或成员函数的解决方法
2014/07/16 Python
零基础写python爬虫之抓取百度贴吧代码分享
2014/11/06 Python
Python选择排序、冒泡排序、合并排序代码实例
2015/04/10 Python
Python随手笔记第一篇(2)之初识列表和元组
2016/01/23 Python
使用Python的Django框架结合jQuery实现AJAX购物车页面
2016/04/11 Python
python3 实现的对象与json相互转换操作示例
2019/08/17 Python
Python调用shell命令常用方法(4种)
2020/05/11 Python
python基于pexpect库自动获取日志信息
2021/02/01 Python
CSS3动画animation实现云彩向左滚动
2014/05/09 HTML / CSS
深深扎根运动世界的生活品牌:Tillys
2017/10/30 全球购物
大学应届生求职简历的自我评价
2013/10/08 职场文书
感恩教育月活动总结
2014/07/07 职场文书
教师节主题班会教案
2015/08/17 职场文书
解决mysql问题:由于找不到MSVCR120.dll,无法继续执行代码
2021/06/26 MySQL
SQL实现LeetCode(180.连续的数字)
2021/08/04 MySQL
解决Vmware虚拟机安装centos8报错“Section %Packages Does Not End With %End. Pane Is Dead”
2022/06/01 Servers