2015-09-16 55 views
0

我一直在搜索整個論壇,但無法找到我的具體問題的答案。我希望你能幫助我,因爲它讓我花了很多時間把它當作一個開始的PHP程序員。遞歸php分類樹擴展

我有聽這個網址的網頁:.../.../edit_cat.php ID = 24

我想有一個很好的類別樹。我已經完成了這一步,但我希望所有沒有孩子的類別都鏈接到頁面post.php以及所有有孩子的鏈接,但只顯示其他類別。某種下拉菜單,你可以稱它。所以沒有孩子是post.php,如果有孩子,則將其餘孩子放下。我希望這說清楚...這是我迄今爲止所做的。它的工作原理爲一棵樹而不是我多麼希望它是:

<h2>This is the current category tree</h2> 
<?php 
category_tree(0); 



function category_tree($catid){ 
include '../config/connect.php'; 

$result = $db->prepare("SELECT * FROM categories WHERE parent_id = '".$catid."'"); 
$result->execute(); 

while($row = $result->fetch(PDO::FETCH_ASSOC)): 
$i = 0; 
if ($i == 0){ echo '<ul class="cattree">';} 

echo '<li><a href="category.php?id=' . $row['cat_id'] . '">' . $row['cat_title'] . '</a>'; 
    category_tree($row['cat_id']); 
    echo '</li>'; 
$i++; 
if ($i > 0){ echo '</ul>'; } 

endwhile; 
} 
?> 

我的類別表看起來像這樣:

cat_id | cat_title | parent_id 

    1   some_title    0 
    2   some_title    1 
    3   title!     2 
    4   main_title    0 
    5   titellos!    4 
+0

你當前的代碼的結果有什麼問題? –

+0

這是一種濫用準備好的聲明! – Strawberry

+0

@Strawberry:這是貨運崇拜節目。在沒有真正瞭解如何/爲什麼正確使用工具的情況下使用某些東西。 –

回答

0

好吧,我不知道PHP的東西,但這裏是如何你可以添加一個「HasChildren」列到你的SQL查詢:

SELECT c.*, 
CASE 
    WHEN EXISTS(SELECT * FROM Categories c1 WHERE c1.parent_id=c.cat_id) THEN 1 
    ELSE 0 
END AS HasChildren 
FROM Categories c 
WHERE ParentID = @CatID 
1

這是我去年做了,查詢返回的每一行,與該行的IDX,parent_idx和標籤。

第一次調用:

print_list(1, 0, $lines); 

功能:

function print_list($parent, $level, $ar) { 

    $children = filter_by_parent($parent, $ar); 
    if (empty($children)) { 
     return; 
    } 

    echo '<ul>'; 

    foreach ($children as $child) { 

     include PATH_PUBLIC . 'clients/simili/line.php'; 

     print_list($child['Child_Idx'], ($level + 1), $ar); 

     echo '</li>'; 

    } 

    echo '</ul>'; 
} 

二級功能:

function filter_by_parent($parent_id, $ar){ 
    $retval = array(); 
    foreach($ar as $a) { 
     if ($a['Parent_Idx'] == $parent_id) { 
      $retval[] = $a; 
     } 
    } 
    return $retval; 
} 

並號召在功能的HTML:

<li class="no" data-id="<?php echo $child['Child_Idx']; ?>" data-parent-id="<?php echo $child['Parent_Idx']; ?>"> 
    <i class="fa fa-plus-square-o"></i> 
    <i class="fa fa-minus-square-o"></i> 
    &nbsp; 
    <span class="name"> 
     <label><?php echo $child['Child_Name']; ?></label> 
     <a href="<?php echo url(''); ?>clients/simili/detail.php?uo=<?php echo $child['Child_Idx']; ?>"><i class="fa fa-book" title="Détails de l'Unité d'Organisation"></a></i> 
    </span> 
    <div class="chiffres"> 
     <span class="inscrits"><?php echo $child['Nb_Collab']; ?></span> 
     <span class="etp-collab"><?php echo $child['ETP_Collab']; ?></span> 
     <span class="etp-postes"><?php echo $child['ETP_Postes']; ?></span> 
     <span class="etp-unit"><?php echo $child['ETP_Unit']; ?></span> 
    </div>  
+0

你用這個mysql查詢是什麼?你把它放在哪裏?我對此很新,所以如果你能幫助我一點,那就太棒了。然後我可以嘗試這個工作。也許小提琴? –

+1

你只需要查詢你的字段(idx,parent idx,該行的標籤)每個idx一行。然後你在遞歸函數中使用這個數組。 – jeremyb

+0

我已經嘗試了很多次,但因爲我只是一個初學者。你可以用查詢爲我做一個例子嗎?在小提琴?也許在主要問題中使用我的表格?我希望你能幫助我,會很棒! –