문제

이것은 여러분 중 일부가 대답하기 쉬운 질문이되어야합니다.

MySQL 데이터베이스의 작업 재귀 메뉴가 있습니다. 이제 내 주요 문제는 다음과 같습니다.

URL을 만드는 가장 좋은 방법은 무엇입니까? 나는/계란/우유/베이컨 같은 각 행의 제목을 가져 오는 것을 선호합니다. 계란은 레벨 0과 같은 수준 : Eggs-0, Milk-1, Bacon-2. 이것을 역동적으로 출력하는 방법에 대한 아이디어가 있습니까?

나는 "Cletus"가이 질문에 대해 몇 가지 의견을 말한 것에 대해 거의 가고 있습니다.PHP/MYSQL- NAV 메뉴 계층 구축 구축

그러나 나는 그것을하는 방법에 대한 설명이 조금 더 필요합니다.

도움이 되었습니까?

해결책

메뉴 트리를 자주 수정하려고하지 않는 한 각 메뉴 항목에 필요한 계층 적 URL을 사전 채우는 것이 가장 쉬운 일일 수 있습니다 (런타임 해상도의 경우).

트리가 자주 수정 될 것으로 기대한다면, 웹 인터페이스를 통해 메뉴를 읽을 때마다 경로를 생성하는 것이 더 쉬울 것입니다.

 id | name   | parent
----+--------+-------
 0  | eggs   | NULL
 1  | milk   | 0
 2  | bacon  | 1
 3  | tomato | 0
 4  | lettuce| 1

foreach (query("SELECT * FROM menu ORDER BY parent ASC") as $row) {
  $menuitem = array_merge(array(), $row);
  $menuLookup[$menuitem['id']] &= $menuitem;
  if ($menuitem['parent'] == null) {
    $menuitem['path'] = "/" . $menuitem['name'];
    $menu[] &= $menuitem[];
  } else {
    $parent &= $menuLookup[$menuitem['parent']];
    $menuitem['path'] = $parent['path'] . "/" . $menuitem['name'];
    $parent['menu'][] &= $menuitem;
  }
}

이 코드를 디버깅하지 않았으며 정확성에 대해서만 테스트했습니다. ;-)

다른 팁

글쎄, 당신이 계층 구조를 원한다면, 내가 아는 최상의 방법이 되십시오. 이 itepoint 기사에서, 반쯤 내려 가기 시작합니다.

Guss가 제안한 것과의 주요 차이점은 조금 더 성능이 뛰어나고 원하는 나무의 일부만 가져 오는 것이 훨씬 쉽다는 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top