web-dev-qa-db-ja.com

分類用語ごとにノード制限を実装するにはどうすればよいですか?

「制限」フィールドで分類を作成し、「制限」数内に用語を追加できるようにしました。以下はそのスクリーンプリントです。

enter image description here

私の質問:各用語を使用しているノードの数を制限して、「ノードの数」(=いくつかの用語を使用して)この「制限」フィールドを超えることはできませんか?

更新:@ Pierre.Vriens Answerを試してみましたが、まだ機能しないと思います。

The term + Limit field

Step 01: VBO

Step 2: Components

Step 3: Rule

4
a.alshamiri

RulesViews Bulk Operations モジュールと組み合わせて使用​​すると、これを機能させることができます。詳細については、以下の「ブループリント」を参照してください。

ステップ1

Views および Views Bulk Operations モジュールを使用して、VBOフィールドを追加する特定の分類用語を持つすべてのノードのビューを作成します。各ノードにnidのようなフィールドを含めるだけです(他のフィールドは必要ありません)。考慮したいノードごとに正確に1行を取得するようにしてください。

ステップ2

次のようにルールコンポーネントを作成します。

  • これらのルールコンポーネントパラメータの使用:

    • 'のデータタイプと一致するデータタイプのパラメータ「制限」フィールドのある分類 '(おそらく「整数」)、パラメーターにマシン名_node_limit_があると仮定しましょう。
    • ノードのコンテンツタイプで定義されている用語参照フィールドと一致するパラメーター。パラメーターがマシン名_node_termreference_を持っているとします(これは、定義した方法に応じて、単一の値または複数の値のいずれかになります)あなたのコンテンツタイプでそれを)。
  • ルール条件を使用すると、「VBOビューから返された結果の数を確認してください」、ただし:

    • 手順1で作成したVBOビューを選択します。
    • その結果の数が_node_limit_(このルールコンポーネントで使用される最初のパラメーター)以上であるかどうかを確認します。
  • ルールアクション:

    • 適切なDrupalメッセージを設定します(その用語のノード制限に既に達していること)。
    • _node_termreference_フィールド(このルールコンポーネントで使用される2番目のパラメーター)から入力された用語を削除します。そのために使用するルールアクションは、そのフィールドの定義方法によって異なります。たとえば、複数値フィールドの場合は、「リストから削除」を使用する必要があります。

ステップ3

次のようなカスタムルールを作成します。

  • ルールイベント
    • 新しいノードを保存する前(オプションで関連するコンテンツタイプに制限されます)。
    • 既存のノードを更新する前(オプションで関連するコンテンツタイプに制限されます)。
  • ルール条件
    • エンティティには、分類用語を参照するフィールド用のフィールドがあります(このフィールドを後続のルール条件/アクションでさらに処理できるようにするため)。より具体的には、これを(トークンとして)_node_termreference_パラメーターの値を指定して、後でステップ2のルールコンポーネントを実行する必要があります。
  • ルールアクション
    • エンティティをIDでフェッチしますが、作成または更新されるノードに入力された分類用語をフェッチします。そうすることで、「「制限」フィールドのある分類」がトークンとして利用可能になります後続のルールアクション。より具体的には、これを(トークンとして)_node_limit_パラメーターの値を指定して、後でステップ2のルールコンポーネントを実行する必要があります。
    • 手順2のルールコンポーネントを実行し、そのルールコンポーネントに_node_limit_および_node_termreference_の適切な値を渡して、実際にロジックを実行します。

完了!....only using (popular) contributed modules, with no custom code involved....必要なのは RulesViews と- 一括操作を表示

PS:上記は単なる青写真です...主にあなたの質問に十分な詳細がないためです。たとえば、コンテンツタイプでこれらの用語がどのように定義されているかを説明していません)。

3
Pierre.Vriens

この機能を備えた貢献モジュールはまだないと思います。これには少しカスタマイズする必要があります。

hook_node_validate に条件を設定して、そのノードに関連付けられているノードの数を確認し、設定した制限と比較します。

function taxonomy_select_nodesを使用して、用語に関連付けられたノードを返すことができますすべてのフィールドインスタンス。

制限事項:::この関数では、分類モジュールが独自のテーブルを維持している必要があり、そうでない場合は空の配列を返します。他のフィールドストレージメソッドを使用する場合は、用語をリストするための代替メソッドを使用する必要があります。

既存のDrupal form にカスタム検証を追加する方法を学ぶ

1
DRUPWAY

Node Formを使用してノードを操作する場合、 hook_node_validate を使用する必要があると思います

1
Yakimkin Roman