2011-10-03 2 views
0

어제부터이 문제를 해결합니다.전체 경로 (URLS)와 데이터베이스의 값으로 중첩 된 트리 생성

 
____________________________________ 
| id | parentId | name | url | 
------------------------------------ 
| 1 |  0 | Nieuws | url_1 | 
------------------------------------ 
| 2 |  0 | Reviews | url_2 | 
------------------------------------ 
| 3 |  0 | Meuk  | url_3 | 
------------------------------------ 
| 4 |  1 | Games | url_4 | 
------------------------------------ 
| 5 |  1 | Internet | url_5 | 
------------------------------------ 
| 6 |  5 | Browsers | url_6 | 
------------------------------------ 

나는이 값을 기초로 생성 된 트리를보고 싶다 - 구체적으로 다음과 같이 내가보고 데이터베이스에 어떤 값을 가지고있다. 대상 모양은 다음과 같아야합니다 날 (모든 부모 & 아이들과 전체 경로) 트리 내부의 모든 슬래시를하는

<ul> 
    <li><a href="url_1">Nieuws</a> 
     <ul> 
      <li><a href="url_1/url_4">Games</a></li> 
      <li><a href="url_1/url_5">Internet</a> 
       <ul> 
        <li><a href="url_1/url_5/url_6">Browsers</a></li> 
       </ul> 
      </li> 
     </ul> 
    </li> 
    <li><a href="url_2">Reviews</a></li> 
    <li><a href="url_3">Meuk</a></li> 
</ul> 

그것은 중요합니다.

나는이 페이지의 코드를 찾았습니다. http://crisp.tweakblogs.net/blog/317/formatting-a-multi-level-menu-using-only-one-query.html을 추가하고 싶습니다. 그러나 위에서 설명한대로 그런 방법으로 다시 할 수는 없습니다. 신청 마감은 매우 빠르게 다가오고 있기 때문에 당신이 쿼리에 URL을 추가하면 귀하의 링크의 기능에 따라

+0

도움말을? 무엇을 * 특정 * 문제는 코딩 할 때 실행 중입니까? – webbiedave

+0

모든 값을 추가하는 방법 i [href] 옆에 - 모든 부모님의 URL? – Jakub

답변

0

하나 개의 수정. 나는이 방법이 훨씬 간단하다고 생각합니다. 대신 URL을 저장하는 배열을 사용하는, 내가 (기본 URL을 포함) 인수로 문자열을 전달합니다. 것과

// menu builder function, parentId 0 is the root 
function buildMenu($parentId, $menuData, $urlRoot) 
{ 
    $html = ''; 

    if (isset($menuData['parents'][$parentId])) 
    { 
    $html = '<ul>'; 
    foreach ($menuData['parents'][$parentId] as $itemId) 
    { 
     $url = $urlRoot . $itemId['url'] . '/'; 
     $html .= '<li><a href="$url">' . $menuData['items'][$itemId]['name'] . '</a>'; 

     // find childitems recursively 
     $html .= buildMenu($itemId, $menuData, $url); 

     $html .= '</li>'; 
    } 
    $html .= '</ul>'; 
    } 

    return $html; 
} 

// output the menu 
echo buildMenu(0, $menuData, ''); 
0

:(는,이 같은 일을해야, 어떤 도움에 매우 감사하게 될 것입니다 :

<?php 
// menu builder function, parentId 0 is the root 
function buildMenu($parentId, $menuData, $nodes=false) 
{ 
    $html = ''; 

    if (isset($menuData['parents'][$parentId])) 
    { 
     $html = '<ul>'; 
     if($nodes === false){ 
      $nodes = array(); 
     } elseif(!is_array($nodes)) { 
      $nodes = array($nodes); 
     } else { 
      $nodes[] = $menuData['items'][$parentId]['url']; 
     } 
     foreach ($menuData['parents'][$parentId] as $itemId) 
     { 
      $html .= '<li><a href="/' . implode('/', $nodes) . '">'; 
      $html .= $menuData['items'][$itemId]['name'] . '</a>'; 

      // find childitems recursively 
      $html .= buildMenu($itemId, $menuData, $nodes); 

      $html .= '</li>'; 
     } 
     $html .= '</ul>'; 
     array_pop($nodes); 
    } 

    return $html; 
} 

// output the menu 
echo buildMenu(0, $menuData); 
?> 
+0

오류가 발생했습니다 : "[] 연산자가 ...의 문자열에 지원되지 않습니다 ..."? 그것은이 행을 참조합니다. $ nodes [] = $ menuData – Jakub

+0

@Jakub 세 번째 매개 변수에 대해 아무 것도 전달하지 않아야한다고 기본값 인 false가 예상됩니다. 나는 해결책을 추가했다. –

관련 문제