2017-02-17 13 views
0

私はYII2(出会い系サイト)でプロジェクトをビルドしています。私はいくつかの "フォームモデル"を持っています、私はアクティブフォームを使用してフォームを作成するために使用されるモデルを意味します。いくつかのフォーム/モデルでは、「登録」ページと「プロファイル」ページに「ジェンダー」と「ロケーション」フィールドなどの同じフィールドがあります。いくつかのフィールドだけが同一であり、他のフィールドは異なるので、異なるページ/フォームに同じモデルを使用することはできません。YII2:異なるアクティブフォームとそのIDの同一要素

ここで問題は、アクティブレコードフォームを作成するために異なるモデルを使用すると、フィールドのIDとCSSクラスも異なることです。

たとえば、「SignupForm」というモデルと「EditProfileForm」というモデルがあります。 「EditProfileForm」モデル と ため 「editprofileform-test_field」ID:私は別のフィールド名(ID)を取得するさまざまなモデルのために、このコードを実行した場合ビュー(テンプレート)で、私はその

<?php $form = ActiveForm::begin(['id' => 'form']); ?> 
<?= $form->field($model, 'test_field') ?> 
<?php ActiveForm::end(); ?> 

のようなコードを持っています"signupform"モデルの "signupform-test_field" ID。

なぜそれがmetterですか?私は同じ要素に同じCSSスタイルとJavaScriptハンドラを適用したいからです。異なるモデルを使用して生成されたアクティブフォームに対してIDとCSSクラスを同じにする方法はありますか? (@marcheによって投稿)

EDITED

一つの解決策は、テキストフィールド

<?php $form = ActiveForm::begin(['id' => 'form']); ?> 
<?= $form->field($model, 'test_field')->textInput([ 
    'class' => 'some-css-class', 
    'id' => 'my-id', 
]) ?> 
<?php ActiveForm::end(); ?> 

にIDパラメータを追加することです。これは、テキスト入力のために動作しますが、私はまた、オートコンプリートウィジェットを持って

<?= $form->field($model, 'city')->widget(\yii\jui\AutoComplete::classname(), [ 

    'clientOptions' =>[ 
     'source' => new JsExpression("function(request, response) { 
      $.getJSON('/my-script?country='+country_id, { 
      term: request.term 
      }, response); 
     } 
    ") 
    ], 
],['id'=>'my-test-id']) ?> 

あなたが見たように私はオートコンプリートにIDパラメータを追加しようとしたが動作しません。オートコンプリートウィジェットにIDパラメータを割り当てる方法を教えてください。

答えて

1

あなたは、クラスを追加する場合は、あなたが後でそれらを再利用することができたり、2と同じスタイルを使用したいときにそれらを使用する各フィールドにクラスを追加したり、>

<?php $form = ActiveForm::begin(['id' => 'form']); ?> 
<?= $form->field($model, 'test_field')->textInput([ 
    'class' => 'some-css-class', 
    'id' => 'my-id', 
]) ?> 
<?php ActiveForm::end(); ?> 

自分のIDを指定することができます+要素。それ以外の場合は、idを定義して、フレームワークが自動的に生成しないようにします。

次のようなIDまたはクラス内のオプションを追加する必要があるウィジェットの

編集

<?= $form->field($model, 'city')->widget(\yii\jui\AutoComplete::classname(), [ 
    'options' => [ 
     'id' => 'my-test-id', 
     'class' => 'my-css-class', 
    ], 
    'clientOptions' => [ 
     'source' => new JsExpression("function(request, response) { 
      $.getJSON('/my-script?country='+country_id, { 
       term: request.term 
      }, response); 
     } 
    ") 
    ], 
]) ?> 
+0

ありがとうございました。それはテキストフィールドのために働くが、私はAutoCompleteウィジェットフィールドのために働かせることはできません。編集された質問 – user2265529

+0

を編集してください。 – marche

1

あなたはオートコンプリートウィジェットなどと同じ操作を行うことができます(クラスのためにあなたが使用する必要がありますオプション)

echo AutoComplete::widget([ 
    'name' => 'country', 
    'clientOptions' => [ 
    'source' => ['USA', 'RUS'], 
    ], 
    'id' = 'your_id_name' 
    'options' =[ 'class' => 'your_class'], 
]); 
+0

あなたの答えは正しいですが、2つの回答を受け入れることはできません。私は最初のものを受け入れた。ごめんなさい。 – user2265529

関連する問題