it-swarm.com.de

Wie erstelle ich eine benutzerdefinierte Regelaktion?

Ich habe drupal 8, und ich möchte eine benutzerdefinierte Regelaktion erstellen. Ich habe sie in Drupal 7) erstellt, und es funktioniert einwandfrei. Ich habe keine Ahnung wie es geht in Drupal 8.

Können Sie bitte erklären, welchen Code ich für Drupal 8) verwenden soll?

Drupal 7 Code

function custom_rules_action_info() {
    return array(
        'custom_action1' => array(
            'label' => t('custom_action1'),
            'group' => t('Custom'),
            'parameter' => array(
                'user_id' => array(
                    'type' => 'integer',
                    'label' => t('User ID'),
                    'description' => t('User ID.'),
                ),
            ),
            'provides' => array(
                'return_value' => array(
                    'type' => 'text',
                    'label' => t('User Created with return_value'),
                ),
            ),
        ),
    );
}
3
AshwinP

Überprüfen Sie die Aktionen des Moduls Regeln:

http://cgit.drupalcode.org/rules/tree/src/Plugin/RulesAction?h=8.x-3.x

Dies sind die Aktionen, die von den Regeln standardmäßig bereitgestellt werden.

Jede Aktionsklasse hat eine @RulesAction - Anmerkung. Verbinden Sie das und Sie sollten sehen, dass Ihre Regelaktion angezeigt wird. Denken Sie an die Annotation hier, die der in hook_rules_action_info() sehr ähnlich ist.

Die einzige Ausnahme ist, dass es nicht in der .module-Datei definiert wird, sondern in mymodule/src/Rules/Plugin/RulesAction/NameOfYourAction.php.

Hier ist ein Beispiel, wie es aussehen könnte:

namespace Drupal\mymodule\Plugin\RulesAction;

use Drupal\user\UserInterface;
use Drupal\rules\Core\RulesActionBase;

/**
 * Provides a 'custom action' action.
 *
 * @RulesAction(
 *   id = "mymodule_custom_action",
 *   label = @Translation("Custom Action"),
 *   category = @Translation("Custom"),
 *   context = {
 *     "user" = @ContextDefinition("entity:user",
 *       label = @Translation("User"),
 *       description = @Translation("Specifies the user we are taking action on.")
 *     ),
 *   }
 * )
 *
 */
class NameOfYourAction extends RulesActionBase {

  /**
   * Flag that indicates if the entity should be auto-saved later.
   *
   * @var bool
   */
  protected $saveLater = FALSE;

  /**
   * Does something to the user entity.
   *
   * @param \Drupal\user\UserInterface $account
   *   The user to take action on.
   */
  protected function doExecute(UserInterface $account) {
    // execution code
    // you may want to set $this->saveLater based on your use case
  }

  /**
   * {@inheritdoc}
   */
  public function autoSaveContext() {
    if ($this->saveLater) {
      return ['user'];
    }
    return [];
  }

}

Bitte beachten Sie, dass sich Rules zum Zeitpunkt des Schreibens im Alpha-Release-Status befindet. Dies kann sich mit nachfolgenden Versionen ändern.

5
Kevin