コードを介してノードを作成するための最良の選択は何ですか?


7

シナリオはこのようになり、多くの分類用語フィールドが含まれるノードタイプがあります。テキスト、日付などの他のフィールドもありますが、その90%は分類フィールドです。ノードはプログラムで2つの方法で作成できることを知っています。

  • node_save()-ノードオブジェクトを作成して保存する

    $node =  new stdClass();
    
    $node->type = 'article';
    
    $node->field_term[LANGUAGE_NONE][0]['tid'] = 3128 // term id of the term
    
    node_save($node);
  • フォーム送信-フォーム配列の作成とdrupal_form_submitを使用した送信

    $node[field_first]['und'] => chennai;
    
    $node[field_second]['und'] => "iphone5";
    
    $node['type'] = 'article'; 
    
    $form_state['values'] = $node;
    
    $form_state['values']['op'] = t('Save');
    
    drupal_form_submit($node_type . '_node_form', $form_state, (object)$node);

    $ nodeはPOST値を持ちます。

フォーム送信メソッドを使用する利点は、Drupalが語彙で新しい用語を作成することです(私はより多くの新しい用語を取得することになっています)。フォームの送信は、ノードの作成に必要なフォームの検証に従うことができます。

より多くの項を取得するはずのDrupalシステムでノードをより速く作成する方法はありますか?

上記以外の方法がない場合、どの方法が最適ですか?


最初のアプローチは少し高速ですが、2番目のアプローチの方が維持しやすい場合は、2番目のアプローチを使用します。
jantimon

問題は、12を超える用語フィールドがあり、各フィールドに用語として10を超える値がある場合に発生します。非常に遅く、リソースの多くを使用します
Dinesh Kumar Sarangapani

次に、1つのエンティティフィールドクエリを記述して、既に存在する用語を見つけ、不足している用語をすべて作成し、最後に、最初のアプローチで示したようにノードを作成します。
jantimon

はい、ノードを作成するにはいくつかの方法があると言ったように、私が望むのは理由が最も良いものです
Dinesh Kumar Sarangapani

4
@DineshKumar 'Best'は主観的な用語なので、実際に意味するもの(たとえば、最もパフォーマンスの高いもの)に絞り込んでください。スタックの交換サイトでは、「最高」のものを求める質問はうまくいきません。その上、この質問に対する唯一の本当の答えは、現在の環境でさまざまな方法をベンチマークすることから得られます。
クライヴ

回答:


4

最も安全な方法は、drupal_form_submit()を使用することです。サービスモジュールを見てみると、同じことが行われます。プログラムでノードを作成する場合は、フォームの検証が重要です。一度に複数のノードをインポートまたは作成していますか?これが当てはまり、パフォーマンスが心配な場合は、DrupalのバッチAPIまたはキューを使用できます。ユーザーフィードバックが必要な場合はバッチが最適ですが、cronでノードを作成していて、フィードバック付きのUIを必要としない場合は、キューが適しています。どちらの場合も、メモリ管理が自動的に行われます。

1つのノードを作成するのにかかる時間は、UIでの所要時間なので心配する必要はありません。コードでそれを行う理由がなければ、作成時間を増やすことです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.