그동안 레이아웃의 메뉴를 문서 모듈의 카테고리 목록으로 대체가능할까 하는 문의들이 더러 있었던 것으로 압니다.

저도 그런 수요자 중의 하나였구요.

대개는 레이아웃 메뉴에 카테고리가 포함된 주소를 바로가기로 이어주면서 수동 설정하곤 합니다.

 

이 경우 몇 가지 단점이 있습니다.

- 카테고리 주소에 따라 메뉴를 수동으로 만들어줘야 합니다.

- 카테고리 목록에 수정이라도 있게 된다면 메뉴도 따로 또 수정해줘야 합니다.

- 메뉴 클릭으로 페이지를 열람하거나 할 때 seleceted 값이 실종되는 경우가 일어나기도 합니다.

 

첨부한 애드온은 아직 개발 중이긴 하지만,(미완성이어서 여기 올려요ㅋ)

활성화된 모듈에 카테고리 목록이 있을 경우 레이아웃에 지정된 메뉴 목록을 대체해주는 기능을 합니다.

메뉴 목록을 동적으로 조작해줌으로써 위의 단점을 해결할 수 있게 하는 거죠.

기진곰님이 친절하게 설명해주셔서 코드를 짜볼 수 있게 됐습니다. https://xetown.com/questions/1380460#comment_1380475

 

기본적인 동작 원리는 다음과 같습니다.

- after_module_proc 시점

: 카테고리 목록을 메뉴 목록 캐시 파일 형태로 저장

: 단, 현재 애드온은 2차 카테고리까지만 2차 메뉴 목록으로 변환합니다. (너무 빡세요)

: 메뉴 목록 캐시 파일을 백업해두고 -> 카테고리 목록 캐시 파일을 메뉴 목록 캐시 파일 이름으로 바꿔치기 합니다.

- 레이아웃 컴파일 시점

: 이렇게 되면 레이아웃에서는 해당 메뉴 목록을 불러올 자리에서 카테고리 목록을 불러오게 됩니다.

- before_display_content 시점

: 이제 컴파일이 다 끝났으니 캐시 파일을 원위치 시켜줍니다.

: 현재 시점에서 활성화된 메뉴 목록 캐시 파일을 원래대로 카테고리 목록의 이름으로 되돌립니다.

: 앞에서 백업해준 메뉴 목록 캐시 파일을 복구시킵니다.

: 이렇게 해주면 다른 모듈 등에서 메뉴 목록을 불러올 때 꼬임 현상이라든가 하는 문제들을 회피할 수 있습니다.

 

애드온 설정에서는 '레이아웃 설정 > 메뉴'에서 불러오는 '메뉴 아이디'(예. gnb)만 입력하고 애드온 적용 모듈을 잘 선택해주면 됩니다.

Atachment
첨부

윤삼

profile
아무래도 중급 초반 수준의 코딩 오타쿠인 것 같습니다.
  • ?
    게시판에 분류를 두면 분류항목이 2차 메뉴로 출력되는 것이 아닌지요,
    제가 잘못 이해 했나요.
    따라해 보니 메뉴가 출력이 안되는데요?
    https://moonhouse.co.kr/shop
  • ? profile

    아뇨, 분류 목록 $category_list가 $gnb나 $main_menu를 아예 대체하는 거예요.

    물론 여기 애드온의 코드를 잘 활용하면 2차 메뉴로 접붙이는 것도 가능할 것 같긴 합니다.