7

drupal 4.7 のカスタム モジュールで、ノード オブジェクトをまとめてハッキングし、それを node_save($node) に渡してノードを作成しました。このハックは drupal 6 では機能しないようです。このハックは修正できると確信していますが、フォームなしでノードを作成する標準的な解決策があるかどうか知りたいです。この場合、データは別の Web サイトのカスタム フィードから取得されます。

4

5 に答える 5

12

これを実現するためのベスト プラクティスは、drupal_execute を利用することです。drupal_execute は、標準の検証と基本的なノード操作を実行して、システムが期待どおりに動作するようにします。drupal_execute には癖があり、単純な node_save よりもやや直感的ではありませんが、Drupal 6 では、次の方法で drupal_execute を利用できます。


$form_id = 'xxxx_node_form'; // where xxxx is the node type
$form_state = array();
$form_state['values']['type'] = 'xxxx'; // same as above
$form_state['values']['title'] = 'My Node Title';
// ... repeat for all fields that you need to save
// this is required to get node form submits to work correctly
$form_state['submit_handlers'] = array('node_form_submit');

$node = new stdClass();
// I don't believe anything is required here, though 
// fields did seem to be required in D5

drupal_execute($form_id, $form_state, $node);

于 2008-09-18T06:09:19.913 に答える
9

node_save()はDrupal6でも正常に機能します。それを機能させるには、いくつかの特定のデータを配置する必要があります。

$node = new stdClass();
$node->type = 'story';
$node->title = 'This is a title';
$node->body = 'This is the body.';
$node->teaser = 'This is the teaser.';
$node->uid = 1;
$node->status = 1;
$node->promote = 1;

node_save($node);

「ステータス」と「プロモート」は見落としがちです。これらを設定しないと、ノードは非公開のまま、プロモートされないままになり、コンテンツ管理画面に移動した場合にのみ表示されます。

于 2009-01-18T03:57:42.813 に答える
6

実用的にノードを作成するための標準 API を知りません。しかし、これは、あなたがやろうとしていることを実行するモジュールを構築することから得たものです。

  1. 重要なフィールドが設定されていることを確認してください: uid、name、type、language、title、body、filter (node_add()およびを参照node_form())
  2. node_object_prepare()他のモジュールが $node オブジェクトに追加できるようにノードを渡します。
于 2008-09-18T00:19:55.730 に答える
0

上記のいくつかの適切な回答がありますが、取り込まれたフィード アイテムをノードに変換する具体的な例では、simplefeed モジュール ( http://wwww.drupal.org/project/simplefeed ) を使用するアプローチも取ることができます。このモジュールは simplepie エンジンを使用してフィードを取り込み、各フィードの個々のアイテムをノードに変換します。これはcronからノードを作成する問題に特に対処していないことを認識していますが、問題全体に対するより簡単な解決策になる可能性があります.

于 2008-09-18T14:14:53.943 に答える
0

私が発見したもう 1 つの答えは、drupal コアの blogapi モジュールの例を使用することでした。コアにあるという事実は、将来のバージョンでも引き続き機能するという自信を少し与えてくれます。

于 2008-09-18T09:00:44.650 に答える