Puncte:0

Trimiteți e-mail autorului când conținutul este publicat prin planificator

drapel rs

am folosit Programator modul cu integrarea moderării conținutului pentru a publica un conținut automat. Funcționează perfect folosind modulul. Acum vreau să adaug o funcționalitate conform căreia, odată ce conținutul este publicat prin cron, un e-mail va fi trimis autorului respectivului conținut.

am folosit hook_scheduler_publish_action pentru a efectua această acțiune, dar, din păcate, mă confrunt cu un scenariu diferit.

  1. Dacă elimin codul de publicare al nodului și păstrez doar codul de trimitere a e-mailului, e-mailul este lansat.
  2. Dacă elimin codul de trimitere a e-mailului și păstrez numai codul de publicare a nodului, nodul este publicat.
  3. Dacă le păstrez pe amândouă, se trimit doar mail, conținutul nu este publicat.

Ref: https://git.drupalcode.org/project/scheduler/blob/8.x-1.x/scheduler.api.php

Codul de mai jos este doar publicarea conținutului, nu trimiterea de e-mail.

funcția MYMODULE_scheduler_publish_action(NodeInterface $nod) {
  // starea de moderare a nodului va fi „publicată”
  $nod->set('stare_moderare', 'publicat');
  $nod->salvare();

  // trimite e-mail autorului
  $mail_params = matrice(
    'mail_subject' => 'execută cron',
    'mail_body' => '<p>nodul publicat folosind programatorul</p>',
    'mail_to' => '[email protected]'
  );

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

Codul de mai jos trimite doar e-mailuri, nu publică conținut.

funcția MYMODULE_scheduler_publish_action(NodeInterface $nod) {  
  // trimite e-mail autorului
  $mail_params = matrice(
  'mail_subject' => 'execută cron',
  'mail_body' => '<p>nodul publicat folosind programatorul</p>',
  'mail_to' => '[email protected]'
  );
  
  \Drupal::service('MYMODULE.common_service')->FunctionToSendEmail($mail_params);
  
  // starea de moderare a nodului va fi „publicată”
  $nod->set('stare_moderare', 'publicat');
  $nod->salvare();
}

Asta înseamnă că acest cârlig efectuează doar prima acțiune și le ignoră pe altele.

Acum întrebarea mea este cum voi efectua mai multe acțiuni folosind acest cârlig sau există vreo altă procedură pentru a face acest lucru?

Vă rog să mă ajutați. Mulțumesc anticipat.

Puncte:0
drapel cn

The Modulul de planificare în sine oferă unele evenimente, care este unul dintre ele PUBLICA. Deci, puteți crea un abonat la eveniment în modulul dvs. și puteți asculta publicarea evenimentului astfel:

clasa YourSchedulerEventSubscriber implementează EventSubscriberInterface {
  funcția publică publishAndSendMail(SchedulerEvent $event) {
  /** @var \Drupal\nod\Entity\Node $node */
  $nod = $event->getNode();
  $node->set('stare_moderare', $nod->stare_publicare->getValue());

  $event->setNode($nod);

  $mail_params = matrice(
  'mail_subject' => 'execută cron',
  'mail_body' => '<p>nodul publicat folosind programatorul</p>',
  'mail_to' => '[email protected]'
  );
  \Drupal::service('MYMODULE.common_service')->FunctionToSendEmail($mail_params); //Mai bine să fie trimis ca argumente de serviciu
  }

  /**
   * {@inheritdoc}
   */
  funcție publică statică getSubscribedEvents() {
    // Valorile din tablouri dau numele funcțiilor de mai sus.
    $events[SchedulerEvents::PUBLISH][] = ['publishAndSendMail'];
    returnează $evenimente;
  }
}
Souvik Das avatar
drapel rs
Vă mulțumesc pentru ajutorul dumneavoastră amabil. Cu siguranta il voi incerca luni. Îmi puteți oferi, vă rog, un link sau ceva de unde să pot obține o listă completă de evenimente precum `PUBLICAȚI` furnizate de acest modul Scheduler? Multumesc din nou.
Souvik Das avatar
drapel rs
De asemenea, cum voi trimite mai mulți parametri ca matrice în metoda `\Drupal::service` când parametrii serviciului vor fi dinamici pe baza unui scenariu diferit de publicare a nodurilor? Tasta `mail_to` va avea ID-uri de e-mail diferite pe care trebuie să le trimit prin intermediul serviciului. Conform acestei referințe, https://drupal.stackexchange.com/questions/237353/how-do-i-pass-parameters-to-a-service serviciile nu sunt potrivite în cazurile în care trebuie să trec parametri de la apelul de service .
Alireza Tabatabaeian avatar
drapel cn
pentru a răspunde la prima întrebare, puteți accesa modulul de planificare din src/SchedulerEvents.php puteți găsi lista de evenimente
Alireza Tabatabaeian avatar
drapel cn
când doriți să construiți un serviciu și aveți nevoie de mai multe servicii precum MYMODULE.common_service ca intrare, îl puteți adăuga ca argument în fișierul dvs. services.yml (are nevoie de un @ pentru a fi considerat ca serviciu), atunci dacă aveți nevoie de mai mulți parametri care sunt nu de tip servicii, atunci într-un caz de abonat eveniment trebuie să le preluați de la $event, de exemplu, pentru a obține un autor de nod, îl puteți obține de la $event->node->getoWNER()
Souvik Das avatar
drapel rs
Întâmpinați aceeași problemă cu soluția dvs. E-mail trimis, dar nodul nu a fost publicat. Odată ce elimin codul de trimitere a e-mailului, nodul este publicat.
Christophe CARON avatar
drapel in
Pentru a răspunde la Souvik Das, am găsit asta în modul: * Cele șase evenimente posibile din Scheduler sunt: * SchedulerEvents::PRE_PUBLISH * SchedulerEvents::PUBLISH * SchedulerEvents::PRE_UNPUBLISH * SchedulerEvents::UNPUBLISH * SchedulerEvents::PRE_PUBLISH_IMMEDIATELY * SchedulerEvents::PUBLISH_IMMEDIATELY.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.