Wie ändere / verstecke ich die Beschriftung des Eingabeelements im Formular (erstellen / bearbeiten)?

7

Wir können die Beschriftung eines beliebigen Feldes in tpl thematisieren oder einfach die Anzeigeoption verwalten ändern, uns aber fragen, wie Sie dasselbe in der Form tun können (während Sie einen Inhalt erstellen oder bearbeiten).

Ich suche nach der richtigen Möglichkeit, die Beschriftung zu ändern / auszublenden, insbesondere bei Feldersammlungsfeldern, wenn der Inhalt erstellt oder bearbeitet wird.

pown
quelle

Antworten:

20

Sie können dies mit hook_form_alter()oder hook_form_FORM_ID_alter()in Ihrem benutzerdefinierten Modul oder auch in der Datei template.php Ihres Themas tun .

function YOURMODULE_form_alter(&$form, &$form_state, $form_id) {
  // Check the form_id
  if ($form_id == 'YOUR_FORM_ID') {
    // To hide the label
    $form['your_form_element']['#title_display'] = 'invisible';
    // To alter the label
    $form['your_form_element']['#title'] = t('Your new title');
  }
}

Wenn Sie hook_form_FORM_ID_alter()stattdessen verwenden, müssen Sie die form_id nicht überprüfen.

Sie können weitere Informationen über die finden Formular - API - Referenz für die #titleund #title_displayAttribute, und auch alle anderen Formularelemente und deren Attribute.

Bei der Feldsammlung kann dies etwas kompliziert sein. Unten ist ein Beispielcode:

function YOURMODULE_form_YOUR_FORM_ID_alter(&$form, &$form_state, $form_id) {
  $your_field_collection = element_children($form['your_field_collection'][LANGUAGE_NONE];
  foreach ($your_field_collection as $key => $value) {
    if (is_numeric($value)) {
      $form['your_field_collection'][LANGUAGE_NONE][$val]['your_field_collection_field']['#title'] = t('Your new title');
      $form['your_field_collection'][LANGUAGE_NONE][$val]['your_field_collection_field']['#title_display'] = 'invisible';
    }
  }
}

Erläuterung des obigen Codes:

Zuerst habe ich die Feldsammlung selbst einer Variablen zugewiesen, um sie ein bisschen lesbar zu machen. Ich habe es der LANGUAGE_NONEEinfachheit halber verwendet, aber es wäre besser, es zu verwenden $form['your_field_collection']['#language']. Zugegeben, es macht das Lesen des gesamten Codes komplizierter.

Zweitens habe ich a verwendet foreach, da wir die meiste Zeit eine Feldsammlung verwenden, wenn wir mehrere Werte einer Feldsammlung haben möchten. Die foreachSchleife würde sich also um alle Instanzen der Feldsammlung kümmern.

Der dritte Hack ist ein schmutziger Trick, den ich von jemandem auf Drupal.org gelernt habe. Vielleicht gibt es einen besseren Ansatz, aber er funktioniert einfach, also habe ich mich nicht damit beschäftigt. Ich überprüfe, ob das $valuenumerisch ist, um alle anderen Metaattribute auszuschließen und nur die Elemente zu durchlaufen.

Dann ändere ich schließlich in jedem Element das Feld in der Feldsammlung.

Елин Й.
quelle
Vielen Dank. Aber im Falle einer
Feldsammlung ist
Dies ist sicherlich der Fall, aber die Feldsammlung ist etwas kompliziert, je nachdem, wie Sie das Feldsammlungsfeld konfigurieren. Wenn Sie das eingebettete Widget verwenden, sollten Sie in der Lage sein, die Felder in Ihrem Formulararray zu finden.
Елин Й.
Nur das eingebettete Widget, aber es passiert immer noch nichts. Ich versuche nichts mit Feldsammlung zu tun, aber mit Feldsammlungsfeldern möchte ich die Bezeichnung ändern
pown
1

Das wird dir helfen.

/**
 * Implements hook_field_widget_form_alter().
 */
function YOURMODULE_field_widget_form_alter(&$element, &$form_state, $context) {
  if (isset($element['#entity_type']) && $element['#entity_type'] == 'field_collection_item' && $element['#bundle'] == 'YOUR FIELD COLLECTION') {
    $element['value']['#title_display'] = 'invisible';
  }
}
Dmytro Danylevskyi
quelle
1

Das Modul field_display_label löst dieses Problem, indem es eine separate Anzeigebeschriftung hinzufügt.

Auf diese Weise wird die ursprüngliche Feldbezeichnung ausschließlich auf dem Erstellungs- / Bearbeitungsformular angezeigt, während die Anzeigebezeichnung (falls festgelegt) ausschließlich auf der Ansichtsseite angezeigt wird. Wenn Sie also die ursprüngliche Feldbezeichnung auf nichts setzen, können Sie die Bezeichnung nur im Erstellungs- / Bearbeitungsformular entfernen.

giorgio79
quelle
0

Mit hook_form_FORM_ID_alter (), das versucht, auf das Knotenbearbeitungsformular zu reagieren, hat dies für mich funktioniert:

function MYMODULE_form_NODE_TYPE_node_form_alter(&$form, &$form_state, $form_id) {
  $form['field_MY_FIELD']['und']['#title_display'] = 'invisible';
}

(Ersetzen Sie Ihre Werte durch Werte in ALL CAPS.)

byronveale
quelle