tl; dr: Geben Sie einen Standardtitel an und erlauben Sie dem Benutzer nicht, ihn zu ändern.
Der Änderungsdatensatz D7 → D8 lautet :
node_type-> has_title wurde zugunsten von Entitätsformularanzeigen entfernt
Jetzt, da es möglich ist, das Verhalten des Knotentitel-Widgets mithilfe von Entitätsformularanzeigen zu konfigurieren, wird das spezielle Flag zum Ausblenden des Titelformularelements für Knoten nicht mehr benötigt.
Um den Titel für einen bestimmten Knotentyp auszublenden, verwenden Sie die Benutzeroberfläche "Formularanzeige verwalten" oder verbergen Sie ihn mit einem Snippet wie dem folgenden:
$form_display = entity_get_form_display('node', 'article', 'default');
$form_display->removeComponent('title');
$form_display->save();
Nachdem ich das gelesen hatte, versuchte ich es auf verschiedene Arten. Nur der letzte funktioniert, daher sollte diese Antwort als Warnung dienen, was nicht zu versuchen ist:
Bearbeiten Sie die Konfiguration entity_form_display
Wenn es sich um Ihr eigenes Modul handelt, bearbeiten Sie core.entity_form_display.node.my_content_type.default.yml
den title
Schlüssel und entfernen Sie ihn aus content
. Dies funktioniert für Felder, aber wenn ich den Titel oder andere Standardelemente wie Heraufstufen, Erstellen usw. entferne, werden sie weiterhin im Formular unter angezeigt /node/add/my_content_type
.
Ändern Sie die Anzeige entity_form_display im Code
Fügen Sie diesen Code hinzu zu my_module_install
:
$form_display = entity_get_form_display('node', 'my_content_type', 'default');
$form_display->removeComponent('title');
$form_display->save();
Dies funktioniert visuell, es gibt jedoch drei Probleme mit dieser Lösung: - Es verursacht immer noch die Integritätsbeschränkungsfehler, auf die Sie verweisen. - Es bewirkt, dass die Konfiguration in der Datenbank die Konfiguration in der Datei bei der Installation überschreibt, was meiner Meinung nach eine schlechte Idee ist, IMHO. - entity_get_form_display
ist veraltet
Blenden Sie es in der Konfiguration entity_form_display aus
Verstecke es, aber entferne es nicht. In core.entity_form_display.node.my_content_type.default.yml
:
hidden:
title: false
Durch Versuch und Irrtum fand ich, dass die Logik hier umgekehrt wurde. Auch dies verursacht die Integritätsbeschränkungsfehler, auf die Sie verweisen.
Verstecke es mit CSS
Ich habe es versucht, und es scheint, dass leere Zeichenfolgen für den Titel ebenfalls nicht zulässig sind. Sie müssen also entweder Ihren eigenen Entitätstyp erstellen, der den größten Teil des Codes aus dem Kernknotenmodul neu implementiert, oder ...
Die einzige funktionierende Lösung, die ich finden konnte
Geben Sie einen Standardtitel an und erlauben Sie dem Benutzer nicht, ihn zu ändern.
function my_module_form_node_my_content_type_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) {
$form['title']['#disabled'] = 'disabled';
$form['title']['widget'][0]['value']['#default_value'] = 'none';
}
Sie können none
zu my_module
einem Zeitstempel oder Ihrer Lieblingsmarke für Erdnussbutter wechseln .
Node::setTitle
?