2014년 8월 29일 금요일

phpBB3에 새 페이지 만들기


phpBB3 에 새 페이지를 만들려면 다소 복잡한 과정을 거쳐야 합니다. phpBB 자체가 상당히 오랫동안 개발되어 온 프로그램으로 체계가 많이 잡혀있기 때문에 그런 것 같습니다.


1. 필요한 것들


- 기본 php 파일 : ./test.php
- 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();

?> 


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'        => '새 페이지 만들기',
));

?>



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>

여기에 실제 내용을 적어주세요.
  </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
출처 : http://mr-dust.pe.kr/entry/create-a-new-page-in-phpBB3

댓글 없음:

댓글 쓰기