포럼
메뉴 중첩에 상관 없이 빵조각 끝까지 찾아내기.
2012.05.13 17:13
만들게된 계기는 밑의 게시물에 적혀있습니다. 만들다가 보니 $도 $__Context->인가 뭐시긴가로 변경이 되어서
편법을 썼습니다. 그리고 인자도 2개 하려니 오류 뿜어서 배열로 하나로 묶는 편법을 쓰게 되었습니다.
(이래저래 결국은 편법의 결정체로 전락하게 된 현실이라 안습)
{@ $_traceRoot = create_function('$_Args', strtr('#_Breadclumb = null; foreach(#_Args[0] as #_Idx => #_Val) @( if(#_Val[\'selected\']) @( #_Breadclumb = \'<a href="\' . #_Val[\'href\'] . \'">\' . #_Val[\'text\'] . \'</a>\'; if(#_Val[\'list\']) @( #_rtnVal = call_user_func(#_Args[1], array(#_Val[\'list\'], #_Args[1])); if(#_rtnVal) @( #_Breadclumb .= #_rtnVal; )@ )@ return #_Breadclumb; )@ )@', array('#' => chr('36'), '@(' => chr('123'), ')@' => chr('125')))); echo call_user_func($_traceRoot, array($gnb->list, $_traceRoot)); }
저 굵게 해둔 부분에 빵조각을 적용하실 메뉴를 넣으시면 됩니다. (물론 $~~~->list로 적어야 함)
저 구문은 실행되면 자동으로 결과를 출력하므로 저 한(?) 줄이면 충분합니다.
<a href="#">TOP</a><a href="/ed5c5789b1">MID1</a><a href="/ce620d6749">BOTT1</a>
3단 메뉴로 실험해보았는데 결과는 이런식으로 나옵니다. CSS로 적당히 꾸며주시면 완성이죠 !
(HOME 버튼은 구문 앞 쪽에 직접 넣으시면 될 듯)
잘 활용하시면 글로벌 네비게이션(주 메뉴)에도 적용해서 기존의 방식에선 max_depth에 의존해서 그 만큼만 출력했지만
거의 무한에 가깝게 출력할 수 있습니다.
+ 축약 버전 코드 (적당히 줄여본 실속형 코드)
{@$_=create_function('$q',strtr('#k=null;foreach(#q[0]as#g=>#u)@(if(#u[·selected·])@(#k=·<a href="·.#u[·href·].·">·.#u[·text·].·</a>·;if(#u[·list·])@(#v=call_user_func(#q[1],array(#u[·list·],#q[1]));if(#v)@(#k.=#v;)`)`return#k;)`)`',array('·'=>"'",'#'=>chr('36'),'@('=>chr('123'),')`'=>chr('125'))));}{call_user_func($_,array($gnb->list,$_))}