2011-04-13 142 views
0

在一個表單中,當我從下拉列表中選擇客戶端的名稱時,下一行是從下拉列表中選擇產品的名稱,它會給出所有產品,但只需要那些由該選定客戶製造的物品。 (客戶端主鍵的數據庫文件爲client_id,生產文件主鍵爲item_id,外鍵爲client_id)。help symfony 1.4

我是symfony的新手,有誰能幫我嗎?

謝謝,

+0

你打算怎麼做?只有JavaScript?使用AJAX?只用PHP? – greg0ire 2011-04-13 09:59:17

+0

更好的選擇是使用Ajax,因爲它比用於PHP的只有在禁用javascript時更好的用戶體驗...... – 2011-06-15 13:04:53

回答

0

在Symfony的形式,

class ClientForm extends sfForm 
{ 
    public function configure() 
    { 
     $clients_data = ClientsData::getAllClients(); //get from database 
     $clients = array_merge(array("--Select Clients--", $clients_data); 
     $this->setWidgets(array(
      "clients" => new sfWidgetFormChoice(array("choices" =>$clients)), 
      "products" =>new sfWidgetFormChoice(array("choices" =>array("--Select Product--"))) 
    )); 

     $this->setValidators(array(
      "clients" => new sfValidatorChoice(array("choices" =>array_keys($clients_data))), 
      "products" => new sfValidatorString() 
    )); 
    } 
} 

在View

<script type="text/javascript"> 
    $(document).ready(function(){ 
     $("#clients").change(function(){ 
     var client_id=$("#clients").val(); 
     $('#products > option').remove(); 
     $.ajax({ 
        type: 'POST', 
        url: 'products/load', 
        async: true, 
        cache: false, 
        dataType : 'json', 
        data: 'cid='+client_id, 
        success: function(jsonData){ 
         $(jsonData.products).each(function() 
         { 
          $("#products").append($('<option></option>').val(this.id).html(this.item)); 
         });        
        } 
     }); 
     }); 
    }); 
<script> 
<form action="<?php url_for('submit/form'); ?>" id="form" method="post" > 
    <?php echo $form["clients"]->render(array('id' => 'clients')); ?> 
    <?php echo $form["clients"]->renderError(); ?> 
    <br/> 
    <?php echo $form["products"]->render(array('id' => 'products')); ?> 
    <?php echo $form["products"]->renderError(); ?> 
    <button type="submit">submit</button> 
</form> 

上面的代碼發送Ajax請求到產品模塊與客戶端ID,並且基於客戶端ID執行查詢並返回給定客戶端ID的產品數據。

注意:應該啓用Javascript。

希望這對你有所幫助。你也可以用symfony的方式來做到這一點,請檢查symfony文檔。