web-dev-qa-db-ja.com

アクションからカスタムフィールドにアクセスするにはどうすればよいですか?

D8のルールアクションでカスタムフィールド名field_heatにアクセスしたいのですが、受け付けません。これは私の状態です: enter image description here

そしてこれは受け入れられない私の行動です: enter image description here

Node.title.valueのようなビルドフィールドを使用する場合、問題なく機能するため、カスタムフィールドに問題があるはずです。 Rules 8.x-3.0-alpha1を使用しています。

2
Fotis Dimanidis

序文

問題nr 2574691のコメントnr 7 の記述に注意してください。

rules 8.x-3.0-alpha1 ...はプレビューリリースであり、本番サイト向けではありません。自己責任。

それを念頭に置いて、詳細を読んで rules 8.x-3.0-alfa1 で同様の実験を行ってください。

コンテンツタイプとフィールドの設定を確認する

  • ここでは、マシン名「field_image」のフィールドがすでにあるコンテンツタイプ「Article」を使用します(D8ボックスの外)。
  • これを確認するには、/admin/structure/types/manage/article/fieldsに移動します。

ルールを作成する

  • ルールモジュールを有効にします。
  • /admin/config/workflow/rulesに移動して、次の詳細を含む新しいルールを作成します。
    • 使用Rulesイベント「コンテンツを保存する前に」
    • 「エンティティにフィールドがある」(field_imageフィールド用)のようなRules Conditionを追加します。これを行うには、[値]([エンティティ]ボックス内)をクリックして、nodeを選択します。また、[値]([フィールド]ボックス内)をクリックし、field_imageを選択します。次に、 Save ボタン(ルール条件を保存するため)。
    • ルールアクション「データ値の設定」を追加し、同様に続行します。「値」(「データ」ボックス内)をクリックして選択します。 node:field_image:value(このデータセレクターでは、スクリーンプリントの:(2回)ではなく.(2回)を使用していることに注意してください)。また、「値」ボックス内に「値」を入力します(例:myNiceImage)。次に、 Save ボタン(ルールアクションを保存するため)。
    • 次に、「ルールの反応を編集」画面に戻ります(編集中のルールの場合。「変更が保存されていません。」のようなメッセージが表示されます。) Save ボタン(ルールを保存するため)。次に、「反応ルールABCが更新されました」のようなメッセージが表示されます。 (ABC =ルールに付けたラベル)。

ルールが保存されたかどうかを確認する

  • /admin/config/workflow/rulesに移動して、ルールが実際に保存されたことを確認します(ルールはそこに表示されます)。
  • admin/config/development/configuration/single/exportに移動し、「構成タイプ」として「反応ルール」を選択します。次に、ルールのラベルを「構成名」として選択します。
  • エクスポートされたルールが表示されるはずです。これは私のものに似ているはずです。

    uuid: ab289332-0b45-484f-a1ae-38842620b7e4
    langcode: en
    status: true
    dependencies: {  }
    id: check_a_field_before_saving_a_node
    label: 'Check a field before saving a node'
    events:
      -
        event_name: 'rules_entity_presave:node'
    description: ''
    tags:
      - ''
    config_version: '3'
    expression:
      id: rules_rule
      uuid: 354332c5-8307-4097-b33c-0e77307a5e0e
      conditions:
        id: rules_and
        uuid: e82407a4-05c6-45d3-8195-1c1b5f34a07d
        conditions:
          -
            id: rules_condition
            uuid: 3c9094ed-95ec-4202-8398-5a6ca000604a
            context_values:
              entity: node
              field: field_image
            context_mapping: {  }
            context_processors: {  }
            provides_mapping: {  }
            condition_id: rules_entity_has_field
            negate: false
      actions:
        id: rules_action_set
        uuid: 3313095c-f75a-46f2-8d11-f845d12a90f2
        actions:
          -
            id: rules_action
            uuid: 23a3a68e-893e-48c4-a7ee-102201af5a25
            context_values:
              data: 'node:field_image:value'
              value: myNiceImage
            context_mapping: {  }
            context_processors: {  }
            provides_mapping: {  }
            action_id: rules_data_set
    
  • 上記のエクスポートは、これを完全に保存できることを示しています。それ以外の場合はエクスポートできなかったためですよね?

限界を押し上げる

これまでのところ良好ですが、次に、ルールアクションで割り当てる値をupdateにしたかったので、myNiceImagemyNewestNiceImageに更新する必要があるとしましょう。そこで、ルールアクションに戻り、編集を開始しました。しかし、その結果、次のようなエラーメッセージが表示されました。

コンテキストデータは、セレクターを使用してのみ構成できます。

をクリックして Switch to data selection ボタン(ボタンのラベルが Swith to direct input mode)、そして再試行すると、次のような別のエラーメッセージが表示されます。

コンテキストデータのデータセレクターnode:field_imageが無効です。変数node:field_imageを取得できません。定義されていません。

それを行う方法が必要です...

そのため、ルールアクションの更新は、実行する必要があるものではないようです(少なくとも、現在のD8リリースのルールモジュールでは)。

ただし、実際に値を更新するために実行した手順(myNiceImageからmyNewestNiceImageへ)は次のとおりです。

  • ルールアクションを削除します(古い値myNiceImageを使用)。
  • 新しいルールアクションを作成します(新しい値myNewestNiceImageを使用)。

ほら!

PS:「Entity has field」を使用していて、「エンティティのタイプは "?

1
Pierre.Vriens

同じエラーが発生しました。私がしたことは:

  1. 構成の同期に移動します(構成>開発>構成の同期)
  2. 単一のアイテムをエクスポート:反応ルール>あなたのルール。生成されたテキストをコピーします。
  3. 作成した以前のルールを削除する
  4. 単一アイテムのインポート:反応ルール>生成されたテキストを貼り付けます。今回は、ルールが以前に受け入れていなかったフィールドの値を手動で変更します。
  5. 構造体を正しく構築した場合、ルールは機能します。
0
Sinan Erdem