내용을 API로 출력해야 할 때 매우 간단하게 기존 HTML 구조를 바이패스 할 수 있는 방법
meanI
112.♡.169.220
2025-01-16 10:58
46
0
0
본문
## TL;DR
1. 그누보드/이윰빌더는 기본적으로 서버사이드 렌터링이므로 서버에서 HTML 구조를 바로 클라이언트에게 뿌려준다.
2. 데이터를 JSON으로 받으려면 HTML 구조가 일절 출력되어서는 안된다.
3. 이를 위해서는 head.php.html / tail.php.html / view.php.html 등 HTML 구조가 출력될 수 있는 모든 파일에 조건문을 걸어 출력되지 않게 해야 한다.
4. 아래 방법을 사용하면 그러한 노력을 하지 않더라도 간단하게 HTML 구조를 바이패스 할 수 있다.
```php
<?php
/*
테마 폴더의 head.html.php 상단
if (!defined('_EYOOM_')) exit;
밑에 아래 내용을 추가합니다.
*/
if ($_REQUEST['api'] == 'json') {
header("Content-Type: application/json; charset=UTF-8");
function apiExitFunc() {
global $전송할_배열_혹은_문자열_데이터;
if (ob_get_level()) ob_end_clean();
echo json_encode($전송할_배열_혹은_문자열_데이터);
}
register_shutdown_function('apiExitFunc');
ob_start();
}
?>
```
---
안녕하세요\~
요즘은 화면에 뿌려질 데이터를 서버 사이드에서 렌더링 하는 경우와 클라이언트 사이드에서 파싱해서 렌더링하는 경우로 나뉘어 지는 것을 알 수 있는데요,
서버 사이드 렌더링이라면 기존의 그누보드/이윰빌더에서 처리하는 방식처럼 php에다가 html 코딩하여 클라이언트에서 요청하면 바로 DOM에 뿌려주는 것을 말하는 것이고...
클라이언트 사이드 렌더링이라면 서버에서는 HTML의 뼈대가 되는 구조와... 그 뼈대에 들어갈 데이터를 따로 받은 뒤 클라이언트에서 자바스크립트를 통해 내용을 채워주는 것을 말합니다.
(는 그냥 제가 이해한 내용입니다..ㅎㅎ 전문적으로 배운게 아니라 하다보니 익혀진거라 세세한 부분이 틀렸다면 지적해주십시오!)
아무튼, 현 그누보드/이윰빌더 시스템에서 클라이언트 사이드 렌더링을 구현하기 위해 데이터를 API로 전달 받으려면, 별도로 데이터를 뿌려주도록 하나하나 코딩을 다시 해야 하는데요,
이렇게 하면 예를 들어 게시판 내용을 받아오려고 한다면, 기존에 잘 만들어진 bbs php 코드를 활용할 수 없게 되어 데이터베이스에서 직접 데이터를 불러와야 하는 상황이 되게 됩니다.
그래서 저는 이러한 상황에서는 기존의 HTML을 불러오지 않고 변수 데이터만 따로 불러와 JSON으로 보내줄 수 있게 하기 위해
\`head.html.php\`파일을 비롯, 헤드와 테일, 그리고 view.html.php 등 세부 내용의 HTML 구조가 불러와지지 않도록 if문으로 내용을 없애버렸었는데요,
이보다 더 간단한 방법을 발견하여 공유드립니다.
테마 폴더에서 head.html.php 파일을 열고 상단에 아래 코드를 추가합니다.
```php
<?php
/*
테마 폴더의 head.html.php 상단
if (!defined('_EYOOM_')) exit;
밑에 아래 내용을 추가합니다.
*/
if ($_REQUEST['api'] == 'json') {
header("Content-Type: application/json; charset=UTF-8");
function apiExitFunc() {
global $전송할_배열_혹은_문자열_데이터;
if (ob_get_level()) ob_end_clean();
echo json_encode($전송할_배열_혹은_문자열_데이터);
}
register_shutdown_function('apiExitFunc');
ob_start();
}
?>
```
이렇게 하고 주소 뒤에 api=json 파라미터를 추가하거나 POST 요청 시 api: 'json'를 같이 보내면 HTML 구조가 전혀 출력되지 않게 됩니다.
이제 view 페이지든 어디든 기존에 HTML과 함께 사용되었던 변수를 활용하여 필요한 정보를 별도로 변수에 담아두고 `$전송할_배열_혹은_문자열_데이터`에 넣어주면 담아두었던 배열 데이터만 JSON으로 인코딩되어 출력됩니다.
주의하실 점은, 기존 코드에서 제공하는 변수를 가공하지 않고 그대로 넣으시면, 너무 많은 정보가 클라이언트로 넘어가게 되므로 가급적 가공을 해서 사용하시는 게 좋겠습니다.
예를 들어 게시판 목록을 이렇게 구현하는 경우 `$list` 변수를 활용할 수 있는데 이걸 활용하면 필터링 없이 모든 게시글 값이 출력되므로 음... 경우에 따라선 문제가 될 수도?
암튼 읽어주셔서 감사합니다!
0
로그인 후 추천 또는 비추천하실 수 있습니다.
-
[팁 & 테크] 내용을 API로 출력해야 할 때 매우 간단하게 기존 HTML 구조를 바이패스 할 수 있는 방법2025-01-16
-
[팁 & 테크] 그룹 별 스킨 다르게 설정하기2024-09-30
-
[팁 & 테크] 글쓰기 시 링크 넣었을 때 오픈그래프 메타태그 넣어주기 (CKEditor4 전용, 스압!!)2024-09-25
-
[버그 & 건의] 게시판 이미지에 width, height 인라인 속성 무시되는 문제 해결 (스타일 속성 X)2024-09-05
-
[팁 & 테크] 관리자페이지 접속 시 이윰빌더 최신버전 자동 확인2024-07-17
-
[자유게시판] 굳이굳이 새로고침 없는 글목록 만들기... (유사SPA)2024-07-12
-
[이윰빌더 시즌4] 게시판 업데이트 시 적용되는 것이었나보네요!ㅎㅎ2024-09-24
-
[이윰빌더 시즌4] 설치 완료 후 DB 업그레이드했는데 업그레이드 할 필요가 없다고 나오는군요. 예약기능때문에 테이블 수정이 필요할것 같은데 알아서 되는것일까요?2024-09-24
-
[이윰빌더 시즌4] 오 감사합니다. 예약 게시판은 직접 만들어서 운용하고 있었는데 기본 기능으로 가능할지 확인해봐야겠네요ㅎㅎ (그나저나 오늘 새로운 그누보드 버전이 나와버려서... 사소한 업데이트라 그냥 적용해도 될지는 모르겠네요ㅋㅋ)2024-09-24
-
[이윰빌더 시즌4] 아아ㅎ 기본 테마 사용중이긴 한데, 최근 대규모 패치에서 테마파일은 제외시켰었어요! 마개조를 많이 해놔서,, 감사합니다!2024-07-17
-
[팁 & 테크] 본문에는 자바스크립트쪽 코드가 잘려나와서 첨부파일로 참조해주시면 될것같습니다..ㅎㅎ2024-07-17
-
[팁 & 테크] php쪽에서 확인하는 방법이 잘 되지 않는다면 코드 참조하여 자바스크립트 이용, 클라이언트측에서 확인하도록 하는 방법도 있을 것 같습니다! AJAX 등을 이용해서 해당 깃허브 파일을 다운로드하고 비교하는 방법으로..2024-07-17
-
[팁 & 테크] 물론이죠!!ㅎㅎ2024-07-17
-
[이윰빌더 시즌4] 감사합니다! 패치로 진행을 해서 그런가... 버튼 스타일에 btn-e-navy가 없는지 버튼 배경색이 안나오네요ㅠ 다시 indigo로 바꿔서 잘 사용하겠습니다!2024-07-17
댓글목록0