-2

次のようなテーブル構造があります

|id| parent_id |name|

parent_id同じテーブルを再帰的に参照しています ドロップダウン ツリーを作成しようとしましたが、失敗しました。core 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.='-';

}
4

1 に答える 1

0

「親 ID と子 ID を分離したい」という意味がよくわかりません。選択の要素は表示値とデータ値にすぎず、データ値はフィールド名とともにサーバーに送信されるものであることを理解してください。

そのため、select は複数の種類のデータ値を実際に区別することはできません。たとえば、各オプションに複数の ID を指定することはできません。できることは、表示値をフォーマットして ID (「1 - games - 0」などの場合など) を含め、select でそのオプションの値にするデータ値を決定することだけです。

できることの 1 つは、optgroup タグを使用してオプション要素をグループ化することです。このようなもの:

<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>

検証では、ブラウザはユーザーがグループを選択できるようにすべきではなく、実際のオプションを選択する必要があります。ですから、それについて心配する必要はありません。これにより、値をより階層的に表示する際の柔軟性が向上します。ただし、この場合、オプションのネストは 1 レベルしか許可されないことに注意してください。(したがって、optgroup に別の optgroup を含めることはできません。)

于 2012-07-02T05:25:05.780 に答える