在php中创建下拉树

时间:2012-07-02 05:15:42

标签: php cakephp drop-down-menu

我有一个像

这样的表格结构
|id| parent_id |name|

parent_id以递归方式引用同一个表我尝试创建一个下拉树 但不成功。请告诉它如何在核心php或Cake php中创建。

这是我到目前为止所做的工作。但它给出了错误 '致命错误:在第390行的/viren/webroot/upms/app/controllers/tests_controller.php中,允许的内存大小为134217728字节(试图分配67025477字节);

function admin_takecat(){
$this->layout=false;
$this->render(false);
Configure::write('debug',2);

$firstlevel=$this->cats->find('list',array('fields'=>array('Category.id','Category.cat_name'),'conditions'=>array('Category.parent_id'=>0,'department_id'=>9)));
    $dropbox='<select>';
foreach($firstlevel as $id=>$val){
    $dropbox.='<option value='.$id.'>'.$val.'</option>';
    $count=$this->cats->find('count',array('conditions'=>array('Category.parent_id'=>0,'Category.department_id'=>9,'Category.parent_id'=>$id)));
    if($count>0){
    $dropbox=$this->_recursive($id,$dropbox,1);

    }

}
$dropbox.='</select>';
echo $dropbox;



}
function _recursive($catid,$dropbox,$level){

$listcats=$this->cats->find('list',array('fields'=>array('Category.id','Category.cat_name'),'conditions'=>array('Category.parent_id'=>0,'Category.department_id'=>9,'Category.parent_id'=>$catid)));
$mark='';
for($i=1;$i<=1;$i++){
    $mark.='-';

}

1 个答案:

答案 0 :(得分:0)

我不确定你的意思是“希望父母ID和子id分开。”了解select中的元素只不过是显示值和数据值,数据值将与字段名称一起发送到服务器。

因此,选择无法真正区分多种数据值。例如,每个选项不能包含多个ID。您所能做的就是格式化您的显示值以包含ID(例如您使用“1 - games - 0”等),并确定哪个数据值应该是select中该选项的值。

您可以做的一件事是使用optgroup tag对选项元素进行分组。像这样:

<select name="myOptions">
  <optgroup label="Category 1">
    <option value="1">First Choice</option>
    <option value="2">Second Choice</option>
    <option value="3">Third Choice</option>
  </optgroup>
  <optgroup label="Category 2">
    <option value="4">Fourth Choice</option>
    <option value="5">Fifth Choice</option>
  </optgroup>
  <optgroup label="Category 3">
    <option value="6">Sixth Choice</option>
    <option value="7">Seventh Choice</option>
  </optgroup>
</select>

在验证中,浏览器不应允许用户选择组,他们必须选择实际选项。所以你不必担心这一点。这确实为更加分层次地显示您的值提供了一些额外的灵活性。但是,要了解在这种情况下只允许一级选项嵌套。 (因此,optgroup不能包含另一个optgroup。)