2017-02-17 12 views
0

YII2 (데이트 사이트) 프로젝트를 구축 중입니다. 나는 여러 가지 "폼 모델"을 가지고 있는데, 나는 액티브 폼으로 폼을 만드는 데 사용되는 모델을 의미합니다. 일부 양식/모델에는 동일한 필드가 있습니다 (예 : "성별"및 "위치"필드는 "등록"페이지와 "프로필"페이지에 있음). 일부 필드 만 동일하며 다른 필드는 서로 다르므로 다른 페이지/양식에 대해 동일한 모델을 사용할 수 없습니다.YII2 : 다른 활성 폼과 ID로 동일한 요소

이제는 activerecord 양식을 만드는 데 다른 모델을 사용할 때 필드의 ID와 CSS 클래스도 다릅니다.

예를 들어 'SignupForm'이라는 모델과 'EditProfileForm'이라는 모델이 있습니다. 내가 다른 모델에이 코드를 실행 내가 다른 필드 이름 (ID를) 얻을 경우보기 (템플릿)에서 그

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

같은 코드를 가지고 : "editprofileform-test_field"ID "를 EditProfileForm"모델 및 에 대한 "signupform-test_field" "SignupForm"모델의 ID입니다.

왜 그것이 metter입니까? 왜냐하면 동일한 요소에 동일한 CSS 스타일과 JavaScript 핸들러를 적용하기를 원하기 때문입니다. 다른 모델을 사용하여 생성 된 activeforms에 대해 ID와 CSS 클래스를 동일하게 만드는 방법이 있습니까?

편집을 할

하나의 솔루션으로 텍스트 필드에 ID 매개 변수를 추가하는 것입니다 (@marche에 의해 게시)

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

그것은 텍스트 입력을 위해 작동하지만 나는 또한 자동 완성 위젯을

<?= $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

은 각 필드에 클래스를 추가하거나 자신의 ID를 지정할 수 있습니다>

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

당신이 클래스를 추가하는 경우, 당신이 나중에 다시 사용할 수 있습니다 또는 2와 같은 스타일을 사용하고자 할 때 사용할 + 요소. 그렇지 않으면 프레임 워크가 자동 생성하지 않도록 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