1

プロトコルと呼ばれる新しいコンテンツ タイプを作成しました。問題は、コンテンツ タイプを定義するときに、どのフォーム要素が存在するかなど、コンテンツをフォームに追加および編集する方法も指定することを意味することです。

プロトコルは、タイトル、要約、および指示を格納するコンテンツ タイプです。次のように、テキストの一部にタグを付ける 1 つのテキスト領域を介して、タイトル/指示/要約を追加したいと思います。

[タイトル]これはタイトルです[/タイトル] [アブストラクト]これはアブストラクトです。[/abstract][instructions]これが私の指示です。[/instructions]

次に、そのテキストが処理され、各タグ間のコンテンツが選択されて変数に格納されます。この変数は、コンテンツの追加/編集フォームで別のフィールド/テキストエリアを介して追加された場合と同様に、コンテンツ タイプ用に格納する必要があります。

これは可能ですか?どのようなことを読み進めればよいですか?drupal コードのどこに、標準のコンテンツ追加フォームの新しいコンテンツ タイプの [保存] を押したときに何が起こるかを説明する関数がありますか? (私はそれを読みたいだけで、何も変更しません)

4

2 に答える 2

0

これがあなたがやろうとしていることと正確に一致するかどうかはわかりませんが、基本的な意味では、目標に近づくはずです。送信された値を新しいノードに供給するカスタム フォームを提供する、Drupal 6 用の endorse というモジュールを作成しました。

http://drupal.org/project/endorse

フォームの定義は次のとおりです。

http://drupalcode.org/project/endorse.git/blob/refs/heads/master:/endorse.module#l136

いくつかの基本的な検証が続き、実際のノードの保存は送信関数の先頭で行われます。ここでは 231 行目までです。

http://drupalcode.org/project/endorse.git/blob/refs/heads/master:/endorse.module#l206

その関数の残りの部分は、送信関数の最後にある感謝とリダイレクトを除いて無関係です。D7 でこれを行っている場合は、少し変更されますが (関数定義などについては api.drupal.org を参照してください)、多かれ少なかれ同じに見えるはずです。

于 2012-06-08T17:34:03.647 に答える
0

問題を解決するための手順。

  1. モジュールを作成します。カスタム追加ページでhook_menuを実装します。
  2. FORM APIを使用して、新しいページに表示されるカスタム フォームを作成します。
  3. hook_form_submitで、変数フォーム状態から値を取得します。
  4. テキストを解析し、新しいノードを作成して保存します (ここではスニペット)。

    $newNode = (object) NULL;
    $newNode->type = 'protocol';
    $newNode->title = $parsed_title;
    $newNode->uid = 1;
    $newNode->created = strtotime("now");
    $newNode->changed = strtotime("now");
    $newNode->status = 1;
    $newNode->comment = 0;
    $newNode->promote = 0;
    $newNode->moderate = 0;
    $newNode->sticky = 0;
    
    // add CCK field data
    $newNode->field_{YOUR_CUSTOM_FIELD_1}[0]['value'] = $parsed_data1;
    $newNode->field_{YOUR_CUSTOM_FIELD_2}[0]['value'] = $parsed_data2;
    
    // save node
    node_save($newNode);
    

以上が基本的な手順です。さらに質問がある場合は、お尋ねください。

ヒント: Devel モジュールをインストールし、変数の内容を知る必要がある場合は関数 dpm() を使用します。変数 $form_state の内容を知るために hook_form_validate または hook_form_submit を実装するときに、おそらく必要になるでしょう。

だからただやってください:

dpm($form_state); //this will give you the variables inside the array with a krumo view.
于 2012-06-08T19:45:12.143 に答える