добавить срок годности для узла в Drupal - PullRequest
1 голос
/ 09 декабря 2010

Я хочу добавить поле даты истечения срока действия в мой пользовательский тип контента в Drupal.он должен быть указан по дням (через 7-15 дней после создания узла) и после того, как он достигнет узла, не должен отображаться на сайте для посетителей.но мне нужна опция обновления, чтобы позволить создателю обновить его и активировать снова.

это слишком сложно для выполнения?как я могу это сделать?

Ответы [ 4 ]

2 голосов
/ 09 декабря 2010

Вы уже пробовали искать модули?

Вот один, который может сделать трюк http://drupal.org/project/auto_expire. Есть и другие, но, возможно, вы должны проверить их, чтобы увидеть, какой из них соответствует вашим потребностям(или может быть легко изменено при необходимости).

1 голос
/ 09 декабря 2010

Вы можете использовать Виды, чтобы сделать это.Создайте новое представление, специально для узла или нескольких узлов этого типа, и наложите на него фильтр с «Node: Обновлено».Затем укажите, сколько дней вам нужно.

Вы можете создать вид для оригинального постера и попросить его обновить пост, чтобы сбросить счетчик.

Творческое решение, но оно должно работать.

0 голосов
/ 22 ноября 2013

Следующий код может представлять интерес.Это небольшой фрагмент из модуля, который мне пришлось создать для автоматического истечения срока действия рекламы на сайте в интрасети.Узлы просто отменяют публикацию через несколько дней, которые вы указали в коде, поэтому они могут быть скрыты от вашего сайта, и тогда автор контента может просто повторно опубликовать узлы, если им это необходимо.

/**
* 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();

    }

  }   

}
0 голосов
/ 09 декабря 2010

Взгляните на Узел истекает , который устанавливает таймеры для узлов на основе Правил .Для более простого подхода Scheduler может сделать это.Оба связаны с модулем Auto Expire , связанным с помощью wimvds, поэтому существует некоторая степень дублирования, хотя, похоже, у них разные подходы.

...