我想创建一个动态的php日期格式。示例:显示节点的时间(如果它是今天发布的),仅显示今天更早的日期/月份。我希望这种格式在Drupal中可以像Drupal中的其他预定义日期格式一样使用(不仅仅是在主题级别上)。
我找到了hook_date_format_types的(仅限D7)钩子,但即使是那个似乎也没有允许我可以定义这个PHP逻辑的回调。
有谁知道哪个钩子会使这成为可能?或者这样做的模块?
答案 0 :(得分:1)
在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));
第二个选项是重新定义日期时间戳,但这既是hackish又是有限的。日期格式使用variable_get()定义,但不传递时间戳;因此,这种基于时间戳值切换格式的示例是不可能的。
在 settings.php :
中$conf['date_format_long'] = $conf['debug'] ? 'r' : 'l, F j, Y - H:i';
根据您的settings.php是否将标志“debug”设置为TRUE,这将从一个值切换到另一个值。如上所述:对此的使用是有限的,因为您无法获得任何上下文。
第三种方法是使用Date API提供onlinle可配置的时间格式。但这既笨拙又不安全(在数据库中输入可执行的PHP)。它还取决于一个非常大的模块集。并且与第一个解决方案具有相同的缺点:您不能使用format_date,但必须使用修改的函数调用,而不是format_date()
。查看The Drupal.org date themeing handbook上的所有选项。
GOTCHA 在所有情况下,Drupal都不会为缓存内容调用此函数。如果你想让日期真正动态,你需要避免全部缓存,或者在客户端javascript中实现日期格式。
TL; DR :如果不更改主题级别的某些代码,则无法使用动态日期格式。使用回调函数生成“自定义”日期格式是最简单,最有效的解决方案。
答案 1 :(得分:0)
您可以使用Date API模块添加自定义日期格式。 Date API模块位于Date模块中。启用Date API模块后,您可以使用路径“admin / settings / date-time / formats / add”添加自定义格式。
“admin / settings / date-time / formats / configure”是配置日期格式的路径。
看看这些。快乐的编码。
由于 RT
答案 2 :(得分:0)
您可以访问node.tpl.php(可能在sites / all / themes / theme_name / node.tpl.php中)。在这里你可以找到$ created变量,重新格式化日期你可以使用你的自定义函数并根据需要更改$ created。之后所有节点都将使用你的格式化日期。
Regatds, Chintan。
答案 3 :(得分:0)
使用功能模块。创建一个功能。
在结果要素模块中,在[feature] .module文件中,创建一个hook_nodeapi函数并使用条件语句格式化该字段,该条件语句考虑当前日期()以显示日期并将其输入$ node-&gt;内容变种
这就是rockstars这样做的方式( - ;