Score:0

ส่งอีเมลถึงผู้เขียนเมื่อมีการเผยแพร่เนื้อหาผ่านตัวกำหนดตารางเวลา

ธง rs

ฉันได้ใช้ กำหนดการ โมดูลด้วย การรวมการกลั่นกรองเนื้อหา เพื่อเผยแพร่เนื้อหาโดยอัตโนมัติ มันทำงานได้อย่างสมบูรณ์แบบโดยใช้โมดูล ตอนนี้ฉันต้องการเพิ่มฟังก์ชันที่เมื่อเผยแพร่เนื้อหาผ่าน cron แล้ว อีเมลจะถูกส่งไปยังผู้เขียนเนื้อหานั้น

ฉันได้ใช้ hook_scheduler_publish_action เพื่อดำเนินการนี้ แต่น่าเสียดายที่ฉันกำลังเผชิญกับสถานการณ์ที่แตกต่างออกไป

  1. ถ้าฉันลบรหัสเผยแพร่โหนดและเก็บเฉพาะรหัสการส่งจดหมาย จดหมายนั้นจะถูกไล่ออก
  2. ถ้าฉันลบรหัสการส่งจดหมายและเก็บเฉพาะรหัสเผยแพร่โหนด โหนดนั้นจะถูกเผยแพร่
  3. ถ้าฉันเก็บทั้งสองอย่าง จะส่งเฉพาะเมลเท่านั้น เนื้อหาจะไม่ถูกเผยแพร่

อ้างอิง: https://git.drupalcode.org/project/scheduler/blob/8.x-1.x/scheduler.api.php

โค้ดด้านล่างเป็นเพียงการเผยแพร่เนื้อหาไม่ใช่การส่งอีเมล

ฟังก์ชัน MYMODULE_scheduler_publish_action (NodeInterface $node) {
  // สถานะการดูแลโหนดจะเป็น 'เผยแพร่'
  $node->set('moderation_state', 'เผยแพร่แล้ว');
  $node->save();

  // ส่งอีเมลถึงผู้เขียน
  $mail_params = อาร์เรย์(
    'mail_subject' => 'เรียกใช้ cron',
    'mail_body' => '<p>โหนดเผยแพร่โดยใช้ตัวกำหนดตารางเวลา</p>',
    'mail_to' => '[email protected]'
  );

  \Drupal::service('MYMODULE.common_service')->FunctionToSendEmail($mail_params);
}

โค้ดด้านล่างเป็นเพียงการส่งอีเมลไม่ใช่การเผยแพร่เนื้อหา

ฟังก์ชัน MYMODULE_scheduler_publish_action (NodeInterface $node) {  
  // ส่งอีเมลถึงผู้เขียน
  $mail_params = อาร์เรย์(
  'mail_subject' => 'เรียกใช้ cron',
  'mail_body' => '<p>โหนดเผยแพร่โดยใช้ตัวกำหนดตารางเวลา</p>',
  'mail_to' => '[email protected]'
  );
  
  \Drupal::service('MYMODULE.common_service')->FunctionToSendEmail($mail_params);
  
  // สถานะการดูแลโหนดจะเป็น 'เผยแพร่'
  $node->set('moderation_state', 'เผยแพร่แล้ว');
  $node->save();
}

นั่นหมายความว่า hook นี้จะทำการกระทำแรกเท่านั้นและไม่สนใจการกระทำอื่น ๆ

ตอนนี้คำถามของฉันคือฉันจะดำเนินการหลายอย่างโดยใช้ hook นี้ได้อย่างไร หรือมีขั้นตอนอื่นในการทำเช่นนี้หรือไม่

โปรดช่วยฉันด้วย ขอบคุณล่วงหน้า.

Score:0
ธง cn

เดอะ โมดูลตัวจัดตารางเวลา ตัวเองให้เหตุการณ์บางอย่าง ซึ่งหนึ่งในนั้นคือ เผยแพร่. คุณจึงสร้างสมาชิกกิจกรรมในโมดูลและฟังกิจกรรมเผยแพร่ได้ดังนี้

class YourSchedulerEventSubscriber ใช้ EventSubscriberInterface {
  ฟังก์ชั่นสาธารณะ publishAndSendMail (SchedulerEvent $event) {
  /** @var \Drupal\node\Entity\Node $node */
  $node = $event->getNode();
  $node->set('moderation_state', $node->publish_state->getValue());

  $event->setNode($node);

  $mail_params = อาร์เรย์(
  'mail_subject' => 'เรียกใช้ cron',
  'mail_body' => '<p>โหนดเผยแพร่โดยใช้ตัวกำหนดตารางเวลา</p>',
  'mail_to' => '[email protected]'
  );
  \Drupal::service('MYMODULE.common_service')->FunctionToSendEmail($mail_params); // ดีกว่าที่จะส่งเป็น argunets บริการ
  }

  /**
   * {@inheritdoc}
   */
  ฟังก์ชั่นคงที่สาธารณะ getSubscribedEvents () {
    // ค่าในอาร์เรย์เป็นชื่อฟังก์ชันด้านบน
    $events[SchedulerEvents::PUBLISH][] = ['publishAndSendMail'];
    ส่งคืนเหตุการณ์ $;
  }
}
Souvik Das avatar
rs flag
ขอบคุณสำหรับความช่วยเหลือของคุณ ฉันจะลองดูในวันจันทร์อย่างแน่นอน คุณช่วยระบุลิงก์หรือบางอย่างที่ฉันสามารถรับรายชื่อกิจกรรมทั้งหมดเช่น 'เผยแพร่' ที่จัดทำโดยโมดูลตัวกำหนดตารางเวลานี้ได้ไหม ขอบคุณอีกครั้ง.
Souvik Das avatar
rs flag
นอกจากนี้ ฉันจะส่งพารามิเตอร์หลายตัวเป็นอาร์เรย์ในเมธอด `\Drupal::service` ได้อย่างไร เมื่อพารามิเตอร์บริการจะเป็นแบบไดนามิกตามสถานการณ์การเผยแพร่โหนดที่แตกต่างกัน คีย์ `mail_to` จะมีรหัสอีเมลที่แตกต่างกันซึ่งฉันต้องส่งผ่านบริการ ตามการอ้างอิงนี้ บริการ https://drupal.stackexchange.com/questions/237353/how-do-i-pass-parameters-to-a-service ไม่เหมาะในกรณีที่ฉันต้องการส่งพารามิเตอร์จากการเรียกใช้บริการ .
Alireza Tabatabaeian avatar
cn flag
เพื่อตอบคำถามแรกของคุณ คุณสามารถไปที่โมดูลตัวกำหนดตารางเวลาใน src/SchedulerEvents.php คุณจะพบรายการเหตุการณ์
Alireza Tabatabaeian avatar
cn flag
เมื่อคุณต้องการสร้างบริการและคุณต้องการบริการเพิ่มเติม เช่น MYMODULE.common_service เป็นอินพุต คุณสามารถเพิ่มเป็นอาร์กิวเมนต์ในไฟล์ services.yml ของคุณ (ต้องมี @ เพื่อพิจารณาว่าเป็นบริการ) ดังนั้นหากคุณต้องการพารามิเตอร์เพิ่มเติมซึ่งเป็น ไม่ใช่บริการประเภท ในกรณีของ eventsubscriber คุณต้องดึงข้อมูลเหล่านั้นจาก $event ตัวอย่างเช่น เพื่อรับผู้เขียนโหนด คุณสามารถหาได้จาก $event->node->getoWNER()
Souvik Das avatar
rs flag
รับปัญหาเดียวกันกับโซลูชันของคุณ ส่งอีเมลแล้ว แต่โหนดไม่เผยแพร่ เมื่อฉันลบรหัสการส่งจดหมาย โหนดจะถูกเผยแพร่
Christophe CARON avatar
in flag
To answer to Souvik Das, I found this in the module: * The six possible Scheduler events are: * SchedulerEvents::PRE_PUBLISH * SchedulerEvents::PUBLISH * SchedulerEvents::PRE_UNPUBLISH * SchedulerEvents::UNPUBLISH * SchedulerEvents::PRE_PUBLISH_IMMEDIATELY * SchedulerEvents::PUBLISH_IMMEDIATELY.

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา