Điểm:1

Làm cách nào tôi có thể tắt sửa đổi trên trường nút cụ thể

lá cờ de

Tôi hiện đang sử dụng hook_entity_extra_field_info() và hook_ENTITY_TYPE_view() để tạo trường tùy chỉnh được hiển thị trong các nút tạo nội dung động thông qua PHP.

Tuy nhiên, Drupal 9 dường như đang theo dõi các thay đổi đối với đầu ra của trường này mỗi khi tôi lưu bản sửa đổi nút, điều mà tôi không muốn vì nội dung của trường đó được tạo động và đã được kiểm soát phiên bản trong mô-đun tùy chỉnh.

Có cách nào để yêu cầu Drupal ở một trong những hook đó hoặc bất kỳ nơi nào khác trong cấu hình không theo dõi các bản sửa đổi cho một trường nút cụ thể không?

sonfd avatar
lá cờ in
Làm thế nào là nó theo dõi những thay đổi chính xác? Nó chỉ là một lĩnh vực hiển thị? hoặc là nó thực sự lưu trữ một giá trị trong cơ sở dữ liệu?
leymannx avatar
lá cờ ne
Chính xác thì `tạo nội dung động` có nghĩa là gì? Bạn có thể chỉ cho chúng tôi một số mã mẫu không? Nếu bạn tạo nội dung theo nghĩa đính kèm thứ gì đó vào cùng một nút, tất nhiên, việc sửa đổi sẽ bắt đầu nếu bạn không lưu trữ nội dung ở một nơi khác.Các trường giả thường chỉ được sử dụng để hiển thị đánh dấu được tính toán, không phải để tạo nội dung.
Điểm:0
lá cờ de

Vì nội dung của trường của bạn được tạo động nên có vẻ như bạn cần một trường được tính toán. Điều này sẽ loại bỏ vấn đề bạn đang gặp phải. Trường được tính toán là trường được tạo động, thay vì thông qua đầu vào của người dùng. Vì nó là một trường nên nó có thể được quản lý giống như bất kỳ trường nào khác trong Drupal (mặc dù việc tích hợp với Chế độ xem yêu cầu một số nỗ lực bổ sung). Các trường cũng được lưu vào bộ đệm bằng các API bộ đệm khác nhau của Drupal.

Để tạo một trường được tính toán, trước tiên hãy mở rộng Drupal\Core\Field\FieldItemList, sử dụng các Drupal\Core\TypedData\ComputedItemListTrait, và thực hiện các giá trị tính toán () phương pháp:

không gian tên Drupal\[EXAMPLE]\Plugin\Field;

sử dụng Drupal\Core\Field\FieldItemList;
sử dụng Drupal\Core\TypedData\ComputedItemListTrait;

lớp SomeDynamicField mở rộng FieldItemList {

  sử dụng ComputingItemListTrait;      

  /**
   * {@inheritdoc}
   */
  chức năng được bảo vệ computeValue() {
    $values ​​= some_function_to_get_an_array_of_values();
    foreach ($values ​​as $index => $value) {
      $this->list[$delta] = $this->createItem($delta, $value);
    }
  }
}

Tiếp theo, trường này cần được thêm vào từng loại thực thể mà bạn cần, trong hook_entity_base_field_info_alter():

sử dụng Drupal\Core\Entity\EntityTypeInterface;
sử dụng Drupal\Core\Field\BaseFieldDefinition;

/**
 * Triển khai hook_entity_base_field_info_alter().
 */
function EXAMPLE_entity_base_field_info_alter(&$fields, EntityTypeInterface $entity_type) {
  // Thêm/thay đổi các loại thực thể nếu cần.
  $applicable_entity_types = ['nút'];
  if (in_array($entity_type->id(), $applicable_entity_types)) {
    $fields['my_computed_field'] = BaseFieldDefinition::create('string')
      -> setName('example_field')
      ->setLabel(t('Trường được tính toán ví dụ'))
      ->setDescription(t('Ví dụ về trường được tính toán'))
      // Đặt trường là trường được tính toán.
      -> setComputing (TRUE)
      // Đặt lớp tạo (các) giá trị trường.
      ->setClass('\Drupal\[VÍ DỤ]\Plugin\Field\Computed\SomeDynamicField');
  }
}

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.