2017-02-17 2 views
0

Я строю проект с YII2 (сайт знакомств). У меня есть несколько «форм-моделей», я имею в виду модели, которые используются для создания форм с активной формой. В некоторых формах/моделях у меня одинаковые поля, например поля «пол» и «местоположение», присутствующие на странице «регистрация» и на странице «профиль». Только некоторые поля идентичны, другие разные, поэтому я не могу использовать одну и ту же модель для разных страниц/форм.YII2: идентичные элементы в разных формах активной формы и их идентификаторы

Проблема в том, что при использовании разных моделей для создания форм activerecord идентификаторы и классы CSS для полей также различаются.

Например, у меня есть модель под названием «RegistrationForm» и модель «EditProfileForm». С учетом (шаблон) у меня есть такой код

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

Если я выполнить этот код для различных моделей я получить различные поля имен (ID): «editprofileform-test_field» ID для модели и «EditProfileForm» Идентификатор «signupform-test_field» для модели «RegistrationForm».

Почему он измеряет? Потому что я хочу применить те же стили CSS и обработчики JavaScript для идентичных элементов. Есть ли способ сделать идентификаторы и классы CSS одинаковыми для активных форм, сгенерированных с использованием разных моделей?

EDITED

Одно решения (опубликовано @marche), это добавить параметр ID в текстовое поле

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

Он работает для текстовых входов, но я также Autocomplete виджета

<?= $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 для виджета AutoComplete.

ответ

1

Вы можете добавить класс к каждому полю или указать их идентификатор>

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

Если вы добавляете класс, то вы можете использовать их в дальнейшем или использовать их, когда вы хотите использовать одни и те же стили с 2 + элементы. В противном случае вы определяете идентификатор, поэтому структура не будет автоматически генерировать его.

Редактировать

Для виджетов, которые необходимо добавить идентификатор или класса внутри опции, как следующее:

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

Смежные вопросы