5

管理者のコンテンツ作成フォームとは別に、登録ユーザー用の入力フォームを作成したい。送信するたびに、複数のノードが作成されます。ケースを説明するために、コンテンツタイプProjectReviewを使用します。

プロジェクトタイトル説明所有者評価

レビュータイトルレビュー担当者プロジェクト難易度

CCKモジュールを使用して、コンテンツタイプとそのフィールドを設定しました。登録メンバー(非管理者)に表示する入力フォームを作成したい。そのフィールドには、プロジェクト名説明所有者評価レビュー難易度が含まれます。

フォームが送信されると、プロジェクト名説明所有者、および評価値が新しいプロジェクトノードに入力され、残りは新しいレビューノードに入力されます。

私がやりたいもう1つのカスタマイズは、評価難易度の入力フィールドで星評価入力を使用することです。

これを達成するための最良の方法は何でしょうか?カスタムモジュールとカスタムフォームを作成する必要がありますか(誰かがこれを行う方法を教えてもらえますか)?または、使用できるモジュールはありますか?

ありがとう

4

3 に答える 3

8

これを行うにはいくつかの方法があります。

  1. すべてを最初から行う:これは、unravelersの提案(+1)の要約です。フォームを自分で作成し、独自の検証と送信ハンドラーを追加し、送信時に2つのノードオブジェクトを作成して保存します。あなたは完全な制御/柔軟性を持っているでしょう、しかしそれはかなりの仕事であり、あなたはそれを正しくするためにDrupalsの内部の働きをよく理解する必要があります。

  2. コンテンツタイプの1つを他のコンテンツタイプで必要なフィールドで「オーバーロード」し、「オーバーロードされた」コンテンツタイプの送信(および部分的に編集/表示)ロジックを微調整して、追加のフィールドから他のコンテンツタイプを作成し、「オーバーロード」で非表示にします。 '1つは表示および編集中です。このアプローチを説明する記事はここにあります。これは#1よりもかなり簡単なアプローチですが、コンテンツタイプの定義と表示の不一致のため、少し「ハック」だと思います。

  3. #2の「ハック」の少ないバリエーションは、コンテンツタイプを通常どおりに設定し、を介して編集および送信プロセスを操作することhook_form_alter()です。アプローチ#2とほぼ同じように行いますが、1つのノードに追加のフィールドを事前に「オーバーロード」する代わりに、hook_form_alter(最初から、または編集をロードすることによって)直接編集フォームにそれらを挿入します。バックグラウンドで他のノードのフォームを作成し、そこから関連するフィールド定義をコピーします)。フォームの送信時に、これらの追加フィールドを使用して他のノードを構築するときに、それらのフィールドを削除します。これには、#2よりも少し多くの作業と知識が必要ですが、コンテンツタイプの定義と表示の不一致に対処する必要がないため、それよりも少し安定しており、調整/保守が簡単です。

また、既存のノードの編集をどのように処理するかを指定していません。ノードの関連付けを追跡するために、ノードの1つにノード参照を追加することをお勧めします。このように、必要に応じて、1つのフォームから両方のノードを編集するロジックを追加したり、同期削除を追加したりすることもできます。

于 2009-11-06T08:22:18.507 に答える
4

それは私にはカスタムジョブのように聞こえます。モジュールでFormAPIを使用してフォームを作成できます。他のほとんどのモジュールを見て、FormAPIがどのように機能するかの例を確認してください。次に、これらのフィールドのすべての値から$ nodeオブジェクトを作成し、node_submit()node_save()を使用して実際に異なるノードを作成します。

Form APIを使用するためのWebformモジュールを調べ、送信プロセスを乗っ取ってこれら2つのノードタイプを作成することをお勧めします。

于 2009-11-05T21:01:45.133 に答える
2

オプション#3、存在しないノードを指すことができるCCKノード参照フィールドを作成する際に若いソリューションの1つを使用し、送信時にそれを作成します。

Node Reference Createは、これらのプロジェクトの中で最も安定しているものの1つに見えます。

ノード参照の自動作成ノード参照フィールドには、新しいノードの値を決定するための付加価値が高いようです。

これには、モジュール間にノード参照を構築するという副次的な利点があります。これを使用して、レンダリング時にノードを統合したり、ビューを作成したりできます。

于 2009-11-07T17:52:54.597 に答える