сообщение набора drupal на странице редактирования узла отображается дважды с крючком темы


Я хочу отобразить значение поля, к которому у пользователя нет доступа в dsm, когда пользователь редактирует страницу. dsm отображается после сохранения узла, и, хотя это нормально (я бы даже счел это функцией), он показывает значение узла до редактирования.

Я полагаю, что столкнулся с этой проблемой , но, похоже, ее нелегко решить. Вот посмотрите на функцию template.php.

function themename_form_vakature_node_form_alter(&$form){
    if(isset($form['#node']->field_vacature_scheduled_for_unp)){
        if($form['#node']->field_vacature_scheduled_for_unp['und'][0]['value']){
            $expirydate = date("F j Y",$form['#node']->field_unpublish_date['und'][0]['value']);

            if($form['#node']->field_unpublish_date['und'][0]['value'] < time()){
                drupal_set_message(t("This vacature has expired."),'status',FALSE);
            }
            else{
                drupal_set_message(t("This vacature will expire at: ").$expirydate,'status',FALSE);
            }
        }
    }
}

В основном, сообщение, отображаемое на странице редактирования, выглядит следующим образом повторяется после сохранения. Мне нужно, чтобы он либо не повторялся, либо показывал правильную обновленную информацию.

Author: J V, 2013-01-31

1 answers

Изменение формы изменяет форму, когда она создается для отображения.

Если вы хотите использовать значение на узле после обновления, используйте крючок, подобный

Вместо этого.

Чтобы настроить фрагмент кода, что-то вроде:

/**
 * Implements hook_node_presave
 */
function mymodule_node_presave($node){
  if ($items = field_get_items('node', $node, 'field_vacature_scheduled_for_unp')) {
    $vacature = reset($items); // Use first field item value
    $expirydate = date("F j Y", $vacature['value']);
    $items = field_get_items('node', $node, 'field_unpublish_date')
    $unpublish = reset($items); // Use first field value
    if ($unpublish['value'] < time()) {
      drupal_set_message(t("This vacature has expired."), 'status', FALSE);
    }
    else{
      drupal_set_message(t("This vacature will expire at: "). $expirydate, 'status', FALSE);
    }
  }
}
 0
Author: David Thomas, 2013-01-31 11:02:26