Wie kann ich die NID eines Knotens in den Titel eines Knotens einbetten?

8

Ich weiß, dass das Automatic Nodetitles- Modul existiert, aber es ist nur für Drupal 7.

Gibt es eine Methode zum automatischen Zuweisen des Titels mit der NID beim Klicken auf Senden? Ich weiß, dass die NID erst existiert, wenn der Senden-Button gedrückt wird. Wie würde man die NID in den Titel einbetten?

Welchen Haken würde man benutzen?

Patoshi パ ト シ
quelle
Haben Sie Auto EntityLabel für D8 ausprobiert? Ein Entwicklungszweig existiert. Haben Sie auch Regeln ausprobiert?
Kevin
@ Kevin leider ist Regel 8 MIA.
Kein Sssweat

Antworten:

5

Sie müssen zwei Schritte ausführen:

Schritt eins: Generieren Sie automatisch den Titel und das ausgeblendete Formular. Verwenden Sie hook_field_widget_form_alter () mit Code

function MY_MODULE_field_widget_form_alter(&$element, \Drupal\Core\Form\FormStateInterface $form_state, $context) {
  $field_definition = $context['items']->getFieldDefinition();
  $bundle = $form_state->getFormObject()->getEntity()->bundle();
  // You can check with other bundle
  if ($field_definition->getName() == 'title' && $bundle == 'page' && $element['value']['#default_value'] == '') {
    $element['#required'] = FALSE;
    //hidden title  
    $element['#type'] = 'hidden';
    $element['value']['#required'] = FALSE;
    // Set default value
    $element['value']['#default_value'] = 'Default Title';
  }
}

Mit Schritt eins können Sie das Übermittlungsformular kreuzen.

Schritt zwei: Überschreiben Sie den neuen Titel mit dem Standardwert. Verwenden Sie hook_node_insert ()

function MY_MODULE_node_insert(Drupal\node\NodeInterface $node) {
  if ($node->bundle() == 'page') {
    $new_title = 'New title ' . $node->id();
    $node->setTitle($new_title);
    $node->setNewRevision(FALSE);
    $node->save();  
  }
}
MrD
quelle
2
Wenn es die NID hat, die die einzigen Informationen sind, die erst nach dem Speichern verfügbar sind, ist dies der richtige Weg. Alles andere, wie das Datum oder ähnliches, wäre über den Presave-Hook möglich, was schneller wäre, da Sie nicht zweimal neu speichern müssten. Wenn Sie dies wirklich benötigen, sollten Sie auch eine Überprüfung hinzufügen, um sicherzustellen, dass der Titel nicht der Standard ist.
Berdir
1

Sie können das Hook Post Action- Modul verwenden

In diesem Modul werden daher mehrere neue Drupal-Hooks eingeführt, um diese Einschränkung zu überwinden

  • hook_entity_postsave
  • hook_entity_postinsert
  • hook_entity_postupdate
  • hook_entity_postdelete
  • hook_node_postsave
  • hook_node_postinsert
  • hook_node_postupdate
  • hook_node_postdelete

und wenn Sie es installiert haben, können Sie den hook_node_postsave()Haken verwenden

Auf der Modulseite für automatische Knotentitel heißt es:

Beachten Sie, dass eine besser gewartete Alternative verfügbar ist: https://www.drupal.org/project/auto_entitylabel

Adrian Cid Almaguer
quelle
0

Dies mag ein altes Problem sein, aber hier ist meine Meinung. Angenommen, Sie benötigen dies für den Artikel zum Hinzufügen von Knoten.

<?php

use Drupal\Core\Form\FormStateInterface;
use Drupal\node\NodeInterface;

function MYMODULE_form_node_article_form_alter(&$form, FormStateInterface $form_state, $form_id) {

    // Hide title field to avoid confusion
    $form['title']['#access'] = FALSE;
    // Set a temporary title because it's always required on node save.
    $form['title']['widget'][0]['value']['#default_value'] = 'Dummy title';

}

function MYMODULE_node_insert(NodeInterface $node) {
  if ($node->bundle() == 'article') {
    $new_title = 'Title ' . $node->id();
    $node->setTitle($new_title);
    $node->setNewRevision(FALSE);
    $node->save();
  }
}
JF Kiwad
quelle