Skip to content

Commit 0d3ed13

Browse files
committed
chore: 저장소 이동
1 parent a7ef0d6 commit 0d3ed13

56 files changed

Lines changed: 637 additions & 5391 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

docs/developers/admin_menu.md

Lines changed: 4 additions & 157 deletions
Original file line numberDiff line numberDiff line change
@@ -1,161 +1,8 @@
11
---
22
head:
3-
- - link
4-
- name: canonical
5-
content: https://g5guide.github.io/developers/admin_menu.html
3+
- - meta
4+
- http-equiv: refresh
5+
content: 0; url=https://damoang-users.github.io/gnuboard5-guide/developers/admin_menu.html
66
---
7-
# 관리자 메뉴 추가
87

9-
관리페이지에 메뉴를 추가하려면 다소 복잡한 과정을 거쳐야 한다.
10-
11-
관리 메뉴는 `/adm/admin.menu*00.php` 파일을 로드해 정의된 메뉴를 불러온다. 이 방법은 배포 등에서 다소 불편한 문제가 있으므로 그누보드 5.4.6에서 추가된 `admin_menu`, `admin_amenu` Replace Hook을 동적으로 추가할 수 있다.
12-
13-
## 메뉴 추가
14-
15-
메뉴 추가는 `admin_menu` Replace Hook을 이용한다.
16-
17-
`/adm/admin.menu*00.php` 파일 등의 정적 메뉴를 모두 불러온 후 `admin_menu` Replace Hook이 실행되므로 이 메뉴들 사이에 새로운 메뉴를 추가할 수 있다.
18-
19-
### URL 지정
20-
21-
```php
22-
// 리스너 등록
23-
add_replace('admin_menu', 'listener_admin_menu', G5_HOOK_DEFAULT_PRIORITY, 1);
24-
25-
// 메뉴를 추가하는 Callback
26-
function listener_admin_menu($menu = [])
27-
{
28-
// 이미 존재하는 '100'그룹에 메뉴 추가
29-
$menu['menu100'][] = [
30-
// 메뉴ID (중복되면 안 된다)
31-
'100999',
32-
// 메뉴 이름
33-
'추가 설정',
34-
// 주소
35-
'https://.../additional_config.php'
36-
];
37-
38-
return $menu; // Replace Hook이므로 반환해야한다
39-
}
40-
```
41-
42-
`admin_menu` Replace Hook을 이용해 `100` 메뉴 그룹에 `100999` ID를 가진 메뉴를 추가했다. 이제 그누보드 관리 메뉴의 첫번째 메뉴그룹의 가장 마지막에 '추가 설정'이라는 메뉴가 보이게 된다. ID는 중복되면 안 되므로 주의해야 한다.
43-
44-
'추가 설정' 메뉴를 선택하면 주소에 지정한 'https://.../additional_config.php' 주소로 이동한다. `additional_config.php` 파일에서 필요한 동작을 처리하고 관리페이지 보여질 내용을 작성하면 된다. 다만, 몇 가지 필요한 규칙을 적용해야 한다.
45-
46-
::: code-group
47-
48-
```php{1-2,4-5,13-14,19-20} [additional_config.php]
49-
50-
// [필수] 메뉴 추가 시 지정한 ID
51-
$sub_menu = '100999';
52-
53-
// [필수] 이 파일을 통해 `/common.php` 파일을 include 해야 한다
54-
require_once './_common.php';
55-
56-
// 메뉴의 접근 권한 확인
57-
auth_check_menu($auth, $sub_menu, 'r');
58-
59-
// 페이지 제목
60-
$g5['title'] = '추가 설정';
61-
62-
// [필수] 관리페이지 레이아웃
63-
require_once '/path/to/adm/admin.head.php';
64-
65-
// 화면에 출력 할 내용
66-
echo '추가 설정';
67-
68-
// [필수] 관리페이지 레이아웃
69-
require_once '/path/to/adm/admin.tail.php';
70-
```
71-
72-
:::
73-
74-
### view.php를 이용
75-
76-
`/adm/view.php` 파일이 있는데 앞에서 `additional_config.php` 파일을 구성하는 것보다 신경써야 할 것을 조금 줄일 수 있다. 메뉴 추가 부분은 크게 다르지 않지만 주소에서 `view.php` 파일을 지정하고 생략했던 `key`를 지정해야 한다.
77-
78-
```php
79-
add_replace('admin_menu', 'listener_admin_menu', G5_HOOK_DEFAULT_PRIORITY, 1);
80-
81-
// 메뉴를 추가하는 Callback
82-
function listener_admin_menu($menu = [])
83-
{
84-
$menu['menu100'][] = [
85-
'100999',
86-
'추가 설정',
87-
G5_ADMIN_URL . '/view.php?call=additional_config',
88-
// view.php 파일을 이용하기 위해선 고유한 key를 지정해야 한다
89-
'additional_config'
90-
];
91-
92-
return $menu;
93-
}
94-
```
95-
96-
주소는 `view.php?call=additional_config` 이처럼 `call` 파라메터에 `key`와 동일한 값을 지정해야 한다.
97-
98-
`admin_get_page_{key}` Event Hook을 이용하는 방법이다. `/adm/view.php`에서 이 Hook을 실행시키고 이를 이용해 내용을 출력하는 방식이다.
99-
100-
이 훅의 태그는 `admin_get_page_additional_config`처럼 메뉴에 설정한 `key` 값을 붙인 이름으로 지정해야 한다.
101-
102-
```php
103-
add_event('admin_get_page_additional_config', 'listener_additional_config');
104-
function listener_additional_config() {
105-
echo '추가 설정';
106-
}
107-
```
108-
109-
또는, 기존처럼 `additional_config.php` 파일을 이용하되 많이 간소화하여 작성할 수 있다. `view.php` 파일에서 `$sub_menu` 등의 필수 항목들을 처리해준다.
110-
111-
```php
112-
add_event('admin_get_page_additional_config', 'listener_additional_config');
113-
function listener_additional_config() {
114-
include '/path/to/additional_config.php';
115-
}
116-
```
117-
118-
::: code-group
119-
120-
```php [additional_config.php]
121-
122-
// 메뉴의 접근 권한 확인
123-
auth_check_menu($auth, $sub_menu, 'r');
124-
125-
echo '추가 설정';
126-
```
127-
128-
:::
129-
130-
## 메뉴 그룹 추가
131-
132-
```php
133-
// `admin_amenu` Replace Hook을 이용
134-
add_replace('admin_amenu', 'listener_admin_amenu', G5_HOOK_DEFAULT_PRIORITY, 1);
135-
function listener_admin_amenu($amenu = [])
136-
{
137-
// 사용되지않는 '800'으로 새 그룹을 만든다
138-
$amenu['800'] = '#'; // '#' 값은 중요치 않다
139-
140-
return $amenu
141-
}
142-
```
143-
144-
이제 여기에 메뉴를 추가할 수 있다. 메뉴 추가 방법은 앞에서 설명한 것과 같으나 메뉴의 첫번째 항목은 하나의 메뉴가 아닌 이 메뉴 그룹의 제목으로 취급하여 사용된다는 것만 주의하면 된다.
145-
146-
```php
147-
add_replace('admin_menu', 'listener_admin_menu', G5_HOOK_DEFAULT_PRIORITY, 1);
148-
149-
// 메뉴를 추가하는 Callback
150-
function listener_admin_menu($menu = [])
151-
{
152-
// 추가한 '800'그룹에 메뉴 추가
153-
$menu['menu800'] = [
154-
// 첫번째 항목은 이 그룹의 제목으로 사용된다
155-
['800000', '서비스', '#'],
156-
['800100', '추가 설정', 'https://...']
157-
];
158-
159-
return $menu;
160-
}
161-
```
8+
[변경된 주소로 바로가기](https://damoang-users.github.io/gnuboard5-guide/developers/admin_menu.html)

docs/developers/assets.md

Lines changed: 4 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,8 @@
11
---
22
head:
3-
- - link
4-
- name: canonical
5-
content: https://g5guide.github.io/developers/assets.html
3+
- - meta
4+
- http-equiv: refresh
5+
content: 0; url=https://damoang-users.github.io/gnuboard5-guide/developers/assets.html
66
---
7-
# JS & CSS (Assets)
87

9-
JS, CSS 파일(코드)을 HTML Head에 추가하기 위해 사용한다. 파일의 경로만 사용하지 않고 `<link>` 또는 `<script>` HTML 태그를 포함하여 추가할 수 있으므로 Assets 파일 뿐 아니라 임의의 코드를 추가할 수 있다.
10-
11-
두 개의 함수를 사용할 수 있으며, 종류에 따라 구분될 뿐 사용 방법은 같다.
12-
13-
## CSS
14-
15-
`<link>``<style>` 태그를 사용할 수 있다.
16-
17-
```php
18-
/**
19-
* @param string $stylesheet CSS 파일의 경로를 포함하는 `<link>` 태그
20-
* @param int $order 로드 순서
21-
*/
22-
function add_stylesheet($stylesheet, $order = 0);
23-
24-
// 예시
25-
add_stylesheet('<link rel="stylesheet" href="path/to/file.css" />');
26-
```
27-
28-
## JS
29-
30-
```php
31-
/**
32-
* @param string $javascript JS 파일의 경로를 포함하는 `<script>` 태그
33-
* @param int $order 로드 순서
34-
*/
35-
function add_javascript($javascript, $order = 0);
36-
```
37-
38-
## Cache Busting
39-
40-
브라우저 캐시를 갱신하기 위해 `G5_CSS_VER`, `G5_JS_VER` 상수를 사용할 수 있지만, 그누보드의 업데이트에 의존하고 제때 바뀌지 않으며, 파일이 변경되어도 이 값은 고정된 값이므로 사실상 제 기능을 하지 못한다.
41-
42-
아래의 플러그인 중 선택해서 사용하는 걸 권장한다.
43-
44-
- [CacheBust](https://sir.kr/g5_plugin?sca=&sfl=wr_subject&stx=kg+cachebust)
45-
- https://sir.kr/g5_plugin/10198
8+
[변경된 주소로 바로가기](https://damoang-users.github.io/gnuboard5-guide/developers/assets.html)

docs/developers/cache.md

Lines changed: 4 additions & 148 deletions
Original file line numberDiff line numberDiff line change
@@ -1,152 +1,8 @@
11
---
22
head:
3-
- - link
4-
- name: canonical
5-
content: https://g5guide.github.io/developers/cache.html
3+
- - meta
4+
- http-equiv: refresh
5+
content: 0; url=https://damoang-users.github.io/gnuboard5-guide/developers/cache.html
66
---
7-
# 캐시 (Cache)
87

9-
TBD
10-
11-
DB에서 가져온 값이나 가공된 값을 캐시에 담아두고 빠르게 재사용할 수 있다.
12-
그누보드에서는 현재 최근게시물 위젯의 캐시만 사용하고 있다.
13-
14-
클래스 객체의 멤버 변수를 이용한 Object Cache와 파일을 이용한 캐시를 지원하며 파일 캐시는 사용자가 다른 수단으로 대체할 수 있다.
15-
16-
## 오브젝트 캐시
17-
18-
오브젝트 캐시는 접속자의 세션에서만 유지된다. 즉, 휘발성이다.
19-
[전역변수의 오염](/developers/polluted_variables)을 방지하고 공유하는 용도로 사용할 수 있다.
20-
21-
오브젝트 캐시는 `type`으로 분류되며 `bbs` 또는 `content` 두 가지 타입을 지원 한다.
22-
`bbs`는 게시판의 글의 데이터, `content`는 '게시판 관리 -> 내용관리'의 데이터가 저장된다.
23-
24-
`type`의 하위 분류로 `group`을 지정할 수 있으며 group을 지정하지 않으면 `default` 그룹 이름으로 분류된다.
25-
26-
`G5_object_cache` 클래스로 이용할 수 있지만, 단일 인스턴스를 위해 `$g5_object` 전역변수를 사용해야 한다.
27-
28-
### set()
29-
30-
::: warning
31-
`bbs`, `content` 외의 커스텀 타입은 임의의 공통 타입으로 지정되어 사실상 타입 지정이 무시되어 구분되지 않으므로 주의해야 한다. group과 key를 고유한 이름으로 지정해야한다.
32-
:::
33-
34-
```php
35-
# 게시물 타입 예시
36-
$data = [];
37-
$g5_object->set('bbs', $wr_id, $data, $bo_table);
38-
39-
# 커스텀 타입 예시
40-
$type = 'my_plugin';
41-
$key = 'config1';
42-
$data = [];
43-
$g5_object->set($type, $key, $data, 'my_plugin_config');
44-
```
45-
46-
### get()
47-
48-
캐시에 저장된 데이터를 반환하고, 저장된 데이터가 없으면 `false`를 반환 한다.
49-
50-
```php
51-
# 게시물 데이터 가져오기
52-
// 게시물은 세번째 인자인 그룹은 게시판 ID(bo_table)를 지정해야 한다
53-
$document = $g5_object->get('bbs', $wr_id, $bo_table);
54-
```
55-
56-
캐시에서 가져온 데이터를 변경 후 캐시 데이터에도 반영하려면 변경한 데이터를 캐시에 다시 저장해야 한다.
57-
58-
```php
59-
$document['wr_subject'] = str_replace(' ', '&nbsp;', $document['wr_subject']);
60-
$g5_object->set('bbs', $wr_id, $document, $bo_table);
61-
```
62-
63-
::: tip
64-
값으로 `false`를 저장하면 데이터가 없는 상태(`false`)와 구분하지 못하므로 귀찮아도 배열에 담아 저장해두는 것이 좋다.
65-
:::
66-
67-
### exists()
68-
69-
```php
70-
function exists($type, $key, $group = 'default');
71-
```
72-
73-
### delete()
74-
75-
```php
76-
function delete($type, $key, $group = 'default');
77-
```
78-
79-
## 파일 캐시
80-
81-
파일 캐시는 오브젝트 캐시와 달리 파일에 저장하고 모든 접속자의 세션에서 공유하여 사용할 수 있다.
82-
83-
캐시를 저장할 때 유지시간(TTL)을 지정하여 자동으로 만료시킬 수 있으며, TTL을 설정하지 않았더라도 데이터를 가져올 때 `$expired_time`을 지정하여 만료시킬 수 있다.
84-
85-
데이터를 가져올 때 지정하는 `$expired_time`은 목적에 따라 캐시를 만료시키는 상황을 분리할 수 있다. 예로,
86-
87-
### g5_set_cache()
88-
89-
`$ttl`을 지정하면 지정된 시간(초 단위)이 지나면 자동으로 만료된다. TTL은 선택사항이며 지정하지 않으면 자동으로 만료되지 않는다.
90-
91-
오브젝트 캐시와 마찬가지로 값으로 `false`를 저장하면 캐시가 없거나 만료된 상태와 구분할 수 없으므로 주의해야 한다.
92-
93-
```php
94-
# 데이터 저장
95-
$key = 'my_plugin_cache_data';
96-
$save_data = array();
97-
$ttl = 600; // 초(second)
98-
g5_set_cache($key, $save_data, $ttl);
99-
```
100-
101-
::: details
102-
103-
```php
104-
/**
105-
* @param string $key
106-
* @param mixed $save_data
107-
* @param int $ttl 초 단위
108-
* @return false|mixed
109-
*/
110-
function g5_set_cache($key, $save_data, $ttl = null);
111-
```
112-
113-
:::
114-
115-
### g5_get_cache()
116-
117-
파일 캐시에서 데이터를 가져온다.
118-
저장된 데이터가 없거나 만료되었다면 `false`를 반환 한다.
119-
120-
```php
121-
$myPluginConfig = g5_get_cache($key);
122-
123-
// 캐시에서 데이터를 가져오지 못하면 DB에서 가져오기
124-
if ($myPluginConfig === false) {
125-
// $myPluginConfig = ...;
126-
}
127-
```
128-
129-
`$expired_time`은 초(second) 단위로 지정할 수 있으며, 현재로부터 n초 이내의 데이터만 유지되며 그 이전의 캐시는 만료시킨다.
130-
131-
```php
132-
$expired_time = 600; // 초 단위
133-
$myPluginConfig = g5_get_cache($key, $expired_time);
134-
```
135-
136-
```php
137-
function g5_set_cache($key, $save_data, $ttl = null);
138-
function g5_get_cache($key, $expired_time=0);
139-
function g5_delete_cache($key);
140-
function g5_delete_all_cache();
141-
function g5_delete_cache_by_prefix($key);
142-
```
143-
144-
::: warning
145-
그누보드의 데이터는 예상하거나 감지할 수 없는 변경이 발생할 수 있어 캐시를 제때 갱신하지 못할 수 있다. 데이터를 가져오거나 저장하는 인터페이스가 거의 제공되지 않기 때문에 통제되지 않는 데이터 변경이 예상된다면 캐시를 사용하지 않는 것을 권장한다.
146-
:::
147-
148-
### 확장하기
149-
150-
- function get_cachemanage_instance()
151-
152-
- https://sir.kr/g5_plugin/8665
8+
[변경된 주소로 바로가기](https://damoang-users.github.io/gnuboard5-guide/developers/cache.html)

docs/developers/changelog.md

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,8 @@
11
---
22
head:
3-
- - link
4-
- name: canonical
5-
content: https://g5guide.github.io/developers/changelog.html
3+
- - meta
4+
- http-equiv: refresh
5+
content: 0; url=https://damoang-users.github.io/gnuboard5-guide/developers/changelog.html
66
---
7-
# 변경 내역
87

9-
## 5.5.8.2.7
10-
11-
12-
13-
## 5.5.8.2.6
14-
15-
### Hook 추가
16-
17-
- `content_admin_button_html` Replace Hook 추가 [6fd339](https://github.com/gnuboard/gnuboard5/commit/6fd339174e28063a167e19b7a88f67f6a556d8c7)
8+
[변경된 주소로 바로가기](https://damoang-users.github.io/gnuboard5-guide/developers/changelog.html)

0 commit comments

Comments
 (0)