5.1.2では、物価調整額を修正することはできません

私は、会員登録の最後に、値引き額を調整するための助けを求めています。
これまでは、複数レベルのpriceetの複雑さの理由から、$
formオブジェクトの値を調整することによって、フック_civicrm_validateFormを介してpriceetの金額を調整していました。これはうまくいきましたが、これは5.1.2で動くようになっています。
私は厳密に言えば、validateFormフックで$フォームを変更すべきではないことに気づきます。
“フックはフォームの値を変更するのではなく、検証のためのものです”。 しかし、私は額を変更する他のどこにも見ることができません。
私は2つの質問を持っています。誰でも4.7と5.1.2の間の違いを説明できますか? ii)price
set額を調整するためのより良い場所または方法がありますか?

ベストアンサー

You can use Build Amount hook to alter the price.
If you want to trigger the change on form submit than you can use
$form->_flagSubmitted. This is set to true when form is
submitted. You can also use buildform or post process hook. But validateForm
is a bad option.

function xxx_civicrm_buildAmount($pageType, &$form, &$amount) {
  if (get_class($form) == 'CRM_Event_Form_Registration_Register' && $form->_flagSubmitted) { 
    foreach ($amount as $key =$value) {
      foreach ($value['options'] as $pid =$value) {
        $amount[$key]['options'][$pid]['amount'] = $value['amount'] - ($value['amount'] * 0.1);
      }
    }
  }
}

HTH

Pradeep

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です