it-swarm.com.de

Wie erstelle ich meine eigene einfache Aktion in D8?

Ich erstelle eine Ansicht, mit der migrierte Inhalte überprüft werden, die während des Migrationsprozesses zur Überprüfung markiert wurden. Ich möchte in dieser Ansicht eine Massenaktion bereitstellen, mit der der Benutzer eine Gruppe auswählen und als "gelöst" markieren kann.

Ich habe dazu eine benutzerdefinierte Aktion erstellt, die einigen Anweisungen von https://www.drupal.org/node/2330631 folgt:

config/install/pu_news_migrate.action.resolve_news_migration_flag.yml

langcode: en
status: true
dependencies:
  module:
    - node
id: resolve_news_migration_flag
label: 'Resolve news migration flag'
type: node
plugin: resolve_news_migration_flag
configuration: {  }

Und die Action Plugin Implementierung erstellt:

`src/Plugin/Action/ResolveNewsMigrationFlag.php

<?php

namespace Drupal\pu_news_migrate\Plugin\Action;

use Drupal\Core\Action\ActionBase;
use Drupal\Core\Session\AccountInterface;

/**
 * Removes the "needs review" flag on a migrated news article.
 *
 * @Action(
 *   id = "resolve_news_migration_flag",
 *   label = @Translation("Resolve news migration flag"),
 *   type = "node"
 * )
 */
class ResolveNewsMigrationFlag extends ActionBase {

  /**
   * {@inheritdoc}
   */
  public function execute($node = NULL) {
    if ($node) {
      /** @var \Drupal\node\NodeInterface $node */
      if (!$node->hasField('field_news_migration_review')) {
        throw new \RuntimeException("News migration field not found on node.");
      }
      $node->set('field_news_migration_review', FALSE);
      $node->save();
    }
  }

  /**
   * {@inheritdoc}
   */
  public function access($object, AccountInterface $account = NULL, $return_as_object = FALSE) {
    /** @var \Drupal\node\NodeInterface $object */
    $result = $object->field_news_migration_review->access('edit', $account, TRUE)
      ->andIf($object->access('update', $account, TRUE));

    return $return_as_object ? $result : $result->isAllowed();
  }

}

Ich habe auch eine Schemadatei hinzugefügt: config/schema/pu_news_migrate.schema.yml:

action.configuration.resolve_news_migration_flag:
  type: resolve_news_migration_flag
  label: 'Remove the "needs review" flag from a migrated article.'

Ich habe das Modul deinstalliert und neu installiert, damit die Aktionsdefinition in die Konfiguration von Drupal geladen wird.

Wenn ich jedoch die Liste der Aktionen ansehe, die ich in Ansichten auswählen kann, wird sie dort nicht angezeigt. Ich habe das Modul "Aktionen" aktiviert, das eine Liste aller Aktionen anzeigt und dort auch nicht angezeigt wird.

Was habe ich hier falsch gemacht?

4
Brian

Yaml-Definitionen für Aktions-Plugins müssen den Namen system.action.action_name.yml Vorangestellt haben und nicht mymodule.action_name.yml.

Überprüfen Sie als Referenz die bereitgestellten Aktions-Plugins für Knoten und Benutzermodul im Kern in den Ordnern config/install Und config/schema.

Deinstallieren Sie das Modul, benennen Sie die Dateien um und installieren Sie das Modul erneut, damit die Änderungen übernommen werden. Sie sollten dann Ihre benutzerdefinierte Aktion sehen.

Damit:

config/install/system.action.resolve_news_migration_flag.yml

9
Kevin