web-dev-qa-db-ja.com

Ubercartは商品がカートに追加されたときに商品価格を変更します

Ubercart 3でUbercart製品の価格を変更する必要がありますDrupal 7、製品がカートに追加されたとき。いくつかの条件を確認する必要があり、満たされている場合は価格を変更します。と

function MYMODULE_uc_cart_item($op, &$item) {  
  switch ($op) {
    case 'load':
      drupal_set_message(t('It works!'), 'status');
      break;
  }
}

しかし、私は右フックをターゲットにしているのかわかりません。

動作しないようです(呼び出されません)。

手がかりをありがとう

4
NenadP

これがあなたがプレイできる別のフックです hook_uc_add_to_cart

_Parameters:
$nid - the node ID of the product
$qty - the quantity being added
$data - the data array, including attributes and model number adjustments
_

ここにフックを操作する方法があります

Drupalのモジュールシステムは、「フック」の概念に基づいています。フックはPHP foo_bar()という名前の関数です。ここで、「foo」はモジュールの名前(ファイル名はfoo.module)であり、「bar」はフック各フックには、定義されたパラメーターのセットと指定された結果タイプがあります。

function hook_uc_cart_item($op, &$item) {作業フックは、次のようなモジュール名に置き換える必要があります

function YOURMODULENAME_uc_cart_item($op, &$item)

参照 フック

2
niksmac

問題はキャッシュをクリアすることでした。何らかの理由で、Drushからキャッシュをクリアしても完全には機能しません。 (インターフェースからクリアする必要があります)。また、ある時点で実装されたAPC iかもしれません。モジュール/その他のコードのキャッシュをクリアするときに問題があります。

編集:

今のところ、hook_uc_cart_itemを機能させることができません。 ( hook_cart_itemhook_add_to_cart でも機能し、 hook_uc_cart_alter でも機能します(私にとって)

hook_cart_alterのアプローチを取る可能性があると思います。カートが表示されるたびにアイテムが取得されるため、実際には常に読み込まれ、パフォーマンスの問題について警告しましたが、カートの内容に応じて動的計算を行うため、常にカートを監視する必要があるので、develとkcachegrindが文句を言わなければ、私もしません:)

uc_couponモジュールもフック_cart_alterを恐れずに使用しています:)

2
NenadP

これは私がそれを解決した方法です:

function mymodule_uc_cart_alter(&$items) 
{
    $items[45]->price = 29393;
}

この例では、値を変更する方法を示すために、変更をハードコーディングしています。当然、要件が何であれ、ここに独自のロジックを適用します。

2
coderama