elgg 获取文件图标地址的方法

2015-01-24信息快讯网

elgg本身有一套模板系统,可以加载图标。但是如果自己写了新的模板,怎样获得img的src地址呢?

过程如下:
首先,实体保存的时候用这个方法(系统本身的):
比如有一个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地址。
linux下为php添加curl扩展的方法
在WAMP环境下搭建ZendDebugger php调试工具的方法
MySQL连接数超过限制的解决方法
PHP Undefined index报错的修复方法
php中使用explode查找某个字符是否存在的方法
PHP导出MySQL数据到Excel文件(fputcsv)
php编程实现获取excel文档内容的代码实例
php设计模式 Delegation(委托模式)
使用php shell命令合并图片的代码
php中获取指定IP的物理地址的代码(正则表达式)
PHP下通过exec获得计算机的唯一标识[CPU,网卡 MAC地址]
fleaphp rolesNameField bug解决方法
php中将地址生成迅雷快车旋风链接的代码[测试通过]
php url地址栏传中文乱码解决方法集合
PHP为表单获取的URL 地址预设 http 字符串函数代码
初次接触php抽象工厂模式(Elgg)
ajax+php打造进度条 readyState各状态
PHP 解决utf-8和gb2312编码转换问题
ecshop 订单确认中显示省市地址信息的方法
php下获取客户端ip地址的函数
PHP 页面编码声明方法详解(header或meta)
PHP 最大运行时间 max_execution_time修改方法
PHP正则的Unknown Modifier错误解决方法
php 读取shell管道传输过来的内容
PHP 导出数据到淘宝助手CSV的方法分享
IP138 IP地址查询小偷实现代码
两个开源的Php输出Excel文件类
Linux下将excel数据导入到mssql数据库中的方法
php 操作excel文件的方法小结
PHP编程过程中需要了解的this,self,parent的区别
PHP获取163、gmail、126等邮箱联系人地址【已测试2009.10.10】
php 服务器调试 Zend Debugger 的安装教程
纯真IP数据库的应用 IP地址转化成十进制
Optimizer与Debugger兼容性问题的解决方法
©2014-2024 dbsqp.com