Vì lý do nào đó, người đăng ký sự kiện nguồn cấp dữ liệu của tôi vừa ngừng hoạt động.
Mã của tôi trông như thế này, dpm để gỡ lỗi không bao giờ được kích hoạt nên tôi nghĩ chức năng này không được chạy.
Tôi không thể tìm ra những gì đã thay đổi.
không gian tên Drupal\partshub_feeds_modifications\EventSubscriber;
sử dụng Drupal\feeds\Event\EntityEvent;
sử dụng Drupal\feeds\Event\FeedsEvents;
sử dụng Symfony\Component\EventDispatcher\EventSubscriberInterface;
/**
* Phản ứng với các sự kiện nguồn cấp dữ liệu để sửa đổi thuộc tính nguồn cấp dữ liệu.
*/
lớp FeedsSubscriber triển khai EventSubscriberInterface {
/**
* {@inheritdoc}
*/
hàm tĩnh công khai getSubscribeEvents() {
sự kiện $ = [];
$events[FeedsEvents::PROCESS_ENTITY_PRESAVE][] = 'lưu trước';
$events[FeedsEvents::PROCESS_ENTITY_POSTSAVE][] = 'postsave';
trả lại sự kiện $;
}
/**
* Hành động lưu trước một thực thể.
*
* @param Drupal\feeds\Event\EntityEvent $event
* Sự kiện nguồn cấp dữ liệu.
*/
lưu trước chức năng công cộng (EntityEvent $event) {
dpm($event);
// Lấy đối tượng feed.
$feed = $event->getFeed();
// Lấy thực thể đang được vận hành.
if ($feed->type->entity->id() === 'parts') {
$entity = $event->getEntity();
// Lấy thực thể không thay đổi.
$unchanged_entity = \Drupal::entityTypeManager()
->getStorage('nút')
->loadUnchanged($entity->id());
// Kiểm tra xem thực thể có mới không.
if (!$entity->isNew()) {
// Chỉ khi một phần không phải là giá trị kiểm tra mới.
if ($feed->type->entity->label() === 'Parts') {
if ($entity->get('title')->value === 'trống') {
$entity->get('title')->value = $unchanged_entity->get('title')->value;
}
// Phần phù hợp/tạo trường.
if ($entity->get('field_make')->isEmpty()) {
$makes = $unchanged_entity->get('field_make')->referencedEntities();
foreach ($làm như $index => $term) {
$tid = $term->id();
nếu ($index == 0) {
$entity->set('field_make', $tid);
}
khác {
$entity->get('field_make')->appendItem([
'đích_id' => $tid,
]);
}
}
}
// Phần mã nhóm.
if ($entity->get('field_group_code')->isEmpty()) {
$codes = $unchanged_entity->get('field_group_code')
->tham chiếuEntities();
foreach ($codes as $index => $code) {
$code_id = $code->id();
nếu ($index == 0) {
$entity->set('field_group_code', $code_id);
}
khác {
$entity->get('field_group_code')->appendItem([
'đích_id' => $code_id,
]);
}
}
}
// Tham chiếu chéo.
if ($entity->get('field_cross_references')->isEmpty()) {
$references = $unchanged_entity->get('field_cross_references')
->tham chiếuEntities();
foreach ($tham chiếu dưới dạng $index => $reference) {
$reference_id = $reference->id();
nếu ($index == 0) {
$entity->set('field_cross_references', $reference_id);
}
khác {
$entity->get('field_cross_references')->appendItem([
'target_id' => $reference_id,
]);
}
}
}
}
elseif ($feed->type->entity->label() === 'Thuộc tính vật lý') {
if ($entity->get('title')->value === 'trống') {
$entity->get('title')->value = $unchanged_entity->get('title')->value;
}
// Trọng lượng một phần.
if ($entity->get('field_weight')->isEmpty()) {
$entity->get('field_weight')->value = $unchanged_entity->get('field_weight')->value;
}
// Phần Chiều Cao.
if ($entity->get('field_height')->isEmpty()) {
$entity->get('field_height')->value = $unchanged_entity->get('field_height')->value;
}
// Phần Chiều rộng.
if ($entity->get('field_width')->isEmpty()) {
$entity->get('field_width')->value = $unchanged_entity->get('field_width')->value;
}
// Độ sâu của phần.
if ($entity->get('field_depth')->isEmpty()) {
$entity->get('field_depth')->value = $unchanged_entity->get('field_depth')->value;
}
}
}
}
}
/**
* Hành động lưu trước một thực thể.
*
* @param Drupal\feeds\Event\EntityEvent $event
* Sự kiện nguồn cấp dữ liệu.
*/
chức năng công khai postave(EntityEvent $event) {
$feed = $event->getFeed();
$feeds = ['oe_references', 'sub_components', 'dimensions'];
$id = $feed->type->entity->id();
nếu (in_array($id, $feeds)) {
$entity = $event->getEntity();
$parent_field_name = $entity->parent_field_name->value;
$parent_id = $entity->parent_id->value;
$vid = \Drupal::entityTypeManager()->getStorage('node')->getLatestRevisionId($parent_id);
$part = \Drupal::entityTypeManager()->getStorage('node')->loadRevision($vid);
$paragraph_references = $part->get($parent_field_name)->referencedEntities();
$paragraph_references_id = [];
nếu ($paragraph_references) {
foreach ($paragraph_references là $paragraph_reference) {
$paragraph_references_id[] = $paragraph_reference->id();
}
}
if (!in_array($entity->id(), $paragraph_references_id)) {
trường $ = [
'field_oe_references', 'field_sub_components_', 'field_dimensions'
];
if (in_array($parent_field_name, $fields)) {
nếu ($ một phần) {
$part->{$parent_field_name}[] = $entity;
$part->save();
}
}
}
}
}
}
Tôi cũng có một định nghĩa dịch vụ như sau.
dịch vụ:
# Tên của dịch vụ này.
parthsub_feeds_modifications_events_subscriber:
# Lớp người đăng ký sự kiện sẽ lắng nghe các sự kiện.
lớp: Drupal\partshub_feeds_modifications\EventSubscriber\FeedsSubscriber
# Được gắn thẻ là người đăng ký sự kiện để đăng ký người đăng ký này với dịch vụ event_dispatch.
thẻ:
- { tên: event_subscriber }