2015-02-02 9 views
3

양식보기를 만들고 공식 탭 위젯을 사용하여 탭 구조로 양식 필드를 구성하려고합니다.탭 위젯을 사용하여 ActiveForm 필드를 다른 탭으로 분할

활성 양식 필드가 포함 된 div 요소의 ID (또는 클래스)로 탭 위젯을 초기화 할 수 있습니까? 당신이 이런 식으로하고있는 관리 할 수있는 방법의

+0

질문이 명확하지 않고 모호한 경우 자세히 설명하십시오. – deacs

+0

안녕하세요, 탭 위젯을 만들어야하지만보기에서 div로 각 탭의 내용을 초기화해야합니다. – AleCat83

+0

양식을 탭 주위로 둘러 보지 않고 전체를 제출하면 어떨까요? 각 탭에 대한 유효성 검사가 필요한 경우 시나리오를 사용하여 양식의 각 게시물에서 동일한 모델의 유효성을 검사 할 수 있습니다. –

답변

3

한 예 :

  1. 첫째, 각 탭에 대한 하나의보기 - 파일로 접촉 양식을 나눕니다.
  2. 놓습니다 ActiveForm을는 : 시작()와 탭 주위 ActiveForm을 :: 끝() : 매개 변수 $ 모델과 $ 양식
  • 콘텐츠에 접촉 양식 페이지를 렌더링() 위젯을,

    예제 코드 :

    뷰/사이트/contact.php

    <?php 
    
    /* @var $this yii\web\View */ 
    $this->title = 'Contact'; 
    
    use yii\bootstrap\Tabs; 
    use yii\bootstrap\ActiveForm; 
    ?> 
    
    
    <?php $form = ActiveForm::begin(['id' => 'contact-form']); ?> 
    <?= Tabs::widget([ 
         'items' => [ 
          [ 
           'label' => 'One', 
           'content' => $this->render('contact_form1', ['model' => $model, 'form' => $form]), 
           'active' => true 
          ], 
          [ 
           'label' => 'Two', 
           'content' => $this->render('contact_form2', ['model' => $model, 'form' => $form]), 
          ], 
         ]]); 
    ?> 
        <?php ActiveForm::end(); ?> 
    

    뷰/사이트/contact_form1.php

    <?= $form->field($model, 'name') ?> 
    <?= $form->field($model, 'email') ?> 
    <?= $form->field($model, 'subject') ?> 
    

    뷰/사이트/contact_form2.php

    <?php 
    use yii\helpers\Html; 
    use yii\captcha\Captcha; 
    ?> 
    
    <?= $form->field($model, 'body')->textArea(['rows' => 6]) ?> 
    <?= $form->field($model, 'verifyCode')->widget(Captcha::className(), [ 
        'template' => '<div class="row"><div class="col-lg-3">{image}</div><div class="col-lg-6">{input}</div></div>', 
    ]) ?> 
    <div class="form-group"> 
    <?= Html::submitButton('Submit', ['class' => 'btn btn-primary', 'name' => 'contact-button']) ?> 
    </div> 
    

    희망이 도움이!

  • +0

    Im 오류 발생 렌더 파일에서 정의되지 않은 변수 형식으로 ..이 문제를 해결할 수 있습니까? –

    0

    contact.php global $ form의 맨 위에 추가하십시오. 그리고 모두 잘 작동합니다. 그래서 그냥 $form->field($model, 'name')->textInput()->render()으로이 클래스의 메소드를 호출 계속

    우리가 $form->field($model, 'name')->textInput() 전화

    , 그것은 클래스 yii\widgets\ActiveField의 모델을 반환합니다

    0

    나는 다른 해결책이있다. 문자열을 반환하면 탭의 내용에 사용할 수 있습니다. 나는 다음과 같은 코드로 다중 언어 번역에 대한 내 응용 프로그램에서 예제 코드를 가지고 :

    <?php 
    $items = []; 
    foreach ($translateModels as $translateModel) { 
        $tabContent = $form->field($translateModel, "[{$translateModel->code}]name")->textInput()->render(); 
        $items[] = [ 
         'label' => $translateModel->language->name, 
         'content' => $tabContent, 
        ]; 
    } 
    ?> 
    <?= Tabs::widget([ 
        'options' => [ 
         'class' => 'nav-tabs', 
         'style' => 'margin-bottom: 15px', 
        ], 
        'items' => $items, 
    ]) ?> 
    

    는 아마 도움입니다.