web-dev-qa-db-ja.com

ルールでPHP評価で変数を使用する方法は?

「変数を提供する:mynumber」および「ユーザーにポイントを付与する」アクションを含むルールを作成しました。 "mynumber"を使用して、PHPでポイントを評価したいと思います。何らかの理由で、$mynumberは使用できませんが、PHPセクションの「操作」と「説明」の評価では可能です。置換パターンとして[mynumber]が利用可能です。角括弧の有無にかかわらず、コードで使用しようとしましたが、どちらの場合もエラーが発生します。

通知:未定義の定数mynumberの使用-eval()で 'mynumber'を想定(C:\ wamp\www\mysite\sites\all\modules\rules\modules\php.eval.inc(146)の1行目:eval( ) 'd code)。

これは不足している機能、ルールモジュールのバグですか、それとも何か問題がありましたか?

1
Jeroen

この問題は、ルールが整数と数値を一般的に処理する方法が原因であることがわかりました。アクション「ユーザーにポイントを付与する」でユーザーポイントを計算する代わりに、以前に新しい変数を提供する必要があります。

  1. 必要なPHPコード(<?php ... ?>でラップ)を使用して、 "Number"と呼ばれる新しい変数(テキストタイプ!)を提供します。 $mynumberなどの以前の計算結果。

  2. 「数値」を「ポイント」と呼ばれる整数に変換します。

  3. ユーザーに「ポイント」を付与します。

うまくいけば、Rulesは将来的に数値に少しだけうまく対応できるようになるでしょうが、それまでは、このトリックが多くの人に役立つことを願っています。

0
Jeroen

これを実現するには、 変数モジュール を使用して、ルールで使用する変数を定義します。

変数を定義するには、次の関数を含むカスタムモジュールを記述する必要があります。

_function My_module_variable_info() {
  $variables['Rainbow_count'] = array(
  // 'name' isn't really necessary, as it will get populated from the key of this array above.
 'name' => 'Rainbow_count',
 'title' => t('Number of Rainbows'),
 'type' => 'number',
 'group' => 'UserPoints Config',
 'token' => TRUE,
'default' => 0,
'description' => t('Specify the number of rainbows.')
); 

}
_

ルールで使用する変数の値を設定:

_configuration>>variables>>modules>>My_module_..._

ルール>アクション>ユーザーにポイントを付与>ポイントに移動します。

_data type =current-user:uid_を設定し、return variable_get('Rainbow_count');コードをPHP評価に入れます。

このソリューションは私のために働いた、希望もあなたを助けるでしょう。

1
Amol Bansode