Puncte:0

Acțiune simplă personalizată după actualizarea unui nod

drapel cn

Încerc să creez o modalitate simplă de a executa anumite acțiuni în baza de date de fiecare dată când actualizez un nod.

M-am uitat la modulul de acțiune al Drupal, totuși nu găsesc manuale bune care să explice cum să-l folosesc.The Modulul ECA funcționează ca un mecanism de lansare a acțiunii mele, dar nu pot executa acțiunea mea și nu știu cum să procedez.

În prezent îmi creez propriul modul care va conține acțiunile mele. Următoarea clasă este clasa acțiunii mele.

<?php

spațiu de nume Drupal\my_custom_actions\Plugin\Action;

utilizați Drupal\Core\Action\ActionBase;
utilizați Drupal\Core\Session\AccountInterface;

/**
 * creați acțiuni personalizate
 *
 * @Acțiune(
 * id = "node_action",
 * label = @Translation ("Acțiunea bazei de date"),
 * tip = "nod"
 * )
 */
clasa DBAction extinde ActionBase {

    /**
     * {@inheritdoc}
     */
    funcția publică execute($nod = NULL) {
        dacă ($nod) {
            // TODO: procedură de executat în baza de date
            \Drupal::messenger()->addStatus('Execuția este OK și avem nodul');
        }
    }

    /**
     * {@inheritdoc}
     */
    acces la funcția publică ($obiect, AccountInterface $cont = NULL, $return_as_object = FALSE) {
        /** @var \Drupal\node\NodeInterface $obiect */
        // TODO: scrieți aici permisiunile dvs
        $rezultat = $obiect->access('update', $cont, TRUE);
        returnează $return_as_object ? $rezultat : $rezultat->este Permis();
    }

}

Fișierul config/schema/module_test.schema.yml astfel:

action.configuration.module_test:
  tip: node_action
  etichetă: „Acțiunea bazei de date”

config/install/system.action.node_action.yml

langcode: en
stare: adevărat
dependențe:
  modul:
    - nod
id: node_action
etichetă: „Exportați conținut”
tip: nod
plugin: node_action
configurație: { }

Cu toate acestea, după actualizarea unui nod, se întâmplă două lucruri:

  • Variabila $node a metodei execute apare întotdeauna ca nulă. Neintrund la if.
  • Variabila $object a metodei de acces vine întotdeauna ca nulă. Se afișează o eroare în $result = $object->access('update', $cont, TRUE);

Nu știu dacă acțiunile funcționează doar pentru operațiuni în vrac.Dar scopul meu este să execut o acțiune numai de fiecare dată când actualizez un nod. Sunt pe drumul cel bun folosind Actions sau nu? Documentarea Drupal nu mi se pare foarte intuitivă.

Mulțumiri!

Kevin avatar
drapel in
Răspunde asta la întrebarea ta? [Cum îmi creez propria acțiune simplă personalizată în D8?](https://drupal.stackexchange.com/questions/230742/how-to-create-my-own-custom-simple-action-in-d8)

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.