簡體   English   中英

Yii多重依賴下拉列表

[英]Yii Multiple Dependent Dropdown

我是Yii Framework的新手。 我正在進行多個從屬下拉列表。 離島地區省份城市

我有一個島嶼下拉列表,當您選擇一個島嶼時,“地區”下拉列表將被更新,並且僅會顯示屬於該島嶼的地區。 省市也一樣。

現在,我已經完成了離島。 當您選擇一個島嶼時,將僅顯示屬於該島嶼的地區。 我的問題是第二層下降。 當我選擇區域時,只會顯示屬於該區域的服務。 我已經用與第一種相同的方式和邏輯進行了編碼,但是沒有任何輸出或錯誤。 我正在使用Ajax。 你能幫助我嗎? 謝謝

這是我的觀點

<div class="row">
    <?php echo $form->labelEx($model,'island'); ?>
    <?php
        echo $form->dropDownList($model,'island',CHtml::listData(Islands::model()->findAll(), 'IslandID', 'IslandName'),
        array(
        'prompt'=>'Select Island',
        'ajax' => array(
        'type'=>'POST', 
        'url'=>CController::createUrl('loadRegions'), //or $this->createUrl('loadcities') if '$this' extends CController
        'update'=>'#region', //or 'success' => 'function(data){...handle the data in the way you want...}',
        'data'=>array('IslandID'=>'js:this.value'),
        ))
    );
    ?>
</div>

<div class="row">
    <?php echo $form->labelEx($model,'region'); ?>
    <?php
        /*echo $form->dropDownList($model,'region',CHtml::listData(Regions::model()->findAll(), 'RegionID', 'RegionName'),
        array('class'=>'span4 chosen','maxlength'=>20)*/
        echo CHtml::dropDownList('region','', array(), array('prompt'=>'Select Region'),
        array(
        'ajax' => array(
        'type'=>'POST', 
        'url'=>CController::createUrl('loadProvinces'), //or $this->createUrl('loadcities') if '$this' extends CController
        'update'=>'#province', //or 'success' => 'function(data){...handle the data in the way you want...}',
        'data'=>array('region'=>'js:this.value'),
        ))

    );

    ?>
</div>

<div class="row">
    <?php echo $form->labelEx($model,'province'); ?>
    <?php
        echo CHtml::dropDownList('province','', array(), array('prompt'=>'Select Province'));
    ?>  
</div>

這是我的控制器

/* Function for dependent dropdown */
public function actionLoadRegions()
{

   $data=Regions::model()->findAll('IslandID=:IslandID', 
   array(':IslandID'=>(int) $_POST['IslandID']));

   $data=CHtml::listData($data,'RegionID','RegionName');

   foreach($data as $value=>$region)
   echo CHtml::tag('option', array('value'=>$value),CHtml::encode($region),true);
}

public function actionLoadProvinces()
{
    //var_dump($_POST['region']);

    $data=Provinces::model()->findAll('RegionID=:RegionID', 
    array(':RegionID'=>(int) $_POST['RegionID']));

   $data=CHtml::listData($data,'ProvinceID','ProvinceName');

   foreach($data as $value=>$province)
   echo CHtml::tag('option',                         array('value'=>$value),CHtml::encode($province),true);
}

我只是遵循了這一點,但在“多個下拉列表”中,似乎不起作用? 謝謝!

嘗試

    <?php echo CHtml::activeDropDownList($model,'region',array(),array(prompt'=>'Select Region'),'ajax' => array(
    'type'=>'POST', 
    'url'=>CController::createUrl('loadProvinces'), //or $this->createUrl('loadcities') if '$this' extends CController
    'data'=>array('region'=>'js:this.value'),
    'update'=>'#'.CHtml::activeId($model,'province'),
          )
        )); ?>

  <?php echo CHtml::activeDropDownList($model,'province', array(),array('prompt'=>'Choose Province')); ?>

示例程序,類似於您的要求。

以下是島嶼地區省份

離島表

 Islands
 -------
 IslandID
 IslandName

區域表

 Regions
 ---------
 RegionID
 RegionName
 IslandID

省份表

 Provinces
 ----------
 ProvinceID
 ProvinceName
 IslandID
 RegionID

假設我正在編程用戶注冊。 因此, $modelUser模型的實例/對象

我的觀點

 Select Island 
 <?php
    echo $form->dropDownList($model,'IslandID',CHtml::listData(Islands::model()->findAll(), 'IslandID', 'IslandName'),
     array(
        'prompt'=>'Select Island',
        'ajax' => array(
            'type' => 'POST', //My method type
            'url' => CController::createUrl('myController/LoadRegions'), //This is my request/ajax URL
            array('IslandID'=>'js:this.value'), //I'm passing the selected dropdonw value.
            'dataType' => 'JSON', 
            'success'=>'js:function(data)' //The functionaliy after success
            . '{'
            . '    var html="";'
            . '    $.each(data,function(i,obj)'
            . '    {'
            . '         html+="<option value=obj.RegionID>"+obj.RegionName+"</option>"'
            . '    });'
            . '    $("#User_RegionID").html(html);' //ID of regions dropdown list
            . '}' 

    )));
);
?>

Select Region
<?php
echo CHtml::dropDownList($model,'RegionID', array(), array('prompt'=>'Select Region'));
?>

為此,dropDownlist ID將作為User_RegionID生成。 即,將使用以下划線“ _”為中心的模型名稱和字段名稱的組合來生成領域ID。

EX:

  1. 型號名稱_字段名稱
  2. City_Id(城市為模型,Id為城市模型中的屬性/字段)

控制器方式

public function actionLoadRegions()
{

    $IslandID=$_POST['IslandID'];

    $criteria=new CDbCriteria();
    $criteria->select=array('RegionID,RegionName');
    $criteria->condition='IslandID='.$IslandID;
    $criteria->order='RegionName';
    $RegionsAry= Regions::model()->findAll($criteria);

    $ary=array();
    foreach($RegionsAry as $i=>$obj)
    {
         $ary[$i]['RegionID']=$obj->RegionID;
         $ary[$i]['RegionName']=$obj->RegionName;            
    }
    echo json_encode($ary);
}

獲取選擇地區的省列表

Select Region
<?php
echo CHtml::dropDownList($model,'RegionID', array(),
array(
  'prompt'=>'Select Region'
  'ajax' => array(
       'type' => 'POST', //My method type
       'url' => CController::createUrl('myController/LoadProvinces'), //This is my request/ajax URL
       array('RegionID'=>'js:this.value'), //I'm passing the selected dropdonw value.
            'dataType' => 'JSON', 
            'success'=>'js:function(data)' //The functionaliy after success
            . '{'
            . '    var html="";'
            . '    $.each(data,function(i,obj)'
            . '    {'
            . '         html+="<option value=obj.ProvinceID>"+obj.ProvinceName+"</option>"'
            . '    });'
            . '    $("#User_ProvinceID").html(html);' //ID of Province dropdown list
            . '}' 
));
?>

Select Provinces
<?php
echo CHtml::dropDownList($model,'ProvinceID', array(), array('prompt'=>'Select Province'));
?>

獲取所有省份的控制器方法

public function actionLoadProvinces()
{
     //To your task
}

您在控制器文件中沒有問題。 我認為您在查看文件時遇到問題。 特別是在“ 選擇區域”中 這是我更新的查看文件代碼。 請刪除1個參數array()並進行檢查。

<div class="row">
<?php echo $form->labelEx($model,'region'); ?>
<?php
    echo $form->dropDownList($model,'region',CHtml::listData(Regions::model()->findAll(), 'RegionID', 'RegionName'),
    array('class'=>'span4 chosen','maxlength'=>20)*/
    echo CHtml::dropDownList('region','', array('prompt'=>'Select Region'),**//Here i remove array() and it works.**
    array(
    'ajax' => array(
    'type'=>'POST', 
    'url'=>CController::createUrl('loadProvinces'), //or $this->createUrl('loadcities') if '$this' extends CController
    'update'=>'#province', //or 'success' => 'function(data){...handle the data in the way you want...}',
    'data'=>array('region'=>'js:this.value'),
    ))

);

?>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM