ด้วยเหตุผลบางประการ สมาชิกกิจกรรมฟีดของฉันเพิ่งหยุดทำงาน
รหัสของฉันมีลักษณะเช่นนี้ dpm สำหรับการดีบักไม่เคยถูกไล่ออก ดังนั้นฉันคิดว่าฟังก์ชันนี้ไม่ได้ถูกเรียกใช้
ฉันคิดไม่ออกว่ามีอะไรเปลี่ยนแปลง
เนมสเปซ Drupal\partshub_feeds_modifications\EventSubscriber;
ใช้ Drupal\feeds\Event\EntityEvent;
ใช้ Drupal\feeds\Event\FeedsEvents
ใช้ Symfony\Component\EventDispatcher\EventSubscriberInterface;
/**
* ตอบสนองต่อเหตุการณ์ฟีดเพื่อแก้ไขคุณสมบัติของฟีด
*/
Class FeedsSubscriber ใช้ EventSubscriberInterface {
/**
* {@inheritdoc}
*/
ฟังก์ชั่นคงที่สาธารณะ getSubscribedEvents () {
$เหตุการณ์ = [];
$events[FeedsEvents::PROCESS_ENTITY_PRESAVE][] = 'บันทึกล่วงหน้า';
$events[FeedsEvents::PROCESS_ENTITY_POSTSAVE][] = 'บันทึกหลัง';
ส่งคืนเหตุการณ์ $;
}
/**
* ทำหน้าที่ในการอนุรักษ์เอนทิตี
*
* @param Drupal\feeds\Event\EntityEvent $event
* เหตุการณ์ฟีด
*/
ฟังก์ชั่นสาธารณะ presave (EntityEvent $event) {
dpm(เหตุการณ์ $);
// รับวัตถุฟีด
$feed = $event->getFeed();
// รับเอนทิตีที่กำลังดำเนินการอยู่
ถ้า ($feed->type->entity->id() === 'ส่วน') {
$entity = $event->getEntity();
// รับเอนทิตีที่ไม่เปลี่ยนแปลง
$unchanged_entity = \Drupal::entityTypeManager()
->getStorage('โหนด')
->loadUnchange($entity->id());
// ตรวจสอบว่าเอนทิตีใหม่หรือไม่
ถ้า (!$entity->isNew()) {
// เฉพาะในกรณีที่ไม่ใช่ค่าตรวจสอบใหม่
ถ้า ($feed->type->entity->label() === 'ส่วน') {
ถ้า ($entity->get('title')->value === 'empty') {
$entity->get('title')->value = $unchanged_entity->get('title')->value;
}
// ส่วนประกอบ / สร้างฟิลด์
ถ้า ($entity->get('field_make')->isEmpty()) {
$makes = $uncanged_entity->get('field_make')->referencedEntities();
foreach ($ ทำให้เป็น $index => $term) {
$tid = $term->id();
ถ้า (ดัชนี $ == 0) {
$entity->set('field_make', $tid);
}
อื่น {
$entity->get('field_make')->ผนวกรายการ([
'target_id' => $tid,
]);
}
}
}
// รหัสกลุ่มส่วน
ถ้า ($entity->get('field_group_code')->isEmpty()) {
$codes = $unchange_entity->get('field_group_code')
->referencedEntities();
foreach ($codes เป็น $index => $code) {
$code_id = $code->id();
ถ้า (ดัชนี $ == 0) {
$entity->set('field_group_code', $code_id);
}
อื่น {
$entity->get('field_group_code')->appendItem([
'target_id' => $code_id,
]);
}
}
}
// การอ้างอิงโยง.
ถ้า ($entity->get('field_cross_references')->isEmpty()) {
$references = $unchange_entity->get('field_cross_references')
->referencedEntities();
foreach ($references เป็น $index => $reference) {
$reference_id = $reference->id();
ถ้า (ดัชนี $ == 0) {
$entity->set('field_cross_references', $reference_id);
}
อื่น {
$entity->get('field_cross_references')->ผนวกรายการ([
'target_id' => $reference_id,
]);
}
}
}
}
elseif ($feed->type->entity->label() === 'แอตทริบิวต์ทางกายภาพ') {
ถ้า ($entity->get('title')->value === 'empty') {
$entity->get('title')->value = $unchanged_entity->get('title')->value;
}
// น้ำหนักชิ้นส่วน
ถ้า ($entity->get('field_weight')->isEmpty()) {
$entity->get('field_weight')->value = $uncanged_entity->get('field_weight')->value;
}
// ส่วนสูง
ถ้า ($entity->get('field_height')->isEmpty()) {
$entity->get('field_height')->value = $uncanged_entity->get('field_height')->value;
}
// ความกว้างของส่วน
ถ้า ($entity->get('field_width')->isEmpty()) {
$entity->get('field_width')->value = $uncanged_entity->get('field_width')->value;
}
// ความลึกของชิ้นส่วน
ถ้า ($entity->get('field_ความลึก')->isEmpty()) {
$entity->get('field_ความลึก')->value = $uncanged_entity->get('field_ความลึก')->ค่า;
}
}
}
}
}
/**
* ทำหน้าที่ในการอนุรักษ์เอนทิตี
*
* @param Drupal\feeds\Event\EntityEvent $event
* เหตุการณ์ฟีด
*/
โพสต์ฟังก์ชั่นสาธารณะ (EntityEvent $ เหตุการณ์) {
$feed = $event->getFeed();
$feeds = ['oe_references', 'sub_components', 'dimensions'];
$id = $feed->type->entity->id();
ถ้า (in_array($id, $ฟีด)) {
$entity = $event->getEntity();
$parent_field_name = $entity->parent_field_name->ค่า;
$parent_id = $entity->parent_id->ค่า;
$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 = [];
ถ้า ($paragraph_references) {
foreach ($paragraph_references เป็น $paragraph_reference) {
$paragraph_references_id[] = $paragraph_reference->id();
}
}
ถ้า (!in_array($entity->id(), $paragraph_references_id)) {
$ฟิลด์ = [
'field_oe_references', 'field_sub_components_', 'field_dimensions'
];
ถ้า (in_array($parent_field_name, $fields)) {
ถ้า ($ ส่วน) {
$part->{$parent_field_name}[] = $entity;
$part->save();
}
}
}
}
}
}
ฉันยังมีคำจำกัดความบริการดังนี้
บริการ:
#ชื่อบริการ.
parthsub_feeds_modifications_events_subscriber:
# คลาสสมาชิกเหตุการณ์ที่จะฟังเหตุการณ์
คลาส: Drupal\partshub_feeds_modifications\EventSubscriber\FeedsSubscriber
# แท็กเป็น event_subscriber เพื่อลงทะเบียนสมาชิกนี้ด้วยบริการ event_dispatch
แท็ก:
- { ชื่อ: event_subscriber }