Extra Form
PHP PHP 7.2
CMS Rhymix 2.1

게시판 확장변수(price) 한줄입력칸(text)를 생성해서 각 문서마다 가격(price)에 해당하는 숫자( 1000,12000,200,500..... )만 입력되어 있습니다.

 

게시판 목록에서 확장변수 가격순 정렬 링크 ( getUrl('sort_index','price','order_type',$order_type) )를 추가하여 가격순 정렬 기능을 적용하려고 합니다.

 

게시판 목록에서 가격순(오름차순,내림차순) 정렬을 클릭 해보면 확장변수 가격(price)에 입력된 숫자를 문자로 인식해서인지 아래 예시처럼 정렬이 됩니다.   


[ 게시판 목록 오름차순 정렬  ]
↓가격(price)  1000
↓가격(price)  12000
↓가격(price)  200
↓가격(price)  500

 

[ 게시판 목록 내림차순 정렬  ]
↓가격(price)  500
↓가격(price)  200
↓가격(price)  12000
↓가격(price)  1000

 

( https://martmonster.com/cu 에서 정렬 > 가격순으로 클릭하셔도 보실 수 있습니다. )


확장변수에 숫자로만 입력된 값을 문자가 아닌 숫자로 인식시키는 방법에 대해 도움 부탁드리겠습니다.

 

참고로 아래 팁을 적용 해봤지만 적용이 되지 않더라구요.

https://xe1.xpressengine.com/tip/20485191  ( 확장변수이용시 숫자 일경우 정렬하기 팁 )

 

modules/document/queries/getDocumentListExtraSort.xml
수정 전 :  <index var="ev.value" default="ev.value" order="order_type" />
수정 후 :  <index var="ev.value" default="ev.value+0" order="order_type" />

  • ?
    소스 수정없이 할 수 있는
    가장 쉬운 편법은.... 처음 가격 입력할때부터 자리수를 맞추는겁니다.
    최대 가격을 7자리라고 생각하면 2000원 인건 0007000 이렇게 입력하는거죠

    소스 수정하면 구현은 될거예요. ( 위에 적어주신 방법은 테스트해본 적은 없지만.. )
  • ? ?
    답변 감사합니다.

    2000원 인건 0007000 이렇게 입력하는거죠
    -> 이 부분을 이해를 잘 못하고 있는데요. ^^; 확장변수 한줄 입력칸에 2000원을 변환한 값 000700(?)을 입력하라는 말씀 이신건가요?

    이전 번 유사질문에 답변( https://xetown.com/questions/1489403 ) 주신 부분에서 말씀 해 주신

    "따라서 값을 입력할때 아예 자리수를 맞춰서 넣거나.. 전체를 6자리로 해서 300이면 000600 으로 넣거나
    아니면 query 를 수정해서 *1 이나 +0 처럼.. column 을 숫자로 인식하게 바꿔주거나 하면 될겁니다"

    query 자체를 수정하는 방법이 없을까요?
  • ? ?
    오타네요 ㅡㅡ; 왜 저렇게 했지..
    그냥 전체 자리수를 맞춰주면 된다는거예요 ^^;;;
    문자의 정렬은 앞부터 차례대로 검토하기에...
    만약 최대값이 백만 단위면, 7자리를 기준으로 하고.. 2000원이면 0002000 이 되겠죠
  • ? ?
    답변감사합니다. ^^
  • profile
    확장변수에 숫자 입력 항목이 추가되면 편리할 것 같긴 하네요
  • profile ?
    이게 DB 의 칼럼 타입이 문자형이여서..
    DB 속성 자체를 바꾸지 않는 한..
    query 를 수정해서 편법 처리해야할겁니다
    기존의 value 값을 이용해 임의의 칼럼을 숫자형으로 하나 만들어 그걸로 정렬하는
    query 문 잘 구현하면 가능은 하죠
    ( 물론 숫자형 사용자정의 정렬형태로 쓸때만 그 쿼리를 쓰게 Core 를 조금 고쳐야하지만 )
  • ? profile
    간단한 애드온 하나 만들어서 document.getDocumentList (before) 트리거 잡으면 코어 수정 없이도 가능하지요. 쿼리 XML 파일도 복사해서 애드온 쪽에 따로 넣으면 해당 확장변수가 아닌 다른 조건으로 정렬할 때 부작용이 일어나지도 않을 테고요.

    <index var="ev.value" default="ev.value+0" order="order_type" />

    여기다가 CAST를 써서 정수형으로 강제 변환하거나, 앞에 있는 var 속성을 지워야 작동할 것 같기도 합니다. default는 var가 없을 때만 사용하는 값인데, 코어에서 var를 넘긴다면 default는 그냥 무시하겠지요.

    그렇다고 var 속성을 지워 버리면 다른 확장변수를 사용해서 다른 순서로 정렬하는 부분이 모두 꼬여버릴 수 있으니, 어찌 됐든 쿼리는 복사해서 따로 만드는 수밖에요.
  • ?

    다른 방법에 대해 답변 주신 분들께 감사말씀드립니다.

    능력상 스킨에서 처리하는 방법으로 해결했습니다. ( 스킨에서 처리하는 것은 뭔가 좀 아닌 것 같은 느낌이 듭니다. )

     

    혹시 같은 고민을 갖고 계신 분은 아래 쳇 gpt 참고 해주세요.

    2024-02-16 15,13,42.JPEG