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

Drupal 自定义日期格式(使用php逻辑回调),drupal,drupal-6,drupal-7,Drupal,Drupal 6,Drupal 7,我想创建一个动态php日期格式。示例:如果节点是今天发布的,则显示该节点的时间,并且仅显示比今天更早的日期/月份。我希望这种格式在Drupal中可以像Drupal中的其他预定义日期格式一样使用(不仅仅是在主题级别上) 我找到了hook_date_format_类型的(仅限D7)钩子,但即使是这个钩子,似乎也不允许我在其中定义这个PHP逻辑的回调 有人知道哪一个钩子能让这成为可能吗?或者是执行此操作的模块?您可以使用日期API模块添加自定义日期格式。日期API模块位于日期模块内。启用日期API模块

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

我找到了hook_date_format_类型的(仅限D7)钩子,但即使是这个钩子,似乎也不允许我在其中定义这个PHP逻辑的回调


有人知道哪一个钩子能让这成为可能吗?或者是执行此操作的模块?

您可以使用日期API模块添加自定义日期格式。日期API模块位于日期模块内。启用日期API模块后,您可以通过路径“admin/settings/Date-time/formats/add”添加自定义格式

“管理/设置/日期时间/格式/配置”是配置日期格式的路径

看看这些。快乐编码

谢谢 RT

您可以转到node.tpl.php(可能在sites/all/themes/theme\u name/node.tpl.php中)。在这里你可以找到$created变量,要重新格式化日期,你可以使用你的自定义函数,并根据你的需要更改$created。在此之后,所有节点都将使用格式化日期

Regatds, Chintan.

在Drupal6中,日期和时间已硬编码。另外,不允许回调,但允许自定义字符串。这就是你可以应用技巧的地方:你不是在那里硬编码字符串,而是调用一个返回字符串的函数

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));
这将根据settings.php是否将标志“debug”设置为TRUE,从一个值切换到另一个值。如前所述:由于您无法获取任何上下文,因此对它的使用是有限的

第三种选择是使用,它只提供在线可配置的时间格式。但这既笨拙又不安全(在数据库中输入可执行PHP)。它还取决于一个非常大的模块集。并且与第一个解决方案具有相同的缺点:不能使用format\u date,但必须使用修改后的函数调用,而不是
format\u date()
。请参阅上的所有选项

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


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

使用功能模块。创建一个特征

在生成的功能模块中,在[feature].module文件上,创建一个hook_nodeapi函数,并使用条件语句格式化字段,该语句考虑当前日期()的显示方式,并将其输入$node->content变量


rockstars就是这样做的(-;

我知道date API模块,但这不是我想要的。请回顾一下问题:我想添加一种使用带有php逻辑的回调的格式。不是使用php date()的简单格式语法。如果在视图中将此日期显示为字段,则可以使用视图的字段模板文件来处理获得所需输出所需的PHP逻辑。另一方面,如果视图中不是日期字段,并且您只是使用节点的创建时间,则可以使用节点模板文件来格式化日期。我不是awar在任何可以用于日期格式的回调函数中,这是一个有趣的想法,我肯定可以看到一些应用程序。是的,我知道我可以在模板/预处理级别完成这项工作,但如果你能创建一个真正的全局自定义日期格式,它会更干净…我知道这一点,但这仍然不是我想要的我想创建一个可以在drupal中使用的动态php自定义格式。你的解决方案是在模板级别上的,并且只在特定的tpl中使用。嘿!!你应该修改你的问题,这有点让人困惑。你想更改站点范围节点的日期格式,请看粗体部分。
$conf['date_format_long'] = $conf['debug'] ? 'r' : 'l, F j, Y - H:i';