Làm cách nào để nhúng NID của nút trong tiêu đề của nút?


8

Tôi biết mô-đun Nodetitle tự động tồn tại, nhưng nó chỉ dành cho Drupal 7.

Có phương pháp nào tự động gán tiêu đề với NID khi nhấp vào gửi không? Tôi biết rằng NID không tồn tại cho đến khi nút gửi được nhấn. Làm thế nào một người có thể nhúng NID trong tiêu đề?

Móc nào người ta sẽ sử dụng?


Bạn đã thử Auto EntityLabel cho D8 chưa? Một nhánh dev tồn tại. Bạn cũng đã thử Rules?
Kevin

@Kevin thật không may, Quy tắc 8 là MIA.
Không có Sssweat

Câu trả lời:


5

Bạn cần làm hai bước:

Bước một: tự động tạo tiêu đề và hình thức ẩn. sử dụng hook_field_widget_form_alter () với mã

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

với bước một bạn có thể gửi mẫu đơn.

Bước hai: Ghi đè tiêu đề mới với giá trị mặc định. Sử dụng 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();  
  }
}

2
Nếu nó có nid, đó là thông tin duy nhất chỉ có sẵn sau khi lưu, thì đây là cách đúng đắn. Bất cứ điều gì khác, như ngày tháng hoặc một cái gì đó tương tự đều có thể xảy ra từ móc cài sẵn, sẽ nhanh hơn vì bạn sẽ không phải lưu lại hai lần. Nếu bạn thực sự cần điều này, bạn cũng nên thêm một kiểm tra để đảm bảo rằng tiêu đề không phải là mặc định.
Berdir

1

Bạn có thể sử dụng mô-đun Hook Post Action

Vì vậy, mô-đun này giới thiệu một số móc Drupal mới để khắc phục hạn chế này

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

và bạn đã cài đặt xong, bạn có thể sử dụng hook_node_postsave()hook

Trong trang mô-đun Nodetitle tự động cho biết:

Xin lưu ý rằng có một giải pháp thay thế được duy trì tốt hơn: https://www.drupal.org/project/auto_entitylabel


0

Đây có thể là một vấn đề cũ, nhưng đây là của tôi. Giả sử bạn cần điều này cho bài viết thêm nút.

<?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();
  }
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.