Điểm:0

Gửi email cho tác giả khi nội dung được xuất bản thông qua lịch biểu

lá cờ rs

tôi đã sử dụng Người lập kế hoạch mô-đun với tích hợp kiểm duyệt nội dung để xuất bản một nội dung tự động. Nó hoạt động hoàn hảo khi sử dụng mô-đun. Bây giờ tôi muốn thêm một chức năng mà sau khi nội dung được xuất bản qua cron, một email sẽ được gửi tới tác giả của nội dung cụ thể đó.

tôi đã sử dụng hook_scheduler_publish_action để thực hiện hành động này, nhưng tiếc là tôi đang phải đối mặt với một số tình huống khác.

  1. Nếu tôi xóa mã xuất bản nút và chỉ giữ lại mã gửi thư, thì thư sẽ bị kích hoạt.
  2. Nếu tôi xóa mã gửi thư và chỉ giữ lại mã xuất bản của nút, thì nút đó sẽ được xuất bản.
  3. Nếu tôi giữ cả hai, chỉ thư được gửi, nội dung không được xuất bản.

Giới thiệu: https://git.drupalcode.org/project/scheduler/blob/8.x-1.x/scheduler.api.php

Mã bên dưới chỉ xuất bản nội dung, không gửi email.

function MYMODULE_scheduler_publish_action(NodeInterface $node) {
  // trạng thái kiểm duyệt nút sẽ được 'xuất bản'
  $node->set('moderation_state', 'published');
  $node->save();

  // email gửi cho tác giả
  $mail_params = mảng(
    'mail_subject' => 'chạy cron',
    'mail_body' => '<p>nút được xuất bản bằng bộ lập lịch biểu</p>',
    'mail_to' => 'ai đó@email.com'
  );

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

Mã bên dưới chỉ gửi email, không xuất bản nội dung.

function MYMODULE_scheduler_publish_action(NodeInterface $node) {  
  // email gửi cho tác giả
  $mail_params = mảng(
  'mail_subject' => 'chạy cron',
  'mail_body' => '<p>nút được xuất bản bằng bộ lập lịch biểu</p>',
  'mail_to' => 'ai đó@email.com'
  );
  
  \Drupal::service('MYMODULE.common_service')->FunctionToSendEmail($mail_params);
  
  // trạng thái kiểm duyệt nút sẽ được 'xuất bản'
  $node->set('moderation_state', 'published');
  $node->save();
}

Điều đó có nghĩa là hook này chỉ thực hiện hành động đầu tiên và bỏ qua những hành động khác.

Bây giờ câu hỏi của tôi là làm thế nào tôi sẽ thực hiện nhiều hành động bằng cách sử dụng hook này hoặc có quy trình nào khác để thực hiện việc này không?

Làm ơn giúp tôi. Cảm ơn trước.

Điểm:0
lá cờ cn

Các Mô-đun lập lịch trình bản thân nó cung cấp một số sự kiện, một trong số đó là CÔNG BỐ. Vì vậy, bạn có thể tạo một người đăng ký sự kiện trong mô-đun của mình và lắng nghe sự kiện xuất bản như thế này:

lớp YourSchedulerEventSubscriber triển khai EventSubscriberInterface {
  chức năng công khai 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 = mảng(
  'mail_subject' => 'chạy cron',
  'mail_body' => '<p>nút được xuất bản bằng bộ lập lịch biểu</p>',
  'mail_to' => 'ai đó@email.com'
  );
  \Drupal::service('MYMODULE.common_service')->FunctionToSendEmail($mail_params); // Tốt hơn nên được gửi dưới dạng dịch vụ argumnets
  }

  /**
   * {@inheritdoc}
   */
  hàm tĩnh công khai getSubscribeEvents() {
    // Các giá trị trong mảng cung cấp tên hàm ở trên.
    $events[SchedulerEvents::PUBLISH][] = ['publishAndSendMail'];
    trả lại sự kiện $;
  }
}
Souvik Das avatar
lá cờ rs
Cảm ơn lòng giúp đỡ tốt bụng của bạn. Tôi chắc chắn sẽ thử vào thứ Hai. Bạn có thể vui lòng cung cấp cho tôi một liên kết hoặc thứ gì đó để tôi có thể nhận được danh sách đầy đủ các sự kiện như `XUẤT BẢN` được cung cấp bởi mô-đun Trình lập lịch biểu này không? Cảm ơn một lần nữa.
Souvik Das avatar
lá cờ rs
Ngoài ra, làm cách nào để tôi gửi nhiều tham số dưới dạng mảng trong phương thức `\Drupal::service` khi các tham số dịch vụ sẽ động dựa trên kịch bản xuất bản nút khác nhau? Khóa `mail_to` sẽ có các id email khác nhau mà tôi cần gửi qua dịch vụ. Theo giới thiệu này, https://drupal.stackexchange.com/questions/237353/how-do-i-pass-parameters-to-a-service dịch vụ không phù hợp trong trường hợp tôi cần chuyển tham số từ lệnh gọi dịch vụ .
Alireza Tabatabaeian avatar
lá cờ cn
để trả lời câu hỏi đầu tiên của bạn, bạn có thể truy cập mô-đun lên lịch trong src/SchedulerEvents.php, bạn có thể tìm thấy danh sách các sự kiện
Alireza Tabatabaeian avatar
lá cờ cn
khi bạn muốn xây dựng một dịch vụ và bạn cần nhiều dịch vụ hơn như MYMODULE.common_service làm đầu vào, bạn có thể thêm nó làm đối số trong tệp services.yml của mình (nó cần @ để được coi là dịch vụ), sau đó nếu bạn cần thêm tham số đó là không thuộc loại dịch vụ, thì trong trường hợp người đăng ký sự kiện, bạn cần tìm nạp chúng từ $event, ví dụ: để lấy tác giả nút, bạn có thể lấy từ $event->node->getoWNER()
Souvik Das avatar
lá cờ rs
Gặp vấn đề tương tự với giải pháp của bạn. Đã gửi email nhưng nút không được xuất bản. Khi tôi xóa mã gửi thư, nút sẽ được xuất bản.
Christophe CARON avatar
lá cờ in
Để trả lời Souvik Das, tôi đã tìm thấy điều này trong mô-đun: * Sáu sự kiện Trình lập lịch biểu có thể xảy ra là: * Sự kiện lên lịch::PRE_PUBLISH * Lập lịch sự kiện::Xuất bản * Sự kiện lên lịch::PRE_UNPUBLISH * SchedulerEvents::UNPUBLISH * Sự kiện lên lịch::PRE_PUBLISH_IMMEDIATELY * Sự kiện lập lịch biểu::Xuất bản_IMMEDIATELY.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.