0

モジュールのパラメータを使用して特定のことを行うのに問題があります。コードから次のエラーが発生し続けます。

PHP Fatal error:  Call to a member function get() on a non-object

このエラーは、次のファイルの10行目で発生します。

<?php
echo($params)
class modSystemValidation {

function buildForm() {
    $form = '';
    $tabIndex = 0;

     if($params->get('includeGender','0') == 1 ) {
        $form .= '<div id="gender"><input type="radio" name="gender" id="gender_m" value="m" tabindex="' . $tabIndex . '" class="label" /><label for="gender_m">Male</label><input type="radio" name="gender" id="gender_f" value="f" tabindex="' . $tabIndex + 1 . '" /><label for="gender_f"></label></div>'; 

        $tabIndex++;
        $tabIndex++;
    }
  }
return $form
}

modSystemValidation::buildForm();

?>

これが、echo($ params)を使用してページに関してparamsがエコーするものであると結論付けることができました。

{"includeFirstName":"1","includeLastName":"1","includeEmail":"1","includePhone":"0","includeAddress1":"0","includeAddress2":"0","includeZip":"0","includeCity":"0","includeState":"0","includeGender":"0","validateFirstName":"0","validateLastName":"0","validateEmail":"0","validatePhone":"0","validateAddress1":"0","validateAddress2":"0","validateZip":"0","validateCity":"0","validateState":"0","validateGender":"0"}

私の問題は、$ params変数がオブジェクトではなく配列であるということだと思いますが、is_array()関数とis_object()関数でこれを確認するのは難しいようです。

誰かがこの質問に答える前に、ここで簡単な概要を説明します。

  1. $paramsが定義されていることを知っています
  2. ここでの私の問題は、$ paramsを調べて、その内容に基づいて何かを行う方法が必要なことです。
  3. Joomla標準用にコードを正しく構成するための助けに感謝しますが、この問題が解決するまでそれを延期したいと思います。

どんな助けでも大歓迎です、私は単に私のモジュールのパラメータにアクセスし、ユーザーがその特定のフィールドを有効にしたかどうかに基づいてフォーム値を構築しようとしています。今のところ、現在のコードでは性別フィールドがページに配置されないことを知っています。これは予想されることです。私が解決しようとしているのは、get関数を使用して10行目にエラーが発生する理由です。$ paramsはクラスの外部にエコーできますが、クラスの内部にはエコーできませんか?これは私には意味がなく、問題が発生している場所のようです。

4

2 に答える 2

1

あなたvar_dump()の $params には何もありませんincludeGender- だけvalidateGenderです。のパラメーター名がincludeGender存在しない場合、ステートメントから PHP の致命的なエラーが発生します。

9行目でこのようなことを試してください(本当に意図しincludeGenderた場合は、パラメータ名を確認する必要があります!

if($params->get('validateGender','0') == 1 ) {

また、@Lodder は技術的に正しいです。これは、tpml.php ファイルの関数としてではなく、Joomla 標準に準拠するヘルパー クラスを含む helper.php ファイルにある必要があります。ただし、これはコーディング エラーに違いはありません。モジュールが Joomla 標準に準拠するようになるだけです。


アップデート

Lodder はそれを少し間違えました - 昨夜は気づきませんでした。

helper.php ファイルに関数を配置する必要があります。

class modSystemValidationHelper {

    function my_function($params) { 
         $form = '';
         $tabIndex = 0;

         if($params->get('includeGender','0') == 1 ) {
              $form .= '<div id="gender"><input type="radio" name="gender" id="gender_m" value="m" tabindex="' . $tabIndex . '" class="label" /><label for="gender_m">Male</label><input type="radio" name="gender" id="gender_f" value="f" tabindex="' . $tabIndex + 1 . '" /><label for="gender_f"></label></div>'; 

              $tabIndex++;
              $tabIndex++;
         }

    }

}

次に、ビューの default.php ファイルで関数を呼び出します。

 modSystemValidationHelper::buildForm($params);
于 2013-02-01T02:09:31.137 に答える
0

次のように、すべての関数を helper.php ファイルに配置する必要があります。

class modSystemValidation {

    function my_function() { 

    }

}

default.php でそのように単純に関数を実行できます

modSystemValidation::my_function();

使用する必要はありません:global $form , $tabIndex, $params;

于 2013-02-01T02:07:15.873 に答える