Extra Form
PHP PHP 7.4
CMS Rhymix 2.0

열심히 맨땅에 헤딩하면서 나만의 모듈을 만들었습니다.

만든 이 모듈을 '사이트 메뉴'에 어떻게 표시해야 합니까?

 

다른 사람이 만든 모듈은 '사이트 메뉴'에 잘만 나오는데..

검색해 봐도 안 나오고..

 

방법이나 관련 문서를 좀 알려 주십시오.

 

고맙습니다~

  • profile

    모듈은 두 종류가 있습니다. 게시판이나 페이지 모듈처럼 인스턴스(mid)를 생성하여 사용하는 모듈, 그리고 포인트 모듈처럼 자기 인스턴스 없이 다른 모듈의 작동에 관여하여 특정한 기능을 제공하기만 하는 모듈입니다. OOP에서 인스턴스 생성이 되는 클래스와 static으로만 사용하는 클래스를 생각하시면 됩니다. 전자는 사이트 메뉴에 추가할 수 있고, 후자는 추가할 수 없습니다.

     

    그런데 역사적으로(?) XE는 이 두 가지 모듈을 구분할 수단을 제공하지 않았습니다. info.xml에서 뭔가 설정하면 될 것 같기도 한데, 실제로 구분하지 않습니다. 라이믹스도 XE의 모듈 구조를 물려받았으니 마찬가지고요. 분명 개선해야 할 부분이지만 호환성 유지를 핑계로 차일피일 미루고 있습니다. 사이트 메뉴 편집 부분의 코드 퀄리티가 워낙 엉망이라 쉽게 건드리기 힘들기도 하고요. ㅠ

     

    현재 XE나 라이믹스에서 어떤 모듈이 인스턴스를 생성할 수 있는 모듈인지, 즉 사이트 메뉴에 추가할 수 있는지 없는지 구분하는 유일한 기준은 "이미 생성된 인스턴스가 있는가"입니다.

     

    게시판이나 페이지는 설치할 때 기본으로 몇 개씩 생성되니까 이 기준을 통과하는 것입니다. 물론 게시판 모듈이나 페이지 모듈의 설정 화면에서도 게시판이나 페이지를 얼마든지 추가로 생성할 수 있고, 사이트 메뉴 편집 화면이 워낙 불안정한 관계로;; 오히려 이 방법을 선호하시는 분들도 꽤 많습니다.

     

    아무튼 새로운 모듈의 첫 번째 인스턴스를 생성할 때는 moduleInstall()이나 moduleUpdate() 메소드에서 강제로 인스턴스(mid)를 생성해 주는 과정이 필요합니다. 널리 알려진 예제로는 출석부 모듈에서 insertModule()을 사용하는 부분을 참고하세요.

     

    https://github.com/bjrambo/attendance/blob/master/attendance.class.php

  • profile
    와.. 기진곰님. 정말 고맙습니다.
    답변을 달아주신 것도 그렇습니다만, 답변의 질이 다르네요.
    문제의 배경부터 해결방안까지.
    한 방에 모두 이해가 됩니다.
    멋집니다!
  • profile
    출석부를 예시로 들어주시긴 햇지만 출석부 같이 모듈 하나에 하나의 인스턴스로도 괜찮다면 그렇게 활용하면 좋겠지만 쇼핑몰같이 세부적으로 동일한 기능을 하는 것이 여러 항목으로 나누어진다면 모듈인스턴스 만드는 페이지가 좀 다르게 구현해야해요 ㅎㅎ

    모듈인스턴스를 넣는 코드에 대한 부분만 참고만 하시길 권장드려요 ㅎㅎ
  • profile profile
    모듈 인스턴스에 관해 공부하다가 본 게시물을 발견하게 되었습니다.
    댓글에 적어 주신 내용 중에서 한 가지 질문이 있습니다.

    "쇼핑몰같이 세부적으로 동일한 기능을 하는 것이 여러 항목으로 나누어진다면...." 에 해당하는 경우의 예시를 하나만 부탁드려도 될까요?

    page 모듈처럼, 문서 페이지, 위젯 페이지, 외부 페이지 형태로 나누어지는 경우와 비슷하게 볼 수 있을까요?