Alb*_*ski 5 drupal drupal-6 drupal-7
我想创建一个动态的PHP日期格式.示例:显示节点的时间(如果它是今天发布的),仅显示当天的旧日/月.我希望这种格式可以像Drupal中的其他预定义日期格式一样在整个Drupal中使用(不仅仅是在主题级别).
我找到了hook_date_format_types的(仅限D7)钩子,但即使是那个似乎也不允许我可以定义这个PHP逻辑的回调.
有谁知道哪个钩子会使这成为可能?或者这样做的模块?
在 Drupal6 中,format_date()
日期和时间是硬编码的。另外,format_date()
不允许回调,但它允许自定义字符串。这就是您可以应用技巧的地方:您可以调用返回字符串的函数,而不是对其中的字符串进行硬编码。
function mydate_format($timestamp) {
$now = time();
if (($now - $timestamp) < (60*60*24)) {
return "H:i";
}
else {
return "d:m:Y";
}
}
print format_date($timestamp, 'custom', mydate_format($timestamp));
Run Code Online (Sandbox Code Playgroud)
第二种选择是重新定义日期时间戳,但这既简单又有限。日期格式是用variable_get()定义的,但不传递时间戳;因此,您基于时间戳值切换格式的示例是不可能通过这种方式实现的。
在settings.php中:
$conf['date_format_long'] = $conf['debug'] ? 'r' : 'l, F j, Y - H:i';
Run Code Online (Sandbox Code Playgroud)
这将从一个值切换到另一个值,具体取决于您的 settings.php 是否将“debug”标志设置为 TRUE。如前所述:其用途是有限的,因为您无法获得任何上下文。
第三种选择是使用Date API,它提供在线可配置的时间格式。但这既笨拙又不安全(在数据库中输入可执行的 PHP)。它还依赖于一个非常大的模块集。并且与第一个解决方案具有相同的缺点:您不能使用 format_date,但必须使用修改后的函数调用,而不是format_date()
. 请参阅Drupal.org 日期主题手册中的所有选项。
在所有情况下, Drupal都不会为缓存内容调用此函数。如果你想让日期真正动态化,你要么需要完全避免缓存,要么在客户端 JavaScript 中实现日期格式。
TL;DR:如果不更改主题级别的某些代码,就无法拥有动态日期格式。使用回调函数生成“自定义”日期格式是最简单、有效的解决方案。
归档时间: |
|
查看次数: |
2815 次 |
最近记录: |