Bagaimana cara menanamkan NID node dalam judul node?

8

Saya tahu modul Nodetitles Otomatis ada, tetapi hanya untuk Drupal 7.

Apakah ada metode penugasan judul secara otomatis dengan NID saat mengklik ajukan? Saya tahu bahwa NID tidak ada sampai tombol kirim ditekan. Bagaimana seseorang menanamkan NID dalam judul?

Apa kait yang akan digunakan?

Patoshi パ ト シ
sumber
Sudahkah Anda mencoba Auto EntityLabel untuk D8? Cabang dev ada. Sudahkah Anda juga mencoba Aturan?
Kevin
@Kevin sayangnya, Aturan 8 adalah MIA.
No Sssweat

Jawaban:

5

Anda perlu melakukan dua langkah:

Langkah satu: buat judul dan formulir tersembunyi secara otomatis. gunakan hook_field_widget_form_alter () dengan kode

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';
  }
}

dengan langkah pertama Anda dapat mengirim formulir silang.

Langkah dua: Ganti judul baru dengan nilai default. Gunakan 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();  
  }
}
Tn
sumber
2
Jika memiliki nid, yang merupakan satu-satunya informasi yang hanya tersedia setelah disimpan, maka ini adalah cara yang benar. Hal lain, seperti tanggal atau sesuatu seperti itu akan dimungkinkan dari kait presave, yang akan lebih cepat karena Anda tidak perlu resave dua kali. Jika Anda benar-benar membutuhkan ini, Anda juga harus menambahkan tanda centang untuk memastikan bahwa judul tersebut bukan default.
Berdir
1

Anda dapat menggunakan modul Hook Post Action

Jadi modul ini memperkenalkan beberapa kait Drupal baru untuk mengatasi batasan ini

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

dan yang sudah Anda instal Anda dapat menggunakan hook_node_postsave()hook

Pada halaman modul Automatic Nodetitles tertulis:

Harap diperhatikan bahwa ada alternatif yang dikelola dengan lebih baik yang tersedia: https://www.drupal.org/project/auto_entitylabel

Adrian Cid Almaguer
sumber
0

Ini mungkin masalah lama, tapi inilah pendapat saya. Katakanlah Anda memerlukan ini untuk simpul tambahkan artikel.

<?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
sumber