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 相关文章推荐
常用表单验证类,有了这个,一般的验证就都齐了。
Dec 06 PHP
PHP冒泡排序算法代码详细解读
Jul 17 PHP
php ZipArchive压缩函数详解实例
Nov 06 PHP
详谈PHP文件目录基础操作
Nov 11 PHP
PHP滚动日志的代码实现
Jun 10 PHP
使用Codeigniter重写insert的方法(推荐)
Mar 23 PHP
删除PHP数组中头部、尾部、任意元素的实现代码
Apr 10 PHP
PHP编程实现的TCP服务端和客户端功能示例
Apr 13 PHP
apache集成php7.3.5的详细步骤
Jun 20 PHP
解决laravel 出现ajax请求419(unknown status)的问题
Sep 03 PHP
php 自定义函数实现将数据 以excel 表格形式导出示例
Nov 13 PHP
PHP7创建销毁session的实例方法
Feb 03 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
PHP5 操作MySQL数据库基础代码
2009/09/29 PHP
Ajax+PHP 边学边练 之二 实例
2009/11/24 PHP
php遍历文件夹和文件列表示例分享
2014/03/11 PHP
php防止网站被刷新的方法汇总
2014/12/01 PHP
php检查是否是ajax请求的方法
2015/04/16 PHP
PHP实现的简单网络硬盘
2015/07/29 PHP
php实现多维数组排序的方法示例
2017/03/23 PHP
PHP实现的Redis多库选择功能单例类
2017/07/27 PHP
PHP模版引擎原理、定义与用法实例
2019/03/29 PHP
js removeChild 障眼法 可能出现的错误
2009/10/06 Javascript
jQuery Ajax之load()方法
2009/10/12 Javascript
js重写alert控件(适合学习js的新手朋友)
2014/08/24 Javascript
js实现鼠标滚轮控制图片缩放效果的方法
2015/02/20 Javascript
jQuery基于cookie实现的购物车实例分析
2015/12/24 Javascript
jQuery javascript获得网页的高度与宽度的实现代码
2016/04/26 Javascript
jQuery简单实现title提示效果示例
2016/08/01 Javascript
JS实现的点击表头排序功能示例
2017/03/27 Javascript
JS实现动态给标签控件添加事件的方法示例
2017/05/13 Javascript
js推箱子小游戏步骤代码解析
2018/01/10 Javascript
js提取中文拼音首字母的封装工具类
2018/03/12 Javascript
js实现踩五彩块游戏
2020/02/08 Javascript
[00:43]2016完美“圣”典风云人物:单车宣传片
2016/12/02 DOTA
浅谈Python接口对json串的处理方法
2018/12/19 Python
Python生成一个迭代器的实操方法
2019/06/18 Python
python openpyxl使用方法详解
2019/07/18 Python
Python实现像awk一样分割字符串
2020/09/15 Python
Python word文本自动化操作实现方法解析
2020/11/05 Python
英国定做窗帘和纺织品面料一站式商店:Dekoria
2018/08/29 全球购物
编码转换,怎样实现将GB2312编码的字符串转换为ISO-8859-1编码的字符串
2014/01/07 面试题
平面网站制作专科生的自我评价分享
2013/12/11 职场文书
《水上飞机》教学反思
2014/04/10 职场文书
小学教师暑期培训方案
2014/08/28 职场文书
考试作弊被抓检讨书
2014/10/02 职场文书
党员群众路线剖析材料
2014/10/08 职场文书
班级光棍节联谊会策划书
2014/10/10 职场文书
公司趣味运动会开幕词
2016/03/04 职场文书