我有一个像
这样的表格结构|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.='-';
}
答案 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。)