web-dev-qa-db-ja.com

Ubercartでプログラムを使用してカートに商品を追加するにはどうすればよいですか?

ユーザーが特定のコンテンツタイプの個々のノードを購入する必要があるサイトのセクションを作成しています。使いやすさを向上させるために、ユーザーが支払うことなくノードを作成することを許可しますが、それを「非公開」として保存して、まだサイトに表示されないようにします。次に、ユーザーが支払いを済ませたら、そのノードを公開します。したがって、ユーザーが特定のタイプのノードを作成するたびに、ユーザーのカートに製品(その特定のノードを投稿する権利を表す)を追加する必要があります。

hook_nodeapi()を実装してノード作成イベントにフックできることはわかっていますが、製品をカートに追加するにはどうすればよいですか?

5
Chaulky

ユーザーが作成するノードは有効な製品タイプのノードですか?とにかくこれを試すことができます- http://api.lullabot.com/uc_cart_add_item

uc_cart_add_item($nid, $qty = 1, $data = NULL, $cid = NULL, $msg = TRUE, $check_redirect = TRUE, $rebuild = TRUE)

ここで$ nid =製品のnid、$ cid =カートID(ユーザーIDも)-見てください http://api.lullabot.com/uc_cart_get_id

お役に立てれば。

9
Dipen

次のコードを使用できます。$ nidは製品ノードIDです。

Drupal 7

  $nid = 4844;
  $form_state = array(
    'values' => array(
      'nid' => $nid,
      'qty' => 1,
    ),
  );
  $node = node_load($nid);
  drupal_form_submit("uc_product_add_to_cart_form", $form_state, $node);

Drupal 6

  $nid = 4844;
  $form_state = array(
    'values' => array(
      'nid' => $nid,
      'qty' => 1,
    ),
  );
  $node = node_load($nid);
  drupal_execute("uc_product_add_to_cart_form", $form_state, $node);
2
kenorb

これに来る誰にとっても... bsenftnerのコメントは間違っています。 Nodecheckoutを使用すると、顧客は支払う前にノードを作成できます。

「したがって、ユーザーが特定のタイプのノードを作成するときはいつでも、ユーザーのカートに製品(その特定のノードを投稿する権利を表す)を追加する必要があります。」

...まさにNodecheckoutが行うことです。

私はユーザーが広告を作成することによって機能する分類された広告システムを持っています。保存すると、Nodecheckoutは「クラシファイド広告-6か月」という(製品)ノードをカートに追加します。この製品の支払いにより、ノードが公開されます。

匿名ユーザーでも広告を作成し、チェックアウトプロセスの一環としてアカウントを作成できます。

0
griz