it-swarm.com.de

Wie entferne ich die Formatbeschreibung im Formularfeld date_popup?

Wie kann ich die Formatbeschreibung im Formularfeld date_popup entfernen?

$form['payable_by'] = array(
    '#type' => 'date_popup',
    '#title' => $amount !== '' ? t('Instalment payable date for instalment @label', array('@label' => $amount)) : t('Instalment payable date for new instalment'),
    '#title_display' => 'invisible',
    '#default_value' => $payable_by,
    '#parents' => array('instalment', $key, 'payable_by'),
        '#date_format' => 'Y-m-d',
        '#date_year_range' => '-0:+1',
  );

Bitte überprüfen Sie das Bild

enter image description here

5
Umar

Normalerweise setzen Sie einfach die Eigenschaft # description des Formularelements und es wird gerendert. Mit dem vom Date-Modul implementierten Element date_popup scheint dies nicht möglich zu sein: Das Formularelement besteht aus zwei Unterelementen, für die der Wert von # description Eigenschaft wird nicht berücksichtigt.

Da es zwei Zweige gibt, werde ich berichten, was ich im Entwicklungsschnappschuss für beide Zweige bemerkt habe.

Zweig 7.x-2

Das Element "date_popup" wird mit dem folgender Code definiert.

function date_popup_element_info() {
  $timepicker = date_popup_get_preferred_timepicker();
  $type['date_popup'] = array(
    '#input' => TRUE,
    '#tree' => TRUE,
    '#date_timezone' => date_default_timezone(),
    '#date_flexible' => 0,
    '#date_format' => variable_get('date_format_short', 'm/d/Y - H:i'),
    '#timepicker' => variable_get('date_popup_timepicker', $timepicker),
    '#date_increment' => 1,
    '#date_year_range' => '-3:+3',
    '#date_label_position' => 'above',
    '#process' => array('date_popup_element_process'),
    '#value_callback' => 'date_popup_element_value_callback',
    '#theme_wrappers' => array('date_popup'),
  );
  if (module_exists('ctools')) {
    $type['date_popup']['#pre_render'] = array('ctools_dependent_pre_render');
  }
  return $type;
}

Das Element verfügt über eine Prozessfunktion, die den folgenden Code ausführt.

  $element['#tree'] = TRUE;
  $element['#theme_wrappers'] = array('date_popup');

  if (!empty($element['#ajax'])) {
    $element['#ajax'] += array(
      'trigger_as' => array('name' =>$element['#name']),
      'event' => 'change',
    );
  }

  $element['date'] = date_popup_process_date_part($element);
  $element['time'] = date_popup_process_time_part($element);

Wenn ich mir den Code für date_popup_process_date_part() ansehe, bemerke ich den folgenden Code.

  $sub_element['#value'] = $sub_element['#default_value'];
  // TODO, figure out exactly when we want this description. In many places it is not desired.
  $sub_element['#description'] = ' '. t('E.g., @date', array('@date' => date_format_date(date_now(), 'custom', date_popup_date_format($element))));

Da der Code, den date_popup_element_process() vor der Rückgabe des Elements ausführt, der folgende ist, gibt es immer noch eine Alternative.

  $context = array(
   'form' => $form,
  );
  drupal_alter('date_popup_process', $element, $form_state, $context);

Wenn Sie hook_date_popup_process_alter() implementieren, können Sie die Beschreibung entfernen.

function mymodule_date_popup_process_alter(&$element, &$form_state, $context) {
  unset($element['date']['#description']);
  unset($element['time']['#description']);
}

Ein ähnlicher Code ist in der Verzweigung 6.x-2 vorhanden.

Zweig 7.x-1

Es gibt nur wenige Unterschiede zu dem zuvor beschriebenen Zweig. (Siehe das Code-Repository .)

Der erste ist der Code, der in date_popup_process_date_part() die folgende Beschreibung festlegt.

  $sub_element['#value'] = $sub_element['#default_value'];
  // TODO, figure out exactly when we want this description. In many places it is not desired.
  $sub_element['#description'] = ' '. t('Format: @date', array('@date' => date_format_date(date_now(), 'custom', date_popup_date_format($element))));
  return $sub_element;

Der zweite Unterschied besteht darin, dass date_popup_element_process() (die Prozessfunktion für dieses Element) hook_date_popup_process_alter() nicht aufruft.

function date_popup_element_process($element, $form_state, $form) {
  date_popup_add();
  module_load_include('inc', 'date_api', 'date_api_elements');

  $element['#tree'] = TRUE;
  $element['#theme_wrappers'] = array('date_popup');

  $element['date'] = date_popup_process_date($element);
  $element['time'] = date_popup_process_time($element);

  if (isset($element['#element_validate'])) {
    array_Push($element['#element_validate'], 'date_popup_validate');
  }
  else {
    $element['#element_validate'] = array('date_popup_validate');
  }
  return $element;
}

Die einzige Alternative in diesem Fall wäre die Implementierung von hook_element_info_alter () , um dem Element eine Prozessfunktion hinzuzufügen.

function mymodule_element_info_alter(&$type) {
  if (isset($type['date_popup'])) {
    $type['date_popup']['#process'][] = 'mymodule_date_popup_process';
  }
}

function mymodule_date_popup_process($element, $form_state, $complete_form) {
  unset($element['date']['#description']);
  unset($element['time']['#description']);

  return $element;
}

Der Code für Zweig 6.x-1 ähnelt dem Code für Zweig 6.x-2.

In beiden Fällen deutet der im Code des Datumsmoduls angegebene Kommentar darauf hin, dass der Code so geändert wird, dass die jetzt angezeigte Beschreibung nicht verwendet wird. Aus diesem Grund würde ich vorschlagen, den erforderlichen Code in einem benutzerdefinierten Modul zu implementieren und diesen Code zu entfernen, sobald das Datumsmodul geändert wird.

13
kiamlaluno

versuche dies:

function promo_quote_date_popup_process($element, $form_state, $complete_form) {
      unset($element['date']['#description']);
      unset($element['date']['#title']);
      return $element;
}
function promo_quote_element_info_alter(&$type) {
  if (isset($type['date_popup'])) {
    $type['date_popup']['#process'][] = 'promo_quote_date_popup_process';
  }
}
0
Hung Tran

In d 6.x gibt es keinen info_alter-Hook. Sie können dies jedoch mit pre_render lösen.

In Ihrer Formulardefinition oder nach Formularänderung müssen Sie eine pre_render-Definition hinzufügen. So zum Beispiel (in Formulardefinition):

$form['dateformname'] = array(
  '#title' => t('The date'),
  '#type' => 'date_popup',
  '#pre_render' => array('MODULENAME_date_prerender'),
);

Implementieren Sie dann diese Vorrenderfunktion, mit der Sie die Beschreibung des Datenunterelements deaktivieren können. Beispiel:

function MODULENAME_date_prerender($element) {
  unset($element['date']['#description']);
  return $element;
}
0
Thomas Brix