게시판을 Pro Page에 적용하는 방법
공지형 게시판을 pro page에 적용하기
공지형 게시판 적용 예제)
문의형 게시판을 pro page에 적용하기
[문의형 게시판 - 1대1 문의 적용하기 예제]
pro 테마의1. Controller 구성
(
pro
테마에 Controller
를 구성합니다. dabory/themes/pro/app/
Htpp/Http/Controller/etc)etc
OneToOneController.
를 생성하고 php를php매메서드를 작성합니다.
- 외부 API 호출 설정
백엔드 API를 호출하고 결과를 처리하는기 위해 App\Services\CallApiService
를 use 사용합니다.
이제
class OneToOneController extends Controller
{
private $callApiService;
public function __construct(CallApiService $callApiService)
{
$this->callApiService = $callApiService;
}
public function list()를
작성하고{
CallApiService를$limit 통해= api를(int)request('limit', 호출합니다.12);
실제로$page api를= 호출하고(int)request('page', 응답을1);
받아오는$oneToOnePage 매서드는= $this->callApiService->callApi 매서드에서 이루어집니다.
callApi의 매개변수 구성은 다음과 같습니다.
callApi([
'url' => 'list-type1-page', // api에 요청할 url 주소
'data' => [ // list-type1-page로 요청할 data
'QueryVars' => [ // api 서버에서 Query를 식별할 수 있도록 구성한 요소들
'QueryName' => 'pro:my-page/my-post-list', // pro/.../my-page/post-list/ 디렉토리 안의 쿼리 파일을 찾는다.
'SimpleFilter' => "post_code='1to1'", // where 절에 추가
'SubSimpleFilter' => "image_type = 'thumb'", // and절에 추가
'IsntPagination' => false // pagination 여부
],
'ListType1Vars' => [
'OrderBy' => request('sort', 'mx.created_on desc')
],
'PageVars' => [
'Limit' => $limit,
'Offset' => ($page - 1) * $limit
]
]
]);
// dump($oneToOnePage);
$oneToOnePage['Page'] = new LengthAwarePaginator($oneToOnePage['Page'], $oneToOnePage['PageVars']['QueryCnt'],
$limit, $page, ['path' => request()->url()]);
// dump($oneToOnePage);
return view('views.etc.1to1-list', compact('oneToOnePage'));
}
public function store()
{
$validator = Validator::make(request()->all(), [
'post_title' => 'required',
'post_contents' => 'required',
'pc1' => 'required',
'pc2' => 'required|email'
]);
if ($validator->fails()) {
notify()->error(_e('Action failed'), 'Error', 'bottomRight');
return redirect()->back()
->withErrors($validator)
->withInput();
}
$response = $this->callApiService->callApi([
'url' => 'post-act',
'data' => [
'Page' => [
[
'Id' => 0,
'PostTitle' => request('post_title'),
'PostContents' => request('post_contents'),
'PostTypeId' => 6,
'Pc1' => request('pc1'),
'Pc2' => request('pc2'),
'Status' => '2',
'MemberId' => session('member')['MemberId'],
]
]
],
]);
if ($this->callApiService->verifyApiError($response)) {
notify()->error($response['body'], 'Error', 'bottomRight');
return redirect()->back();
}
// notify()->success(_e('Action completed'), 'Success', 'bottomRight');
return redirect()->route('1to1.list');
}
public function show($id)
{
$listType1Book = $this->callApiService->callApi([
'url' => 'list-type1-book',
'data' => [
'Book' => [
[
'QueryVars' => [
'QueryName' => 'pro:my-page/post-details',
'SimpleFilter' => "post_code='1to1' and mx.id = $id",
'IsntPagination' => true,
],
'PageVars' => [
'Limit' => 1
]
],
[
'QueryVars' => [
'QueryName' => 'pro:my-page/post-details-prenext',
'SimpleFilter' => "mx.id = (select max(id) from pro_post where id < ${id} and post_type_id = 6)",
'SubSimpleFilter' => "",
'IsntPagination' => true,
],
'PageVars' => [
'Limit' => 1
]
],
[
'QueryVars' => [
'QueryName' => 'pro:my-page/post-details-prenext',
'SimpleFilter' => "mx.id = (select min(id) from pro_post where id > ${id} and post_type_id = 6)",
'SubSimpleFilter' => "",
'IsntPagination' => true,
],
'PageVars' => [
'Limit' => 1
]
],
]
]
]);
// dd($listType1Book);
if ($this->callApiService->verifyApiError($listType1Book)) {
notify()->error($listType1Book['body'], 'Error', 'bottomRight');
return redirect()->back();
}
// dump($listType1Book);
return view('views.etc.1to1-details', compact('listType1Book'));
}
}
1대1문의 구현을 위한 Controller 예시
이 구성으로 list-type1-page
url로URL로 data와 함께data가 요청시되면, 백엔드api 서버는 weberp-queries
에서 weberp-quires에서 해당 url의URL의 QueryName에QueryVars에 작성해준 조건에 해당하는 sqlSQL 파일을 찾고, data를 통해데이터로 쿼리 조건절을 구성합니다.하여
위 방식대로 구성호출하면 백엔드서버의 api로부터 응답을고 반환받을 수 있으며 매개변수의 구성은 달라질 수 있습합니다.
응답 처리 이제및 받아온View 반환
API로부터 응답을 받아 변수에 담고, viewView 페이지에서 필요한 데이터들을를 가공하거나 따로 변수에 담아 view 페이지로환하여 반환합니다. View 페이지에서는 반환받은 배열 데이터를 통해 페이지 작업을 수행할 수 있습니다.
소개형 게시판을 pro page에 적용하기
소개형 게시판 적용 예제)