gpt4 book ai didi

drupal - 自定义日期格式(使用 php 逻辑回调)

转载 作者:行者123 更新时间:2023-12-04 21:50:01 25 4
gpt4 key购买 nike

我想创建一个动态的 php 日期格式。示例:显示节点的时间,如果它是今天发布的,并且只显示比今天更早的日期/月份。我希望这种格式在整个 Drupal 中都可用,就像 Drupal 中的其他预定义日期格式一样(不仅仅是在主题级别) .

我找到了 hook_date_format_types 的(仅限 D7)钩子(Hook),但即使那个钩子(Hook)似乎也不允许我可以定义这个 PHP 逻辑的回调。

有谁知道哪个钩子(Hook)可以做到这一点?或者一个这样做的模块?

最佳答案

在 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));

第二种选择是重新定义日期时间戳,但这既骇人听闻又受到限制。日期格式用 variable_get() 定义,但不传递时间戳;因此,您无法通过这种方式根据时间戳的值切换格式的示例。

在 settings.php 中:
$conf['date_format_long'] = $conf['debug'] ? 'r' : 'l, F j, Y - H:i';

这将根据您的 settings.php 是否将标志“调试”设置为 TRUE 从一个值切换到另一个值。如前所述:它的用途是有限的,因为您无法获得任何上下文。

第三种选择是使用 Date API它提供在线可配置的时间格式。但这既笨拙又不安全(在数据库中输入可执行的 PHP)。它还依赖于一个非常大的模块集。并且与第一个解决方案有相同的缺点:您不能使用 format_date,但必须使用修改后的函数调用,而不是 format_date() .查看 The Drupal.org date themeing handbook 上的所有选项.

明白了 在所有情况下,Drupal 都不会为缓存的内容调用此函数。如果您想让日期真正动态化,您要么需要避免一起缓存,要么在客户端 javascript 中实现日期格式。

TL;DR :如果不更改主题级别的某些代码,您将无法拥有动态日期格式。使用回调函数生成“自定义”日期格式是最简单、有效的解决方案。

关于drupal - 自定义日期格式(使用 php 逻辑回调),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6534708/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com