phpBB3 에 새 페이지를 만들려면 다소 복잡한 과정을 거쳐야 합니다. phpBB 자체가 상당히 오랫동안 개발되어 온 프로그램으로 체계가 많이 잡혀있기 때문에 그런 것 같습니다.
1. 필요한 것들
- 기본 php 파일 : ./test.php
- php 파일에 대응하는 언어팩 파일 : ./language/언어명/mods/test.php
- php 파일에 대응하는 html 파일 : ./style/템플릿명/template/test_body.html
- php 파일에 대응하는 언어팩 파일 : ./language/언어명/mods/test.php
- php 파일에 대응하는 html 파일 : ./style/템플릿명/template/test_body.html
2. 기본 php 파일 : ./test.php
이 파일은 가장 기본이 되는 파일입니다.
들여다보면 뭐 정신없습니다. 다른 것 다 관심을 끄고 몇 가지 중요한 것만 보자면..
<?php
define('IN_PHPBB', true);
// phpbb가 설치된 경로로 루트로부터의 상대 경로입니다.
$phpbb_root_path = './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
// Start session management
$user->session_begin();
$auth->acl($user->data);
// setup() 안에 언어팩 파일의 이름을 적어줍니다. 예를 들어 언어팩 파일명이 test.php 라면, $user->setup(mods/test); 입니다. 언어팩 파일이 없으면 비워둡니다.
$user->setup();
// 페이지 명입니다. Page title 대신 원하는 문구를 집어넣습니다.
page_header('Page title');
$template->set_filenames(array(
// 기본 php 파일에 대응하는 템플릿 파일명을 적어줍니다.
'body' => 'test_body.html',
));
make_jumpbox(append_sid("{$phpbb_root_path}viewforum.$phpEx"));
page_footer();
?>
여기까지는 언어팩 파일을 제외한 단순 페이지 생성입니다. 사실 직접 만드는 페이지에서 다중 언어를 지원할 일이 별로 없지요. 하지만 필요하다면? 다음 코드로 대신합니다.
+ 언어팩을 사용하는 경우의 코드
<?php
$example_variable = sprintf($user->lang['TIME_NOW'], $user->format_date(time()));
$google_logo = '<a href="http://www.google.com/"><img src="http://www.google.com/intl/en_ALL/images/logo.gif" alt="Google" /></a>';
// 이제는 각 변수를 템플릿에 사용된 변수와 매치시켜줍니다.
$template->assign_vars(array(
'EXAMPLE_VAR' => $example_variable,
'GOOGLE_LOGO' => $google_logo,
'MY_AVATAR' => get_user_avatar($user->data['user_avatar'], $user->data['user_avatar_type'], $user->data['user_avatar_width'], $user->data['user_avatar_height']),
));
/*
* 템플릿에 있는 'EXAMPLE' 에는 언어팩 파일에 의해 '예제' 라는 값이 적용됩니다. ('EXAMPLE' => 'Example',) 이것을 'EXAMPLE' => $row['example'], 을 통해 example 에 다시 대입하며 이를 배열의 열로 집어넣습니다.
* 마찬가지로 'DEMO' 에는 '데모' 값이 들어가며, 이는 'DEMO' => $row['demonstration'], 을 통해 열 배열인 'demonstration' 으로 보내집니다. 그리고 열 배열의 인수인 'example' 과 'demonstration' 에는 '예제1', '예제2', '설명?', 'Somecount 가 뭐야?' 가 들어가게 되는 것입니다.
* 꽤 복잡합니다만 대충 구조를 알고 나니 별거(?) 아니군요. 이 예제는 다음과 같이 표시됩니다.
*/
$some_array = array(
array(
'example' => '예제 1',
'demonstration' => '설명?',
),
array(
'example' => '예제 2',
'demonstration' => 'Somecount 가 뭐야?',
),
);
foreach ($some_array as $row)
{
$template->assign_block_vars('block_name', array(
'EXAMPLE' => $row['example'],
'DEMO' => $row['demonstration'],
));
}
// 페이지 제목입니다.
page_header($user->lang['MY_TITLE']);
// 템플릿 파일 명을 적어주는 부분입니다. 템플릿 파일은 ./styles/템플릿명/template/ 아래에 들어가며 여기서는 my_template.html 을 사용하였습니다.
$template->set_filenames(array(
'body' => 'my_template.html',
));
// Completing the script and displaying the page.
page_footer();
?>
들여다보면 뭐 정신없습니다. 다른 것 다 관심을 끄고 몇 가지 중요한 것만 보자면..
<?php
define('IN_PHPBB', true);
// phpbb가 설치된 경로로 루트로부터의 상대 경로입니다.
$phpbb_root_path = './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
// Start session management
$user->session_begin();
$auth->acl($user->data);
// setup() 안에 언어팩 파일의 이름을 적어줍니다. 예를 들어 언어팩 파일명이 test.php 라면, $user->setup(mods/test); 입니다. 언어팩 파일이 없으면 비워둡니다.
$user->setup();
// 페이지 명입니다. Page title 대신 원하는 문구를 집어넣습니다.
page_header('Page title');
$template->set_filenames(array(
// 기본 php 파일에 대응하는 템플릿 파일명을 적어줍니다.
'body' => 'test_body.html',
));
make_jumpbox(append_sid("{$phpbb_root_path}viewforum.$phpEx"));
page_footer();
?>
여기까지는 언어팩 파일을 제외한 단순 페이지 생성입니다. 사실 직접 만드는 페이지에서 다중 언어를 지원할 일이 별로 없지요. 하지만 필요하다면? 다음 코드로 대신합니다.
+ 언어팩을 사용하는 경우의 코드
<?php
$example_variable = sprintf($user->lang['TIME_NOW'], $user->format_date(time()));
$google_logo = '<a href="http://www.google.com/"><img src="http://www.google.com/intl/en_ALL/images/logo.gif" alt="Google" /></a>';
// 이제는 각 변수를 템플릿에 사용된 변수와 매치시켜줍니다.
$template->assign_vars(array(
'EXAMPLE_VAR' => $example_variable,
'GOOGLE_LOGO' => $google_logo,
'MY_AVATAR' => get_user_avatar($user->data['user_avatar'], $user->data['user_avatar_type'], $user->data['user_avatar_width'], $user->data['user_avatar_height']),
));
/*
* 템플릿에 있는 'EXAMPLE' 에는 언어팩 파일에 의해 '예제' 라는 값이 적용됩니다. ('EXAMPLE' => 'Example',) 이것을 'EXAMPLE' => $row['example'], 을 통해 example 에 다시 대입하며 이를 배열의 열로 집어넣습니다.
* 마찬가지로 'DEMO' 에는 '데모' 값이 들어가며, 이는 'DEMO' => $row['demonstration'], 을 통해 열 배열인 'demonstration' 으로 보내집니다. 그리고 열 배열의 인수인 'example' 과 'demonstration' 에는 '예제1', '예제2', '설명?', 'Somecount 가 뭐야?' 가 들어가게 되는 것입니다.
* 꽤 복잡합니다만 대충 구조를 알고 나니 별거(?) 아니군요. 이 예제는 다음과 같이 표시됩니다.
$some_array = array(
array(
'example' => '예제 1',
'demonstration' => '설명?',
),
array(
'example' => '예제 2',
'demonstration' => 'Somecount 가 뭐야?',
),
);
foreach ($some_array as $row)
{
$template->assign_block_vars('block_name', array(
'EXAMPLE' => $row['example'],
'DEMO' => $row['demonstration'],
));
}
// 페이지 제목입니다.
page_header($user->lang['MY_TITLE']);
// 템플릿 파일 명을 적어주는 부분입니다. 템플릿 파일은 ./styles/템플릿명/template/ 아래에 들어가며 여기서는 my_template.html 을 사용하였습니다.
$template->set_filenames(array(
'body' => 'my_template.html',
));
// Completing the script and displaying the page.
page_footer();
?>
3. 언어팩 파일 : ./language/언어명/mods/test.php
사실 언어팩 파일은 특별한 경우외에는 필요하지 않습니다.
다중 언어 지원 및 배포가 목적이 아닌 단순 개인 사용이나, 특정 사이트에서만 사용이라면 패스~
+ 언어팩을 사용하는 경우의 코드
다중 언어 지원 및 배포가 목적이 아닌 단순 개인 사용이나, 특정 사이트에서만 사용이라면 패스~
+ 언어팩을 사용하는 경우의 코드
<?php
if (!defined('IN_PHPBB'))
{
exit;
}
if (empty($lang) || !is_array($lang))
{
$lang = array();
}
// 주의 사항
//
// BOM 을 포함하지 않는 UTF-8 으로 작성하라고 하네요.
// 그리고 'Page %s of %s' 와 같은 경우에 '%2$1 페이지 중 %1$s' 라는 식으로 순서를 바꿀 수 있다고 합니다. 오.. 이거 좋네요. Great!!
// 그리고 url 등을 감싸기 위해 단어 앞뒤로 사용된 플레이스홀더는 굳이 자리를 바꿀 필요가 없다고 합니다. 예: 'Click %sHERE%s'
// 앞서 기본 php 파일에서 정의해둔 변수들이 나옵니다. EXAMPLE, DEMO 는 알겠는데, TIME_NOW 와 MY_TITLE 은 어디서 튀어나온 거죠? 위에서 잘 보시면 있습니다. :) (페이지 검색!)
$lang = array_merge($lang, array(
'EXAMPLE' => '예제',
'DEMO' => '데모',
'TIME_NOW' => '지금 시각은 %s 입니다.',
'MY_TITLE' => '새 페이지 만들기',
));
?>
if (!defined('IN_PHPBB'))
{
exit;
}
if (empty($lang) || !is_array($lang))
{
$lang = array();
}
// 주의 사항
//
// BOM 을 포함하지 않는 UTF-8 으로 작성하라고 하네요.
// 그리고 'Page %s of %s' 와 같은 경우에 '%2$1 페이지 중 %1$s' 라는 식으로 순서를 바꿀 수 있다고 합니다. 오.. 이거 좋네요. Great!!
// 그리고 url 등을 감싸기 위해 단어 앞뒤로 사용된 플레이스홀더는 굳이 자리를 바꿀 필요가 없다고 합니다. 예: 'Click %sHERE%s'
// 앞서 기본 php 파일에서 정의해둔 변수들이 나옵니다. EXAMPLE, DEMO 는 알겠는데, TIME_NOW 와 MY_TITLE 은 어디서 튀어나온 거죠? 위에서 잘 보시면 있습니다. :) (페이지 검색!)
$lang = array_merge($lang, array(
'EXAMPLE' => '예제',
'DEMO' => '데모',
'TIME_NOW' => '지금 시각은 %s 입니다.',
'MY_TITLE' => '새 페이지 만들기',
));
?>
4. 템플릿 파일 : ./styles/템플릿명/template/test_body.html
실제 html 코드가 들어가 있는 파일입니다.
위 아래로 Header(overall_header.html) 와 Footer(overall_footer.html)가 있으며 그 안에 실제 내용이 들어갑니다. 중요한 것 없음 ;;
<!-- INCLUDE overall_header.html -->
<h2>Title Here</h2>
<div class="panel">
<div class="inner"><span class="corners-top"><span></span></span>
<div class="content">
<p>
</div>
<span class="corners-bottom"><span></span></span></div>
</div>
<!-- INCLUDE jumpbox.html -->
<!-- INCLUDE overall_footer.html -->
아래는 다소 복잡한 template 파일 예제로 언어팩을 사용할 경우입니다.
위 아래로 Header(overall_header.html) 와 Footer(overall_footer.html)가 있으며 그 안에 실제 내용이 들어갑니다. 중요한 것 없음 ;;
<!-- INCLUDE overall_header.html -->
<h2>Title Here</h2>
<div class="panel">
<div class="inner"><span class="corners-top"><span></span></span>
<div class="content">
<p>
여기에 실제 내용을 적어주세요.
</p></div>
<span class="corners-bottom"><span></span></span></div>
</div>
<!-- INCLUDE jumpbox.html -->
<!-- INCLUDE overall_footer.html -->
아래는 다소 복잡한 template 파일 예제로 언어팩을 사용할 경우입니다.
언어팩을 사용하는 경우의 코드
5. 결론
뭔
가 많이 복잡했습니다만, 사실 언어팩을 사용하지 않으면 굉장히 간단하게 끝이 납니다. 이 과정이 필요했던 것이 저의 경우는 구글
CSE 사용이었기 때문에, 언어팩이 필요없었죠. 따라서 간단히 두 개의 파일만 만들고, 변수니 뭐니 신경 안써도 해결되었습니다.
:)
6. 참고한 페이지
- Add a New Custom Page to phpBB
- Adding pages
댓글 없음:
댓글 쓰기