action 모듈화
/매크로모듈화와 유사하게, wiki.pl?action=**** 의 형식으로 호출했을 때 실행되는 함수를 별도의 파일로 분리하여 손쉽게 새로운 action을 추가하거나 기존 action을 덮어쓸 수 있게 함.
- 필수 요구 사항: 없음
- 선택 요구 사항: 없음
- 사용법: wiki.pl 이 실행되었을 때 GetParam('action') 의 값이 예를 들어 "bookmark" 라면,
- 먼저 ./myaction/ 에서 bookmark.pl 을 찾는다. (사용자가 작성한 액션 파일을 넣는 디렉토리)
- 없으면 ./action/ 에서 bookmark.pl 을 찾는다. (ext버전에 포함된 디렉토리)
- 위 두 경우에 bookmark.pl이 있으면, 그 파일을 읽은 후 그 안에 있는 action_bookmark 함수를 호출한다. (즉, 함수이름은 "action_액션이름"이 되도록 작성할 것)
- 그도 없으면 기존처럼 wiki.pl 내의 if 구문에서 검색한다.
- 즉 wiki.pl내에 있는 기존 action들도 덮어쓸 수 있다는 얘기이다.
wiki.pl 수정
sub DoOtherRequest {
...
if ($action ne "") {
$action = lc($action);
my $action_file = "";
my ($MyActionDir, $ActionDir) = ("./myaction/", "./action/");
if (-f "$MyActionDir/$action.pl") {
$action_file = "$MyActionDir/$action.pl";
} elsif (-f "$ActionDir/$action.pl") {
$action_file = "$ActionDir/$action.pl";
}
if ($action_file ne "") {
my $loadaction = eval "require '$action_file'";
if (not $loadaction) {
$UseShortcut = 0;
&ReportError(Ts('Fail to load action: %s', $action));
return;
}
my $func = "action_$action";
&{\&$func}();
return;
}
if ($action eq "edit") {
...
}
추가 업데이트 내역
사용자 의견
위키위키분류