tl; dr: Chỉ định tiêu đề mặc định và không cho phép người dùng thay đổi tiêu đề.
Trạng thái hồ sơ thay đổi D7 → D8 :
node_type-> has_title bị xóa theo hướng hiển thị biểu mẫu thực thể
Bây giờ có thể định cấu hình hành vi của tiện ích tiêu đề nút bằng cách sử dụng biểu mẫu Entity, cờ đặc biệt để ẩn phần tử biểu mẫu tiêu đề cho các nút không còn cần thiết nữa.
Để ẩn tiêu đề cho một loại nút nhất định, hãy sử dụng giao diện người dùng "Quản lý hiển thị biểu mẫu" hoặc ẩn nó bằng một đoạn như sau:
$form_display = entity_get_form_display('node', 'article', 'default');
$form_display->removeComponent('title');
$form_display->save();
Sau khi đọc nó, tôi đã thử một vài cách để làm điều đó. Chỉ có câu cuối cùng hoạt động, vì vậy câu trả lời này sẽ đóng vai trò là lời cảnh báo về những điều không nên thử:
Chỉnh sửa cấu hình entity_form_display
Nếu đó là mô-đun của riêng bạn, hãy chỉnh sửa core.entity_form_display.node.my_content_type.default.yml
và xóa title
khóa khỏi content
. Điều này hoạt động cho các trường, nhưng nếu tôi loại bỏ tiêu đề hoặc bất kỳ thứ mặc định nào khác như quảng cáo, tạo, v.v., chúng vẫn được hiển thị trên biểu mẫu tại /node/add/my_content_type
.
Sửa đổi thực thể_form_display trong mã
Thêm mã này vào my_module_install
:
$form_display = entity_get_form_display('node', 'my_content_type', 'default');
$form_display->removeComponent('title');
$form_display->save();
Điều này hoạt động trực quan, nhưng có ba vấn đề với giải pháp này: - Nó vẫn gây ra các lỗi ràng buộc toàn vẹn mà bạn đề cập đến. - Nó làm cho cấu hình trong cơ sở dữ liệu ghi đè lên cấu hình trong tệp khi cài đặt, đó là một ý tưởng tồi, IMHO. - entity_get_form_display
không được dùng nữa
Ẩn nó trong cấu hình entity_form_display
Ẩn nó đi, nhưng đừng xóa nó. Trong core.entity_form_display.node.my_content_type.default.yml
:
hidden:
title: false
Bằng cách thử nghiệm và lỗi, tôi tìm thấy logic được đảo ngược ở đây. Điều này cũng gây ra các lỗi ràng buộc toàn vẹn mà bạn đề cập đến.
Ẩn nó bằng CSS
Tôi đã thử điều này và dường như các chuỗi trống cũng không được phép cho tiêu đề. Vì vậy, bạn phải tạo loại thực thể của riêng mình, nó sẽ tái hiện hầu hết mã từ mô-đun nút lõi hoặc ...
Giải pháp làm việc duy nhất tôi có thể tìm thấy
Chỉ định tiêu đề mặc định và không cho phép người dùng thay đổi tiêu đề.
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';
}
Bạn có thể đổi none
thành my_module
dấu thời gian hoặc nhãn hiệu bơ đậu phộng yêu thích của bạn.
Node::setTitle
?