0

フォーラム ノードの 1 つの [編集] タブをクリックすると、次のようなフォームが表示されます。

フォーラム ノードの編集ビュー

「フォーラム」ドロップダウン メニューで任意のオプションを選択し (したがって、フォーラム コンテナを選択)、「送信」をクリックすると、フォーラム ノードが選択したフォーラム コンテナに移動します。

ここで、コードのどこかからプログラムでこれらすべてをトリガーする必要があります。多くのフォーラム ノードを多くの異なるフォーラム コンテナーに移動する必要があるため、そのようにする必要があります。

これをどのように行うことができるかについて私が考えていたのはこれです:

  1. 特定のフォーラム ノード (別のフォーラム コンテナに移動したいフォーラム ノード) のデータが含まれるように、「forum_node_form」のフォーム データを読み込みます。
  2. パラメータ $form_state['values']['forum_tid'] を、フォーラム ノードを移動したいフォーラム コンテナの tid に変更します。
  3. drupal_form_submit() を使用してフォーム データを保存します。

ただし、これは予想以上に難しいことがわかります。誰かがこれを行う正しい方法を教えてもらえますか?

これまでのところ、var_export($form_state['values'], true) を使用した手動テスト中に $form_state['values'] の内容をログに記録しました。次に、$form_state['values']['forum_tid'] を、フォーラムを移動したいフォーラム コンテナーの tid に変更し、drupal_form_submit('forum_node_form', $form_state); を使用してデータを送信しました。

その結果、次のエラー メッセージが表示されました。

警告: call_user_func_array() は、パラメーター 1 が有効なコールバックであること、関数 'node_form' が見つからないか、drupal_retrieve_form() の無効な関数名であることを期待しています (/"PATH"/includes/form.inc の 795 行目)。

form_load_include() を使用するためのアドバイスを見つけたので、次の行を追加しました。

form_load_include($form_state, 'inc', 'node', 'node.pages');

...これにより、いくつかの新しいエラーが発生します。

  • 警告: node_form() に node_form() の引数 3 がありません (/"PATH"/modules/node/node.pages.inc の 83 行目)。
  • EntityMalformedException: ノード タイプのエンティティにバンドル プロパティがありません。entity_extract_ids() (/"PATH"/includes/common.inc の 7539 行目)。

node_form() の引数 3 はノード オブジェクト $node であり、この問題を解決する方法がわかりません。実際、これは問題全体を解決する正しい方法ではないと感じています。

どんな助けでも大歓迎です。

4

1 に答える 1

1

ノード フォームをロードする手間をかけずに、ノード オブジェクトをロードし ( node_loadを使用)、フォーラムの tid 値を変更し、ノードを保存して ( node_saveを使用) 更新するだけです。

例:

<?php

function mymodule_updatemynode($nid,$new_forum_tid){
    if ($node = node_load($nid)){
        // not exactly sure what the forum tid field is called
        // just an example
        $node->field_forum_tid['und'][0]['#value'] = $new_forum_tid;
        node_save($node);
    }
}
于 2012-10-23T17:19:03.370 に答える