Dolibarr 모듈 개발: 두 판 사이의 차이
| 10번째 줄: | 10번째 줄: | ||
모듈 설명자 생성은 돌리바르 모듈 개발의 첫 번째 필수 단계로서, 개발하는 모듈의 기본적인 정보를 시스템에 제공하여 모듈이 정상적으로 작동하고 관리될 수 있도록 하는 중요한 과정입니다. 모듈 빌더를 사용하거나 수동으로 파일을 생성 및 수정하여 모듈 설명자를 만들 수 있으며, 생성 후에는 반드시 테스트를 거쳐 시스템에 제대로 인식되는지 확인해야 한ㄷ. | 모듈 설명자 생성은 돌리바르 모듈 개발의 첫 번째 필수 단계로서, 개발하는 모듈의 기본적인 정보를 시스템에 제공하여 모듈이 정상적으로 작동하고 관리될 수 있도록 하는 중요한 과정입니다. 모듈 빌더를 사용하거나 수동으로 파일을 생성 및 수정하여 모듈 설명자를 만들 수 있으며, 생성 후에는 반드시 테스트를 거쳐 시스템에 제대로 인식되는지 확인해야 한ㄷ. | ||
:* 수동 모듈 설명자 생성 | |||
1. 모듈 디렉토리 생성 | 1. 모듈 디렉토리 생성 | ||
| 91번째 줄: | 91번째 줄: | ||
모듈이 관리할 데이터 구조가 결정되면, 데이터베이스 테이블로 정의하고 해당 데이터에 접근하고 조직하기 위한 PHP 클래스를 만든다. | 모듈이 관리할 데이터 구조가 결정되면, 데이터베이스 테이블로 정의하고 해당 데이터에 접근하고 조직하기 위한 PHP 클래스를 만든다. | ||
:* SQL 테이블 생성: | |||
• 모듈에서 자체 데이터를 관리해야 하는 경우, 데이터를 저장하기 위한 SQL 테이블을 정의해야 합니다. | • 모듈에서 자체 데이터를 관리해야 하는 경우, 데이터를 저장하기 위한 SQL 테이블을 정의해야 합니다. | ||
| 109번째 줄: | 110번째 줄: | ||
:*SQL 파일 테스트: | |||
• SQL 파일이 준비되면, 돌리바르 모듈 설정 페이지에서 해당 모듈을 비활성화한 후 데이터베이스에서 해당 테이블을 삭제 (존재하는 경우)하고 다시 활성화하여 테이블이 올바르게 생성되는지 테스트할 수 있습니다. | • SQL 파일이 준비되면, 돌리바르 모듈 설정 페이지에서 해당 모듈을 비활성화한 후 데이터베이스에서 해당 테이블을 삭제 (존재하는 경우)하고 다시 활성화하여 테이블이 올바르게 생성되는지 테스트할 수 있습니다. | ||
| 116번째 줄: | 117번째 줄: | ||
:*PHP DAO 클래스 생성: | |||
• DAO (Data Access Object) PHP 파일은 ModuleBuilder를 사용하여 객체를 생성한 후 자동으로 생성됩니다. | • DAO (Data Access Object) PHP 파일은 ModuleBuilder를 사용하여 객체를 생성한 후 자동으로 생성됩니다. | ||
2025년 4월 8일 (화) 06:43 판
모듈 개발
모듈 개발 단계
필수
- 모듈 설명자 생성 (사전준비)
모듈 빌더(Module Builder)라는 표준 모듈을 활성화하여, 모듈 설명자를 생성한다. (버그 이미지 클릭)
모듈 설명자 생성은 돌리바르 모듈 개발의 첫 번째 필수 단계로서, 개발하는 모듈의 기본적인 정보를 시스템에 제공하여 모듈이 정상적으로 작동하고 관리될 수 있도록 하는 중요한 과정입니다. 모듈 빌더를 사용하거나 수동으로 파일을 생성 및 수정하여 모듈 설명자를 만들 수 있으며, 생성 후에는 반드시 테스트를 거쳐 시스템에 제대로 인식되는지 확인해야 한ㄷ.
- 수동 모듈 설명자 생성
1. 모듈 디렉토리 생성
외부 모듈: htdocs/custom/
코어 모듈: /htdocs/ 아래에 모듈 이름 디렉토리 생성하고 /core/modules 디렉토리고 구성 (즉, 직접 core 디렉토리 만들지 않음!)
예) 를 들어, 'mymodule'이라는 모듈을 개발한다면 /htdocs/custom/mymodule/core/modules 또는 /htdocs/mymodule/core/modules와 같은 경로가 된다.
2. 템플릿 파일 복사 htdocs/modulebuilder/template 디렉토리에서 modMyModule.class.php 파일을 생성한 모듈의 /core/modules 디렉토리로 복사
3. 파일 이름 변경 복사한 modMyModule.class.php 파일의 이름을 개발하려는 모듈의 목적에 맞게 변경합니다. 이때 파일 이름은 반드시 mod로 시작하고 .class.php로 끝 나야 한다.
예) 예를 들어, 모듈 이름이 'NewName'이라면 파일 이름은 modNewName.class.php가 되어야 합니다
4.파일 내용 수정: 복사 및 이름 변경한 PHP 파일의 내용을 다음과 같이 수정합니다:
◦ 클래스 이름 변경: 파일 내용에 있는 모든 "modMyModule"을 모듈의 목적에 맞는 이름 (예: "modNewName")으로 변경합니다. 이 값 역시 항상 mod로 시작하고 영문자로만 구성되어야 합니다.
◦ 모듈 ID 설정: $this->numero = 100000; 라인에서 100000을 개발하는 모듈의 고유한 ID로 변경합니다. 다른 모듈과의 충돌을 피하기 위해 이미 예약된 ID 목록 페이지를 참고해야 합니다.
◦ 생성자 변수 수정: 생성자 (constructor)에 정의된 다른 변수들의 의미를 코드 내 주석을 참고하여 필요에 따라 수정합니다
모듈 설명자 테스트:
모듈 설명자 파일을 생성하고 수정한 후에는 돌리바르에서 해당 모듈이 인식되는지 테스트해야 합니다.
- 돌리바르에 접속하여 설정(Setup) -> 모듈(Module) 페이지로 이동합니다.
- 모듈 설명에 version 속성을 올바르게 설정했다면, 새로운 모듈이 목록에 나타나고 활성화/비활성화 옵션을 확인할 수 있습니다.
- version 속성을 "develop" 또는 "experimental"로 설정한 경우, 모듈을 보기 위해서는 먼저 설정(Setup) -> 기타(Others) 페이지로 이동하여 MAIN_FEATURES_LEVEL을 1 (실험적 모듈) 또는 2 (개발 모듈)로 설정해야 합니
- 모듈 파일 경로 구조
정확한 파일 경로 구조는 돌리바르가 모듈의 다양한 구성 요소 (클래스, SQL 스크립트, 템플릿, 설정 페이지 등)를 올바르게 찾고 실행할 수 있도록 기반이 된다.
배포를 위한 ZIP파일 구조를 만들 때도, 현재 파일 구조를 사용하여 만든다.
파일 구조
• mymodule/build/: 컴파일 또는 패키지 빌드 관련 파일을 포함할 수 있습니다. • mymodule/core/modules/: 모듈 설명자 파일인 modMyModule.class.php를 포함해야 합니다. • mymodule/core/triggers: 모듈에서 제공하는 트리거 파일을 포함합니다. • mymodule/admin/: 모듈 설정 페이지 관련 파일을 포함합니다. • mymodule/class/: 모듈에서 제공하는 PHP 클래스 파일을 포함합니다. • mymodule/css/: 모듈의 CSS 파일을 포함합니다. • mymodule/js/: 새로운 기능을 위한 Javascript 파일을 포함합니다. • mymodule/docs/: 문서 및 라이선스 파일을 포함합니다. • mymodule/img/: 이미지 파일을 포함합니다. • mymodule/langs/xx_XX/: 특정 언어 (xx_XX)에 대한 언어 파일을 포함하며, 최소한 en_US를 포함하는 것이 좋습니다. • mymodule/lib/: 모듈에서 사용되는 라이브러리를 포함합니다. • mymodule/scripts/: 명령줄 도구나 스크립트를 포함하며, #!/usr/bin/env php로 시작해야 합니다. • mymodule/sql/: 새로운 테이블이나 인덱스를 추가하기 위한 SQL 파일을 포함합니다. • mymodule/theme/mytheme/: 모듈 자체의 테마/스킨을 제공하는 경우 관련 파일을 포함합니다.
이해 하기 위한 예)
모듈 설명자 파일이 위치하는 mymodule/core/modules/ 디렉토리에 존재함 데이터베이스 테이블을 추가하는 모듈이라면 SQL 파일은 반드시 mymodule/sql/ 디렉토리 PHP 관련 클래스는 mymodule/class/ 디렉토리 설정 페이지는 mymodule/admin/, 언어 파일은 mymodule/langs/xx_XX/에 위치함
- 자체 번호 매기기 규칙 추가
선택 사항
- SQL 테이블 및 PHP DAO 클래스 생성
SQL 테이블 및 PHP DAO 클래스 생성, 모듈의 데이터 모델을 정의하고, 데이터베이스와의 상호작용을 추상화하여 효율적이고 체계적인 데이터 관리한다.
SQL 테이블 및 PHP DAO 클래스 생성 단계는 일반적으로 모듈 설명자를 생성하고 기본적인 파일 구조를 설정한 이후에 진행한다.
모듈이 관리할 데이터 구조가 결정되면, 데이터베이스 테이블로 정의하고 해당 데이터에 접근하고 조직하기 위한 PHP 클래스를 만든다.
- SQL 테이블 생성:
• 모듈에서 자체 데이터를 관리해야 하는 경우, 데이터를 저장하기 위한 SQL 테이블을 정의해야 합니다.
• 테이블 생성 및 데이터 로딩 스크립트는 모듈 디렉토리의 sql 하위 디렉토리 (mymodule/sql/)에 저장됩니다. ModuleBuilder를 사용하는 경우, 새로운 객체를 생성할 때 이 디렉토리와 SQL 파일이 자동으로 생성될 수 있습니다.
• 모듈 설명자 파일의 init 함수 내에서 $this->_load_tables('/mymodule/sql/'); 라인이 주석 처리되어 있지 않은지 확인해야 합니다. 이 라인은 모듈이 활성화될 때 SQL 테이블을 로드하는 역할을 합니다.
• 테이블 생성 명령은 테이블당 하나의 .sql 파일 (llx_mytable.sql) 원칙에 따라 작성하며, 필요한 경우 인덱스 관련 파일 (llx_mytable.key.sql)을 추가할 수 있습니다. 기존 테이블 구조는 install/mysql/tables 디렉토리에서 참고할 수 있습니다.
• SQL 필드의 권장 유형 및 이름 규칙은 Language_and_development_rules#Table_and_fields_structures 페이지를 참조해야 합니다.
• 초기 데이터를 추가/수정/삭제하기 위한 SQL 명령은 mymodule/sql/ 디렉토리 내의 data.sql 파일에 작성해야 합니다.
• 문자열에는 큰따옴표가 아닌 작은따옴표를 사용해야 합니다 ('chaine' vs "chaine"). 이는 PostgreSQL과의 호환성을 위한 규칙입니다.
• SQL 파일은 MySQL 데이터베이스에서 작동해야 하며, 다른 데이터베이스의 파일은 유지 관리되지 않지만 해당 데이터베이스 드라이버에 의해 즉석에서 읽고 변환됩니다.
- SQL 파일 테스트:
• SQL 파일이 준비되면, 돌리바르 모듈 설정 페이지에서 해당 모듈을 비활성화한 후 데이터베이스에서 해당 테이블을 삭제 (존재하는 경우)하고 다시 활성화하여 테이블이 올바르게 생성되는지 테스트할 수 있습니다.
• 테이블이 생성되지 않으면 스크립트를 직접 실행하거나 돌리바르 로그를 확인하여 오류를 찾아야 합니다.
- PHP DAO 클래스 생성:
• DAO (Data Access Object) PHP 파일은 ModuleBuilder를 사용하여 객체를 생성한 후 자동으로 생성됩니다.
• 수동으로 생성할 수도 있지만, ModuleBuilder 사용이 권장됩니다. 예제 파일은 htdocs/modulebuilder/templates/class/myobject.class.php에서 찾을 수 있습니다.
• DAO 클래스에는 테이블 행의 삽입(Create), 조회(Read), 업데이트(Update), 삭제(Delete)를 수행하는 CRUD 메소드가 이미 포함되어 있습니다.
• 생성된 DAO 클래스 파일을 편집하여 올바른 모듈 이름과 테이블 이름을 사용하도록 수정하고, 모듈의 class 하위 디렉토리에 저장해야 합니다.
- 다른 모듈 개발과 연관성
• PHP 화면 생성 및 수정: 생성된 SQL 테이블의 데이터를 보여주거나 편집하기 위한 새로운 PHP 화면을 만들거나 기존 화면에 필드를 추가할 수 있습니다. 이때 DAO 클래스의 메소드를 사용하여 데이터베이스에 접근하게 됩니다.
• 탭 관리: 새로운 데이터 관련 정보를 기존 돌리바르 객체 (예: 송장, 제품) 화면에 새로운 탭으로 추가할 수 있습니다. 이 탭의 내용은 DAO 클래스를 통해 데이터베이스에서 가져올 수 있습니다.
• 설정 페이지 추가: 모듈의 데이터 관련 설정을 사용자가 정의할 수 있는 설정 페이지를 만들 수 있습니다.
• 메뉴 항목 정의: 새로운 데이터 관리 기능을 접근할 수 있는 메뉴 항목을 추가할 수 있습니다.
• 권한 정의: 데이터 접근 및 조작에 대한 권한을 정의하여 보안을 강화할 수 있습니다.
• 내보내기 정의: 모듈에서 관리하는 데이터를 내보낼 수 있는 기능을 추가할 수 있습니다.
- 탭 관리
- PHP 화면 생성 또는 수정
- 자체 설명 페이지 추가
- 메뉴 항목 정의
- 자체 권한 추가
- 자체 박스 정의
- 자체 내보내기 정의
- CSS 스타일 정의
- Javascript 함수 추가
- 이벤트에 코드 실행
- hook 위치에 코드 삽입
- 문서 템플릿 추가
- 스킨 추가