将到期日期添加到Drupal中的节点

时间:2010-12-09 12:52:49

标签: drupal content-type drupal-modules

我想在Drupal中为自定义内容类型添加过期日期字段。它应该以天数(创建节点后7-15天)指定,并且在到达节点后不应该在站点中显示给访问者。但是我需要一个续订选项,允许创建者更新它并再次激活它。

难以实施吗?我怎么能这样做?

4 个答案:

答案 0 :(得分:2)

您是否已尝试搜索模块?

这是一个可能做到的技巧http://drupal.org/project/auto_expire。还有其他一些,但也许您应该检查它们以查看哪一个符合您的需求(或者如果需要可以轻松更改)。

答案 1 :(得分:1)

您可以使用视图来执行此操作。创建一个新视图,专门用于该类型的节点或更多节点,并使用“Node:Updated”对其进行过滤。然后指定您需要的天数。

您可以为原始海报创建一个视图,并让他更新帖子,这将重置计数器。

创意解决方案,但它应该有用。

答案 2 :(得分:0)

查看Node expire,根据Rules设置节点的计时器。对于更简单的方法,Scheduler可以做到。两者都是由wimvds链接的Auto Expire模块链接的,因此有一些重复措施,尽管它们似乎有不同的方法。

答案 3 :(得分:0)

以下代码可能会引起您的兴趣。这是我必须创建的模块的一个小片段,用于在Intranet站点上自动过期广告。在您在代码中指定的天数之后,节点只需取消发布,因此可能会从您的网站中隐藏,然后内容的作者可以根据需要重新发布节点。

/**
* Implementation of hook_cron().
*/
function auto_unpublish_pages_cron() {

  //we only want to deal with all blog_post content type nodes
  $c_type = 'blog_post';

  //grab all nodes
  $c_nodes = node_load_multiple(array(), array('type' => $c_type));

  //setup time stamp for node expiry
  $message_search_data = strtotime('- 7 days'); 

  //now loop through nodes, & if they are old, expire them

  foreach ($c_nodes as $m) {
    $obj = entity_metadata_wrapper('node', $m);

    //check when was last updated and if its still published
    $last_update = $obj->changed->value();

    $published = $obj->status->value();

    //if it's still published & it's not recent, unpublish it
    if (($message_search_date > $last_update) && $published<>0) {
      $obj->status = 0;
      $obj->save();

    }

  }   

}