2012-07-02 4 views
-2

У меня есть структура таблицы как следующийСоздание выпадающего дерева в PHP

|id| parent_id |name| 

parent_id ссылается на ту же таблицу рекурсивно я попытался создать выпадающее дерево но неудачные. Расскажите, как создать в php php или Cake php.

это работа я сделал так far..But он дает ошибку «Фатальная ошибка: Разрешены памяти размером 134217728 байт исчерпаны (пытались выделить 67025477 байт) в/Viren/Webroot/upms/приложение/контроллеры/tests_controller .php в строке 390 ';

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

php не имеет ничего общего с «выпадающим деревом». Что вы говорите, это презентация, HTML – zerkms

+0

Вам нужен sql-запрос или html-формат? –

+0

Запрос sql не требуется. Мне нужна логика для создания в php ... –

ответ

0

Я не уверен, что вы подразумеваете под «хотят, чтобы родительские идентификаторы и дочерние элементы были отделены друг от друга». Поймите, что элементы в элементе являются не более чем отображаемым значением и значением данных, а значением данных будет то, что отправляется на сервер вместе с именем поля.

Таким образом, выбор не может действительно различать несколько видов значений данных. Например, у каждой опции не может быть несколько идентификаторов. Все, что вы можете сделать, это форматировать отображаемое значение для включения идентификаторов (например, у вас есть «1 - игры - 0» и т. Д.) И решить, какое значение данных должно быть значением для этого параметра в элементе.

Одна вещь, которую вы можете сделать, это элементы групповой опции, используя 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.)