Перейти к основному содержанию
menu

Создавать комментарии программно в Drupal 8 невероятно легко, если вы знаете, какие поля являются обязательными и почему. В Drupal 8 комментарии представляют собой полнофункциональные, полевые объекты - как узлы или термины таксономии. В дополнение к унификации способов создания контента, комментариев и других сущностей, это сделало систему комментирования в Drupal гораздо более надежной и гибкой.

Недавно мне нужно было разрешить некоторым пользователям оставлять короткие заметки об узле (почти как заметки о ревизиях без ревизий). Только определенные пользователи смогут оставлять эти заметки, и они добавляются как часть пользовательской формы. Это означало, что администраторам нужно было самим обрабатывать комментарии. После долгих поисков я, наконец выяснил, как создавать комментарии вручную.

Чтобы создать новый комментарий, необходимо создать сущность комментария в коде, а затем сохранить ее. Обязательных полей много, и мы рассмотрим каждое из них ниже. Но сначала вот код:

// Для создания нового объекта комментария нам понадобится `use` (импорт) класса Comment.
используйте Drupal \ comment \ Entity \ Comment;
 
// Имя функции не имеет значения. Просто поместите тело функции там, где вам это нужно. 
function my_modules_function_or_method ( )  {
 
  // Сначала нам нужно создать массив значений полей для комментария. 
  $ values = [
 
    // Эти значения предназначены для сущности, для которой вы создаете комментарий, а не для самого комментария. 
    'entity_type' => 'node' ,             // требуется. 
    'entity_id'    => 42 ,                 // требуется. 
    'field_name'   => 'comment' ,          // обязательно.
 
    // Идентификатор пользователя автора комментария. Используйте 0 для анонимного пользователя. 
    'uid' => 0 ,                          // требуется.
 
    // Эти значения предназначены для самого комментария. 
    'comment_type' => 'comment' ,         // требуется. 
    'subject' => 'Мой потрясающий комментарий' ,   // требуется. 
    'comment_body' => $ body ,             // необязательно.
 
    // Является ли комментарий «одобренным» или нет. 
    'status' => 1 ,                       // необязательно. По умолчанию 0. 
  ] ;
 
  // Это создаст фактическую сущность комментария из наших значений поля. 
  $ comment = Comment :: create ( $ values ) ;
 
  // Наконец, нам нужно сохранить комментарий в базе данных. 
  $ comment -> save ( ) ;
}

Первые три обязательных поля сообщают Drupal, к какой сущности должен быть прикреплен комментарий.

entity_type: Это сущность, к которой вы хотите прикрепить комментарий. Например, если вы создаете комментарий к статье или базовой странице node.
entity_id: Идентификатор объекта, к которому вы хотите прикрепить комментарий. Если вы присоединяетесь к узлу, это будет его nid.
field_name: Поле объекта, к которому должен быть прикреплен этот комментарий.

Примечание : это что-то новое в Drupal 8. В D8 у вас может быть несколько полей комментариев для сущности, и поля этих комментариев могут использовать разные типы комментариев. Тип article содержимого по умолчанию - это единственный тип содержимого, который есть "из коробки" с полем comment. Если вы хотите включить комментарии для своего собственного типа контента, вы должны добавить свое собственное поле для комментариев, которое получает уникальное имя. Имя машины - это то значение, которое вы указывается здесь.
uid Поле сообщает Drupal , какой пользователь является автором комментария.

Все остальные значения относятся только к самому комментарию.

comment_type:Тип комментария для создания.

Примечание : это новое в Drupal 8. У вас могут быть разные типы комментариев с совершенно разными полями, например, узлы или термины таксономии. Тип комментария по умолчанию просто comment.


subject: Каждый комментарий имеет поле темы, как поле заголовка на узле.
comment_body: Это поле предоставляется по умолчанию так же, как body поле на узлах. Однако его можно удалить как любое другое поле.


status: Установите значение 1, если вы хотите, чтобы комментарий был автоматически одобрен. В противном случае администратор должен будет утвердить его.


field_foobar: Этого нет в примере, но типы комментариев могут иметь настраиваемые поля, как и любой другой объект контента. Если у вас есть настраиваемые поля в вашем типе комментария, вы можете просто использовать машинное имя поля и указать значение по умолчанию.

assistant Теги

keyboard_arrow_up