web-dev-qa-db-ja.com

Ubercartのリンク付きの空のカート機能(フォームなし)

カートを空にするリンク(フォーム送信ではない)を作成しようとしています。私のリンクは/ cart/emptyになります。

URLが機能するためのケースや何かを作成する場所が見つかりません。
カートを空にするためにuc_cart_empty(uc_cart_get_id())を使用する必要があることはわかっています。

3
PartySoft

カートリンクAPIページを確認してください: http://www.ubercart.org/node/1427

したがって、カートリンクモジュール(Ubercartに含まれる)を有効にする必要があり、リンクは次のようになります。

_http://example.com/cart/add/e
_

Ubercartはこのアクションの確認を求めます。この確認を望まない場合は、独自の空のカートルーチンを作成する必要があると思います。

独自のモジュールhook_menuで、目的のパスのエントリを定義します。次に、独自の関数をコールバックとして割り当てます。その関数内で、uc_cart_empty(uc_cart_get_id());を呼び出します

例えば:

_  function mymodule_menu() {
    $items['your/path'] = array(
      'page callback' => 'mymodule_empty_cart',
    );
    return $items;
  }

  function mymodule_empty_cart() {
    uc_cart_empty(uc_cart_get_id());
    return 'Your cart has been emptied.';   
  }
_

ユーザーに表示するメッセージを提供する必要があることに注意してください。

AJAX(ページのリロードは行われない))でリンクを使用する場合は、次のようにする必要があります。

_ function mymodule_menu() {
    $items['your/path'] = array(
      'page callback' => 'mymodule_empty_cart',
      'type'          => MENU_CALLBACK
    );
    return $items;
  }

  function mymodule_empty_cart() {
    uc_cart_empty(uc_cart_get_id());
    print 'done';   
  }
_

AJAX呼び出しを行うには、jQueryコードを追加する必要があります。印刷ステートメントはユーザーのブラウザーに送り返されますが、表示されません(少なくともユーザーに表示しない場合)あなたのjQueryコードで)。

どちらの例でも、他のメニューオプション(アクセス制限など)を調整できます。 hook_moduleのドキュメントを確認してください: http://api.drupal.org/api/drupal/modules--system--system.api.php/function/hook_menu/8

4
sanzante