Рейтинг:0

Я не вижу пользовательское действие

флаг us

Я пытаюсь создать пользовательское действие для массовых операций с коммерческими заказами.

Я использую следующий код.

mymodule/src/Plugin/Action/DeleteOrderAndApps.php

пространство имен Drupal\mymodule\Plugin\Action;
    
используйте Drupal\commerce_order\Entity\Order;
используйте Drupal\Core\Action\ActionBase;
используйте Drupal\Core\Session\AccountInterface;
используйте Drupal\node\Entity\Node;
    
/**
 * Удалить заказ и действие прикрепленных приложений
 *
 * @Действие(
 * id = "delete_order_and_apps",
 * label = @Translation("Удалить заказ и приложения"),
 * тип = "commerce_order"
 * )
 */
класс DeleteOrderAndApps расширяет ActionBase {

  /**
   * {@inheritdoc}
   *
   */
  выполнение публичной функции (заказ $order = NULL) {
    // ¦
  }

  /**
   * {@inheritdoc}
   */
  доступ к общедоступной функции ($ объект, AccountInterface $ учетная запись = NULL, $ return_as_object = FALSE) {
    $result = $object->access('удалить', $account, TRUE);
    вернуть $return_as_object ? $результат: $результат->разрешено();
  }
    
}

Я не уверен, что мне это нужно, но у меня также есть mymodule/config/install/system.action.delete_order_and_apps.yml файл.

код языка: en
статус: правда
зависимости:
  модуль:
    - commerce_order
идентификатор: delete_order_and_apps
label: 'Удалить заказ и приложения'
тип: commerce_order
плагин: delete_order_and_apps
конфигурация: { }

Запутанная часть заключается в том, что есть 2 разных массовых варианта: VBO и массовые действия ядра для объекта Order. К сожалению, они не используют одни и те же определения действий, но мое новое действие не отображается как вариант ни для одного из них при создании представления. Я сделал многие из них таким же образом, но все они являются действиями Node.

Не уверен, что что-то отсутствует в моем коде или, возможно, что-то отсутствует в Commerce, что требуется для добавления настраиваемых действий (возможно, что-то отсутствует в определении сущности).

Я использую Drupal 8.9.20 и модуль Commerce 8.x-2.24.

флаг id
В чем вопрос? Нам нужен один, чтобы ответить.
miststudent2011 avatar
флаг fr
Это помогает? https://drupal.stackexchange.com/questions/295329/custom-action-plugin-with-configurationform
liquidcms avatar
флаг us
@miststudent2011, эти сообщения, похоже, в основном посвящены добавлению конфигурации для действия, а это не вопрос. Единственная упомянутая там часть, которая отсутствует, это, возможно, файл .schema; но никогда не добавлял те для действия (узла), которые у меня есть.
Рейтинг:2
флаг cn

Предполагая, что вы используете основное поле «Массовое обновление», которое представление коммерческого заказа использует по умолчанию, вам необходимо создать действие как объект конфигурации.

У вас уже есть конфигурация для этого, но она будет использоваться только при установке модуля.Если вы можете удалить, а затем снова установить свой модуль, сделайте это, и вы увидите свое действие в представлениях, где оно должно быть:

введите описание изображения здесь

Если вы не можете переустановить модуль, добавьте хук обновления в mymodule.post_update.php, чтобы создать действие вручную, а затем запустите обновления базы данных:

функция mymodule_post_update_add_my_action() {
  \Drupal::entityTypeManager()->getStorage('action')->create([
    'id' => 'delete_orders_and_apps',
    'label' => 'Удалить заказ и приложения',
    'тип' => 'торговый_заказ',
    'плагин' => 'delete_order_and_apps',
  ])->сохранить();
}

Если вы используете VBO, вам не нужно создавать объект конфигурации, модуль выполнит действие без него. Если это не работает, убедитесь, что все названо правильно, кеши очищены и т. д., так как это определенно есть:

введите описание изображения здесь

liquidcms avatar
флаг us
приятно знать, что я делал это правильно. И я подумал, что это может быть вызвано только удалением/переустановкой модуля. Я сделал это вчера, прежде чем я опубликовал это. Сегодня я загрузил свежую копию базы данных с нашего производственного сайта, запустил импорт конфигурации и многочисленные перестройки кеша, прежде чем увидел ваш ответ и вернулся, чтобы посмотреть на это - и после дневных действий он теперь появляется. Не уверен, что это было, что вызвало это, но рад узнать, что это работает, как я ожидал. Спасибо за очень подробный ответ.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.