검색 기능 추가이다.
기본 환경은 1편이랑 동일하고 몇몇 구문이 추가가 된다.

 

 

1. Controller 수정

: 우성 컨트롤러부터 수정한다. 가장 기본적인거는 검색어이다. 그런데 변수를 2개 쓴다.

우리가 5페이지를 보고 있다가 갑자기 검색을 하게 된다고 가정을 한다면..

검색된 후 페이지가 어떻게 될까? 아마도 검색 후 1페이지가 아닌 5페이지를 가르키게 된다.

개인적으로는 그래도 된다고 생각한다만;;; 너무 논리적이잖아.. 난 전혀 안이상해..;;

그리고 검색어로 다시 8페이지 보고 있다가 다시 검색할때...

어라 새 검색어야? 아니면 기존에 보고 있던 검색어야? 판단해야 한다..

그래서 부득이하게 이런걸 없애기 위해서 검색어는 2개의 변수에 저장한다.

녹색은 주석이고 파란색이 추가된 부분이다.

 

[Controller]

  

public ActionResult Index(string CurrentSchTxt, string SchTxt, int? Page)
        {

// SchTxt가 신규 검색어이다.

            if (SchTxt != null)
            {

// 신규 검색어가 있으면 페이지는 1페이지로 한다.

Page = 1;

}

else

{

// 신규 검색어가 아닌 기존 검색어가 넘어올경우 기존 검색어를 SchTxt에 넣어준다.

// CurrentFilter 새 검색어가 입력되기 전까지 검색어는 이 녀석이 가지고 있다.

// 그리고 가지고 있는 값을 매번 SchTxt에 넘겨준다.

SchTxt = CurrentSchTxt;

}

 

// 검색어는 ViewBag.CurrentFilter로 뷰에 넘겨준다.

            ViewBag.CurrentFilter = SchTxt;

 

            var banners = from b in db.Banners
                          select b;

 

// 검색어가 있을 경우 검색한다.

if (!String.IsNullOrEmpty(SchTxt))

{

banners = banners.Where(t => b.Title.ToUpper().Contains(SchTxt.ToUpper()));

}

 

// 아래는 단순 정렬

            banners = banners.OrderByDescending(b => t.Id);


            int PageNo = Page ?? 1;
           
            int PageSize = 3;


            return View(banners.ToPagedList(PageNo, PageSize));
        } 

 

 

 

2. View 수정

: 컨트롤러 다음은 뷰다.

우선 상단에서 컨트롤러부터 검색어를 넘겨받는다.

그 후에 페이징 리스트가 표시되는 부분에 페이지를 넘길때 검색어도 같이 넘기는 작업이 필요하다.

그리고 마지막으로 검색창을 단다.

 

[View 상단]

  

@{

// 컨트롤러부터 검색어를 넘겨 받아 변수에 저장한다.

string SchTxt = ViewBag.CurrentSchTxt;

}

 

 

[View 페이징 리스트]

 

 <div>

    <div class="col-xs-12 text-center">
        @Html.PagedListPager(Model, Page => Url.Action("Index", new { Page, CurrentSchTxt = SchTxt }))

    </div>
</div>

 

 

[View 검색창]

  

// 검색창은 수정이 아니라 추가 입니다.

<div class="form-group">

@using (Html.BeginForm("Index", "Banner", FormMethod.Get))

{

<div class="col-xs-8 col-lg-4">

// @value 에 컨트롤러로부터 받아온 검색어를 넣어준다.

@Html.TextBox("SchTxt", null, new { @placeholder = "검색어를 입력해주세요", @value = SchTxt, @class = "form-control input-sm" })

</div>

<div class="col-xs-4 col-lg-2">

// 검색 버튼

<input type="submit" value="검색" class="btn btn-default input-sm" />

</div>

}

</div> 

 

 

 

 

끝이다.

게시판의 꽃인 페지이 및 검색 작업이 아주 쉽게 끝났다.

포스팅도 생각보다 편했다.

그리고 마지막으로 조금전에 혹 해서 찾아본 기능인 엮인글(?) 기능...

혹시 1편을 못보셨다면 준비했습니다~

 

 

- 관련 글 -

2018/06/27 - [Asp.Net Mvc] - Asp.net Mvc PagedList 페이징 처리 (검색 기능 포함) (1)



 

 



Posted by T.t.
:


현재 저의 버전은 아래와 같습니다.

.framework : 4.5.2
Mvc : 5.2.3.0
Paged : 1.17.0
PagedList.Mvc : 4.5.0

게시판의 하이라이트 페이징 기능...
닷넷프레임워크 Mvc로 작업을 했을경우 페이징을 지원하는 패키지가 있는데..
그중 대표적인 라이브러리 중 하나인 PagedList 를 사용해보겠습니다.
우선 적용할 프로젝트가 있고 페이징을 뺀 기본적인 게시판 기능이 만들어져있다는 가정하에 진행하도록 하겠습니다.
그리고 저는 일반 게시판이 아닌 배너 게시판에 페이징 기능을 추가하면서 작업한걸 스샷 찍은거라 Board가 아니라 Banner라는 테이블에 연결되는 혼돈하지말아주세요.

 

1. PagedList 패키지 설치라이브러리 설치

1) 우선 참조에 가셔서 마우스 오른쪽을 누르면 아래와 같이 [NuGet 패키지 관리] 메뉴가 뜹니다. 눌러줍니다.

 

2) 팩키지 관리자 창이 뜨면 찾아보기에서 'pagedlist' 라고 검색합니다. 검색 결과중 아래와 같은 팩키지를 선택하고 오른쪽 창에서 설치를 눌러줍니다. 저는 안정적인 최신 버전인  4.5.0 버전을 설치하는군요.

 

3) 설치를 시작하면 아래와 같이 2개의 팩키지가 설치 된다고  설치할꺼냐고 다시 한번 확인하는 창이 나오네요.

 

4) 설치가 완료되면 하단에 출력창에 [완료] 라고 뜹니다.

 

 

2. Controller 수정

1) Using 지시문을 컨트롤러 맨 상단에 추가하자.

Using PagedList;

 

2) 리스트를 표출하는 ActionResult 가 Index라고 할때, 아래와 같이 변경해주자.

public ActionResult Index(int? Page)

{

// int? Page : 리스트 페이지가 불러올때 null 을 허용하는 int Page 를 받아온다.
// Page 는 현재 호출되는 페이지 번호가 저장되어있다.

// 우선 데이터를 가져옵니다.
var banners = from b in db.Banners
                    select b;

// 현재 페이지 정보가 없다면 1페이지로 간주하고 아니면 페이지 정보를 넘긴다다.
int PageNo = Page ?? 1;

// PageSize : 한 페이지에 불러올 컨텐츠의 수
int PageSize = 3;

return View(banners.ToPagedList(PageNo, PageSize));

 

3. View 수정

1) 기존에 있던 using 지시문을 날리고.. 아래처럼 변경해주자.

 

2) 페이지 리스트가 나올 자리를 잡고 아래구문을 넣어주자.

@Html.PagedListPager(Model, Page => Url.Action("Index", new {Page}))

 

3) 이제 실행해보자. 아래 그림처럼 나온다.

 

4) 2)에서 적용한 코드가 3)의 그림처럼 나오는데 그쪽 코드를 한번 열어봤습니다. 현재 제가 설정한 상태의 버전에서 출력해주는 코드는 아래와 같습니다.

<div class="pagination-container">
    <ul class="pagination">
        <li class="active"><a>1</a></li>
        <li><a href="/Banner?page=2">2</a></li>
        <li class="PagedList-skipToNext"><a href="/Banner?page=2" rel="next">»</a></li>
    </ul>
</div>

 

5) 혹시 3)번의 그림처럼 나오지않는 분들도 있을텐데.. 저의 샘플은 현재 제이쿼리 css와 부트스트랩이 적용된 상태라 위에 처럼 나옵니다. 혹시 다르게 나오시는분들은 팩키지 설치될때 '/Content/PagedList.css' 라는 파일이 같이 설치되었습니다. 뷰 소스 편하신곳에 아래 처럼 삽입하시면 기본적인 디자인이 들어간 형태의 페이징 화면을 보실수 있습니다. 그게 아니면 4)에 코드를 참고하여 스스로 css를 작성해도 됩니다.

<link href="/Content/PagedList.css" rel="stylesheet" type="text/css" />

 

끝.



- 관련글 -


2018/07/11 - [Asp.Net Mvc] - Asp.net Mvc PagedList 페이징 처리 (검색 기능 포함) (2)




Posted by T.t.
:


어떤 형태든 메시지라는 형태로 간략하게 데이터를 저장하고..
그것을 큐에 저장했다가 필요할때 꺼내 쓴다.
그것에 메시지 큐이다.
큐라는것이 먼저 들어온 데이터가 먼저 나가는 구조이기 때문에..
먼저 들어온 데이터를 먼저 빼내지는 형태의 저장소가 필요할때 쓴다.
이 두가지가 기능이 요지이다.
많은 메시지 큐가 있고 윈도우즈 서버를 사용한다면 MS사의 메시지큐가 제일 낯익을테지만...
이번에 작업하던게 있었고...
래빗 메시지큐를 사용하게 되었고 이 기회에 포스팅 하나 한다.
래빗은 많은 메시지큐 프로그램 중에 하나라고 보시면 된다. 메시지 큐쪽에서는 유명한걸로 알고 있음.
메시지큐가 아닌 래빗을 찍고 들어왔다면 더 이상 자세한 설명은 필요없다고 본다..;;

 

1. Erlang 설치

RabbitMQ 설치 전에 먼저 Erlang이 설치되어있어야 합니다.

다운로드 : http://www.erlang.org/downloads

위 사이트에 접속하면 아래와 같이 뜬다...

1) 파일 다운로드. 나는 현재 최신인 20.3에 64비트 파일을 다운로드 했다.

 

2) 파일이 다운로드 되고 실행하면 아래와 같이 뜬다. Next~

 

3) 설치 위치 지정. Next

 

4) 시작메뉴 폴더 이름 지정 후 Install

 

5) 인스톨이 진행되는 화면

 

6) 인스톨 완료. Close

 

7) 인스톨 완료 후 환경 변수가 아래 빨간 박스처럼 설치 폴더를 제대로 지정하는지 확인하자.
만약 제대로 지정되지않았다면 제대로 잡아주자.
이로서 1단계는 완료이다.

 

 

2. RabbitMQ Server 설치

1) 다운로드 : http://www.rabbitmq.com/install-windows.html
윈도우에 설치하니간 윈도우 버전으로 링크 걸었습니다. 저는 3.7.5 버전을 다운로드 했습니다.

 

2) 다운로드 파일 실행. 설치를 원하는 컴퍼넌트 선택. Next.

 

3) 다운로드 파일 실행. 설치 위치 지정 후 Install.

 

4) 설치 완료.

 

5) 진짜 설치 완료.

 

6) 설치 완료 후 생성된 시작화면 모습입니다.
이제 플러그인을 활성화해야 한다. 이 플러그인은 웹 기반의 관리툴이라고 보면 된다.
메뉴 중에 [RabbitMQ Command Prompt (sbin dir)]을 실행해 준다.

 

7) 커맨드 창이 뜬다.

 

8) 커맨드창에 아래와 같이 입력해주자.

> rabbitmq-plugins enable rabbitmq_management

그러면 아래 그림처럼 활성화가 된다.

 

9) 활성화가 시작되면 서비스를 재기동 및 서비스를 설치해야 한다.
아래 명령어를 순서대로 실행시키자.

> rabbitmq-service.bat stop

> rabbitmq-service.bat install

> rabbitmq-service.bat start

 

10) 위에 커맨드를 입력하면 아래처럼 반응을 보인다. 2번째 설치 커맨드는 이미 설치되어있군요.

 

11) 이로서 설치까지는 끝났습니다.

 

 

3. 실행 (매니지먼트 플러그인)

1) 웹브라우저를 띄우고 주소창에 http://localhost:15672 를 입력해본다.

Url : http://localhost:15672

Username : guest

Password : guest

guest 계정은 로컬호스트에서만 먹힌다.

 

2) 로그인을 완료하면 아래와 같은 화면이 뜬다. 이로서 기본적인 설치는 끝이다.

 

4. 체크사항

1) 사용포트

주로 사용하는 포트들 리스트이다. 혹 장애가 생기면 확인해야 할 부분들이다.

epmd : 4369
Erlang Distribution : 25672
AMQP 0-9-1 Without and With TLS : 5671, 5672
Management Plugin : 15672
STOMP : 61613, 61614
MQTT : 1883, 8883

 

2) Log

위치 : C:\Users\계정명\AppData\Roaming\RabbitMQ\log
해당 폴더에 로그 파일이 있으며 과거 로그 이력 파일을 유지해야 한다.

 

 

ps. 기본적인 사항은 여기까지가 되겠다.
추가적인 포스팅을 더 하고 싶지만 어떻게 될지는 잘 모르겠다.
추가적인 포스팅을 하게 된다면 링크를 걸도록 하겠다.

 

 

 



Posted by T.t.
: