2014-10-01 8 views
1

젠드 프레임 워크를 처음 사용했습니다. 이제 젠드 (Zend) 양식을 사용하고 있습니다. 데이터베이스 값을 콤보 상자에로드하려면 다른 콤보 상자 값에 따라 달라야합니다.다른 콤보 상자 값에 따라 어떻게 데이터를 콤보 상자에 동적으로 채울 수 있습니까?

IE. 국가를 선택할 때 다른 콤보 상자에서 해당 국가 내의 주를 나열해야합니다. 또한 모든 것이 데이터베이스에서로드되기를 원합니다.

Google은 여러 번 해답을 찾았지만 아무 것도 찾을 수 없었습니다.

//로드 나라

아래에 내 코드
$tblCoun = new Application_Model_DbTable_TblCountry(); 
$options = $tblComp->fetchCountiesPair();  
$tblCoun = new Zend_Form_Element_Select("cmbCountry"); 
$tblCoun ->setLabel("Select Country") 
     ->setRequired(true) 
     ->setAttrib("class", "form-control span-12"); 
$company->addMultiOptions($options); 
$tblCoun = new Application_Model_DbTable_TblCountry(); 
$options = $tblComp->fetchCountiesPair(); 

는 // 여기에 당신이이 시나리오 아약스를 사용할 수 있고,이 단계를 따르십시오 상태

$tblStat = new Zend_Form_Element_Select("cmbStates"); 
$tblStat->setLabel("Select State") 
     ->setRequired(true) 
     ->setAttrib("class", "form-control span-12"); 
$tblStat->addMultiOptions($options); 
+0

jquery ajax에 대한 지식이 있습니까? –

+0

yaah 아약스를 알고 있지만 데이터를 채우기 위해 테크닉을 사용하는 것을 좋아합니다. 거기에 옵션이 있습니까? –

+1

최근에 저의 마지막 젠드 프로젝트에서 같은 일을했습니다. jquery ajax를 사용했습니다. –

답변

0

를로드 할 필요 ,

1] 국가 드롭 다운 메뉴에서 선택한 국가 ID로 서버에 아약스 호출을 보냈습니다. 2] 해당 countryID에 대한 모든 하위 레코드를 가져온 다음 호출 함수로 다시 보냅니다. 3] 기존 상태 선택 상자를 제거하고 다음을 사용하여 새 항목을 채 웁니다.

for(i=0; i < states.length; i++) 
 
    $("#state").append('<option value=' + states[i]['stateID'] + '>' + states[i]['name'] + '</option>'); 
 
}

1

레이아웃을 사용하고이 코드를 추가

<?php echo $this->docType(); ?> 
<html> 
    <head> 
    <?php 
    $this->headLink()->setStylesheet($this->baseUrl('js/jquery/jquery-ui.min.css')); 
    echo $this->headLink(). PHP_EOL; 
    $this->headScript()->setFile($this->baseUrl('js/jquery/external/jquery/jquery.js')); 
    echo $this->headScript(); 
    ?> 
    </head> 
    <body> 
    <?php echo $this->layout()->content; ?> 
    </body> 
</html> 

는 이제보기로 이동하고이 같은 JQuery와 아약스 코드 뭔가 추가

$('#country').change(function() { 
    //For States 
    $.post('<?php echo $this->baseUrl('ajax/states'); ?>', {'country': $(this).val()}, 
    function(data) { 
    $('#state').html(data); 
    }); 
}); 

아약스 요청에 대해 별도의 컨트롤러를 정의했습니다. 내가 statesAction와 아약스 컨트롤러가 나는 다음과 같은 코드가보기 가지고

public function statesAction() { 
    $this->_helper->layout->disableLayout(); 
    $country = $this->getRequest()->getParam('country'); 

    $countryMapper = new Application_Model_CountryMapper(); 
    $states = $countryMapper->fetchAllStates($country); 
    $this->view->states = $states; 
} 

:

<option value="">Select States</option> 
    <?php foreach($this->states as $state): ?> 
    <option value="<?php echo $state->value; ?>"><?php echo $state->name; ?></option> 
    <?php endforeach; ?> 

이 그냥 거친 아이디어를 당신이 좋아들 몇 가지 예제 코드입니다. 내 프로젝트에서 가져온 것처럼 내 코드에 오타가있을 가능성이 있습니다.

나는 그것이 당신을 돕길 바랍니다.