ฉันกำลังพัฒนาฟอรัมที่ใช้ Drupal และฉันกำลังใช้โมดูล Message Stack รวมกับโมดูลแบบกำหนดเองเวอร์ชันปรับแต่งนี้ https://github.com/Lullabot/message_integration
แนวคิดคือผู้ใช้ทุกคนจะได้รับอีเมลเมื่อมีการโพสต์เธรดใหม่ แต่เฉพาะผู้ใช้ที่สมัครรับเธรดเท่านั้นที่จะได้รับการแจ้งเตือนสำหรับความคิดเห็นที่เหลืออยู่ในเธรดนั้น
ส่วนที่ผู้คนได้รับอีเมลสำหรับชุดข้อความใหม่กำลังทำงานอยู่ แต่เมื่อมีการแสดงความคิดเห็น ผู้ใช้ทุกคนจะได้รับการแจ้งเตือนทางอีเมลเกี่ยวกับสิ่งนั้นด้วย ณ จุดนี้ ฉันไม่สามารถบอกได้ว่าปัญหาอยู่ที่โมดูลแบบกำหนดเองหรือกับการสมัครรับข้อความ ฉันเปิดการแก้ไขจุดบกพร่องแล้ว แต่ไม่เห็นข้อความใด ๆ เกี่ยวกับการตัดสินว่าใครควรหรือไม่ส่งอีเมลถึง มีเพียงข้อความที่กำลังเตรียมข้อความและส่งเท่านั้น
โมดูลที่กำหนดเองของฉันไม่แตกต่างจากที่ Lullabot ตั้งค่าไว้
นี่คือรหัสที่สร้างรายชื่อสมาชิก:
ฟังก์ชัน message_integration_subscribe_options_comment() {
$query = \Drupal::entityQuery('ผู้ใช้')
->เงื่อนไข ('สถานะ', 1);
$query->condition('uid', [0, 1], 'ไม่เข้า');
$subscribe_uids = $query->execute();
$notifiers = ['อีเมล'];
$subscribe_options = [
'แจ้งเจ้าของข้อความ' => FALSE
'uids' => [],
];
foreach ($subscribe_uids เป็น $uid) {
$subscribe_options['uids'][$uid] = new DeliveryCandidate([], $notifiers, $uid);
}
คืน $subscribe_options;
}
และนี่คือโค้ดสำหรับการแสดงความคิดเห็น:
ฟังก์ชัน message_integration_comment_insert (ความคิดเห็น $comment) {
// ดูว่าควรข้ามการจัดการนี้หรือไม่
$config = \Drupal::config('message_integration.settings');
$skip = $config->get('ข้าม');
ถ้า (!empty($skip)) {
กลับ;
}
$node = $comment->get('entity_id')->first()->get('entity')->getTarget()->getValue();
ถ้า (!in_array($node->bundle(), MESSAGE_INTEGRATION_CONTENT_TYPES)) {
กลับ;
}
// สร้างข้อความ
$message = ข้อความ::สร้าง([
'เทมเพลต' => 'create_comment',
'uid' => $node->getOwnerId(),
]);
$message->set('field_comment_reference', $comment);
$message->set('field_published', $comment->isPublished());
$message->save();
// จัดคิวข้อความเพื่อแจ้งสมาชิกโหนดทั้งหมดเกี่ยวกับความคิดเห็นใหม่
$subscribers = \Drupal::service('message_subscribe.subscribers');
// สร้างรายชื่อสมาชิกที่กำหนดเองเพื่อแจ้งเตือนผู้ใช้ที่ใช้งานอยู่ทั้งหมด
// นี่คือการสิ้นสุดการทำงานในระบบการสมัครสมาชิกแฟล็กปกติเนื่องจากเรา
// ไม่ต้องการสมัครผู้ใช้ทุกรายในเนื้อหาทุกชิ้น
$subscribe_options = message_integration_subscribe_options_comment();
$options = $subscribe_options;
foreach ($subscribe_options['uids'] เป็น $uid => $values) {
$options['uids'] = [$uid => $values];
$subscribers->sendMessage($node, $message, [], $ตัวเลือก);
}
}
ฉันเดินเป็นวงกลมและดึงผมออก ดังนั้นความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชม