Elgg 2.6.3修改友好时间格式:替换相对时长为创建日期
修改Elgg 2.6.3的友好时间显示为具体创建日期
嘿,针对你想把Elgg 2.6.3里的相对时间(比如"posted 1780 Days ago")改成具体创建日期(比如"posted on Dec 20, 2011")的需求,我给你两种可行的方案,优先推荐第二种,避免修改核心文件影响后续升级:
方案1:直接修改核心函数(不推荐)
如果你能接受修改核心代码,直接替换elgg_get_friendly_time函数的逻辑即可。原函数的核心是计算时间差返回相对时长,我们把它改成直接输出格式化后的日期:
function elgg_get_friendly_time($time, $current_time = null) { // 验证时间戳有效性 if (!is_numeric($time)) { return ''; } // 用Elgg自带的本地化日期函数生成格式,也可以用PHP原生date() // elgg_echo_date支持多语言,适合多站点场景 return "posted on " . elgg_echo_date($time, 'F j, Y'); // 如果你不需要本地化,也可以用原生PHP函数: // return "posted on " . date('F j, Y', $time); }
改动说明:
- 移除了原函数中计算相对时间的所有逻辑,因为我们不需要再计算"多少天前"
- 增加了时间戳有效性检查,避免无效值导致错误
- 用
elgg_echo_date(或PHPdate)生成你需要的"月份 日期, 年份"格式,再拼接"posted on"前缀
方案2:用插件钩子覆盖(推荐)
Elgg支持通过钩子(hook)来修改核心函数的返回值,这样不需要改动核心文件,后续升级Elgg也不会丢失修改。在你的自定义插件的init.php中添加以下代码:
// 注册friendly_time钩子,覆盖默认的相对时间显示 elgg_register_plugin_hook_handler('friendly_time', 'all', function($hook, $type, $returnvalue, $params) { $time = $params['time']; // 无效时间戳则保留原返回值 if (!is_numeric($time)) { return $returnvalue; } // 返回格式化后的具体日期 return "posted on " . elgg_echo_date($time, 'F j, Y'); });
这个方法更符合Elgg的开发规范,而且不会破坏核心文件,是更稳妥的做法。
内容的提问来源于stack exchange,提问作者Lili.brh




