状況; チェックアウト プロセスをモーダル ウィンドウに含めようとしています。ユーザーが「カートに追加」リンクをクリックすると、モーダル ウィンドウ (または、同じウィンドウ内の div への ajax ロード) を使用してチェックアウト フォームが表示されます。現在、コマースと ctools を適切に操作する方法の "Drupal の方法" については明確ではありません。
Ctools とその API が現在の選択肢です。私は、Ctools の代替案を喜んで検討します。これまでのところ、ctools モーダルにチェックアウト フォームを含めることができませんでした。ctools コードは、ユーザー登録、ログインなどのフォームで正常に動作します。
基本的に、チェックアウト構成には、チェックアウト ペインに 2 つのチェックボックスのみが含まれます。チェックボックス -フィールドは、「Commerce Order Fieldgroup Panes」モジュールを使用してチェックアウトに含まれています。したがって、ユーザーがチェックアウト プロセスを実行するための基本的な手順は 1 つだけです。
ユーザーデータと送信されたチェックボックスの値に応じて、サードパーティの支払いゲートウェイを使用してリダイレクトまたは内部支払い処理を行います。これを使用して、Commerce で正常に動作するカスタム支払いモジュールを構築しています。
モーダルに戻ります。
チュートリアルと ctools ajax サンプルに従ってコールバック関数を作成しました。チェックアウト フォームをモーダルに含めてレンダリングするためにいくつかの組み合わせを試しましたが、成功しませんでした。問題がコマース チェックアウト プロセスにあるのか、指定されたチェックアウト フォームを収集/レンダリングできない ctools 関数にあるのか疑問に思っています。または、コマース/チェックアウト API が ctools 関数で正しく使用されていない可能性があります。Deep レベルでの商取引についてはまだ知らないので、内部のチェックアウト手順はまだ少しわかりません。
すべてのコードの組み合わせをここに含めるわけではありません。考えられる代替案/方向性を指摘したいだけです。
- プログラムで ctools を使用してチェックアウト フォームを含めます。
<?php
$checkoutform = ctools_modal_form_wrapper('commerce_checkout_form_checkout', $form_state);
print ajax_render($checkoutform);
?>
フォーム ID は、form_alter を使用してデフォルトのチェックアウト ページ フォームから取得されます。ctools_modal_form_wrapper 関数は、有効なチェックアウト フォーム配列を返しません。ctools はそのままではコマース チェックアウト フォームをサポートしていないのではないかと疑っています。関数呼び出しが完全なチェックアウト配列を返す前に、 $form_state に追加のデータを入力する必要があると考えていますか? それとも、他の方法を使用してチェックアウト フォーム配列を取得する必要があるのでしょうか?
または
- レンダリングされたチェックアウト フォームを含む (?) 有効なチェックアウト ペインをプログラムでインクルードします。
<?php
$panes_array = commerce_checkout_panes($conditions = array('enabled' => TRUE), FALSE);
?>
または
-コールバック関数でプログラムによって注文とチェックアウトのページを作成し、フォームを取得します。
<?php
drupal_get_form('commerce_checkout_form_' . $checkout_page['page_id'], $order, $checkout_page);
?>
このフォーム コールは、commerce_checkout.pages.inc からコピーされます。これにより、続行するために必要なデータが含まれているように見えるフォーム配列を取得することができます.. ajax_render()、ctools_modal_render()、ctools_modal_form_render() ..で配列をレンダリングしようとしました.. 200 Http ajax エラーまたは空白のフォーム (目に見える html またはフィールドがない) またはモーダルでループしている ajax ローダー gif だけです。
または
- カスタム フォームを使用してチェックボックスを作成し、送信データをコマースに転送します。
..そのため、ctools が機能しない場合、実際の「commerce_checkout_form_checkout」を含める必要はありません..
または
プログラムでチェックアウトページを含めます (ペイン/フォームが含まれていますか?):
commerce_checkout_pages() 関数とレンダリング関数を使用します。もちろん、モーダルでデフォルトのチェックアウト URL を開こうとすることもできますが、これはモーダルに DOM 全体を含めることになり、望ましくありません。
ありがとうございました!-ユッシ