1

プログラムで (php を使用して) 既存の drupal フォームに入力し、提供されたモジュールに含まれるコンテンツ タイプを作成したいと考えています。

詳細: モジュールは SimpleFeed で、コンテンツ タイプは Feed です。これを達成するためにモジュールの関数を呼び出したいと思います。私が興味を持っているメソッドは、vid と nid が必要と思われる hook_insert ですが、これらが何であるかはわかりません。

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

4

2 に答える 2

1

drupal API は、まさにこれを行うためにdrupal_execute()を提供します。関数を直接呼び出してノードを作成することは避けることをお勧めします (パフォーマンス上の理由がない限り)。drupal_execute() を使用すると、他のモジュールのすべての適切なフックが呼び出され、コードは drupal の将来のバージョンでも動作し続ける可能性がはるかに高くなります。

このメソッドを使用する際の古典的なバグは、最初に次のようなものを呼び出すことではないことに注意してください

module_load_include('inc', 'node', 'node.pages')

これにより、ノード作成フォームのコードが読み込まれます。

node_save を直接呼び出すことは一般に非推奨と見なされており、drupal の将来のバージョンでコードが壊れる可能性があります。

この子守唄の投稿に良い例があります

于 2008-11-14T22:55:37.130 に答える
1

もう少し情報を提供できますか (どのモジュールですか?)。一般的に、プログラムでフォームを介して渡すのではなく、モジュール関数を呼び出してコンテンツ タイプを作成することをお勧めします。このように、実装について心配する必要はなく、モジュールが機能する場合は、スクリプトでも機能することを信頼できます:)

もちろん、これはあなたのモジュールを彼らのモジュールに結びつけるので、それらの機能の変更はあなたのモジュールに影響を与える可能性があります. (ただし、データベース構造も更新すると、そのリスクが発生します)

元。

// your file.php

function mymodule_do_stuff() {
    cck_create_field('something'); // as an example, i doubt this
                                   // is a real CCK function :)
}

edit :vidおよびnidはノード ID、vidはリビジョン ID、およびnidは特定のノードの主キーです。これは実際のノードであるため、2 つの操作が必要になる場合があります。

  1. プログラムでノードを作成する

    すべての正確なフィールド (テーブルnodenode_revisions) についてデータベースを参照する必要がありますが、これで基本的な作業ノードが得られるはずです。

    $node = (object) array(
        'nid' => '',            // empty nid will force a new node to be created
        'vid' => '',
        'type' => 'simplefeed'. // or whatever this node is actually called
        'title' => 'title of node',
        'uid' => 1,             // your user id
        'status' => 1,          // make it active
        'body' => 'actual content',
        'format' => 1,
                                // these next 3 fields are the simplefeed ones
        'url' => 'simplefeed url',
        'expires' => 'whatever value',
        'refresh' => 'ditto',
    );
    
    node_save($node);
    

    この時点で、simplefeedを自動的に呼び出す必要があると思います。hook_insert()そうでない場合は、2. に進みます。ただし、既に機能しているかどうかを確認します。

  2. 自分で呼んでください!

    simplefeed_insert($node);
    

edit2 :drupal_execute()検証を取り戻すことができるので、これも悪い考えではありません。とにかくすべてのフックを呼び出すと確信しているnode_save()ので、実際にはこのメソッドの下でステップ 1 を実行するだけでよいはずです。

于 2008-11-14T22:06:36.247 に答える