Skip to main content

게시판을 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\CallApiServiceuse 사용합니다.

이제

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에 적용하기

소개형 게시판 적용 예제)