우리나라 웹사이트에서 주로 사용하는 CMS는 워드프레스, XE, 그누보드 정도입니다.
이번 포스팅에서는 그누보드와 워드프레스에서 외부 페이지를 연동하는 방법을 다룹니다.
그누보드 외부페이지 연동
그누보드에서 외부페이지를 연동시키기 위해서는 적당한 디렉토리를 만들고 그 안에 _common.php 파일을 작성합니다.
그 내용은 대개의 경우 다음과 같습니다.
<?php $g4_path = "./../gnu"; // common.php 의 상대 경로 include_once("$g4_path/common.php"); ?>
그런 뒤에 같은 디렉토리 내에 적당한 php 파일을 생성하고 첫 줄에 include_once(“./_common.php”);를 입력해 주면 그 php 파일은 그누보드와 연동됩니다.
즉 그누보드에서 제공하는 함수들(alert, goto_url, sql_query 등)을 사용할 수 있고, 현재 접속자의 id, 권한 등도 알 수 있습니다.
그누보드에서 제공하는 대표적인 변수들은 다음과 같습니다.
- $g4: 그누보드 경로, 테이블 이름, 현재시각 등에 관한 정보
- $config: 그누보드 설정값들에 관한 정보
- $board: 접속 중인 게시판에 관한 정보
- $member: 현재 접속자의 정보
- $is_guest: 현재 접속자가 손님인지에 관한 정보
- $is_member: 현재 접속자가 회원인지에 관한 정보
- $is_admin: 현재 접속자가 관리자인지에 관한 정보
워드프레스 외부페이지 연동
워드프레스에서 외부페이지를 연동시키기 위해서는 적당한 디렉토리 안에 적당한 php 파일을 생성하고 첫 줄에 include_once(“(워드프레스의 상대경로)/wp-config.php”);를 입력해 주면 그 php 파일은 워드프레스와 연동됩니다.
즉 워드프레스에서 제공하는 객체들($wpdb 등)을 사용할 수 있고, 현재 접속자의 id, 권한 등도 알 수 있습니다.
워드프레스에서 제공하는 대표적인 함수들은 다음과 같습니다.
- new WP_Query(): 해당 조건에 맞는 포스트에 관한 정보
- wp_get_current_user(): 현재 접속자에 관한 정보
- get_header(): 헤더 출력
- get_sidebar(): 사이드바 출력
- get_footer(): 푸터 출력
그누보드와 워드프레스의 로그인 연동(SSO; Single sign-on)
그누보드나 워드프레스 중 하나에 로그인하면 다른 하나에도 로그인이 되도록 하는 개념입니다.
php 파일을 작성하여 그누보드와 워드프레스의 로그인을 한꺼번에 처리하도록 할 수도 있고, 로그인 후에 redirect를 통해 순차적으로 로그인이 이루어지도록 할 수도 있습니다.
그누보드 로그인의 경우에는 /bbs/login_check.php 파일의 소스를 참고하여 로그인을 구현하면 됩니다.
워드프레스 로그인의 경우에는 wp_set_current_user 함수와 wp_validate_auth_cookie 함수를 사용하여 로그인을 구현하면 됩니다.
다만 로그인이 이루어진 이후의 문제점이 있습니다.
하나의 php 페이지에서는 그누보드와 워드프레스의 변수/함수를 한꺼번에 이용할 수 없고 둘 중 하나를 선택해야만 합니다.
그누보드와 연동시킬 경우 워드프레스와 연동시킬 수 없고, 그 반대의 경우에도 마찬가지입니다.
이런 현상이 일어나는 것은 function_exists 함수를 사용하지 않고 정의된 함수 중에서 이름이 중복되는 함수인 is_admin()이 그누보드와 워드프레스에 공통적으로 존재하기 때문입니다.
따라서 그누보드나 워드프레스 중 한쪽에서 is_admin 함수를 재정의하거나 function_exists 구문을 사용해서 정의한다면 문제를 해결할 수 있습니다.
그러나 함수 중복 오류 문제가 해결되어도 성능 문제가 존재합니다.
한 php 파일에서 그누보드와 워드프레스를 한꺼번에 사용하게 된다면, 그누보드와 워드프레스가 모두 실행되어야 하므로 실행속도가 느려집니다.
이러한 점들을 고려한다면, 꼭 필요한 경우가 아닌 경우라면 하나의 php 파일에서는 그누보드나 워드프레스 중 하나만 선택해서 실행하도록 하는 것이 좋습니다.
관련 포스트