복수의 카테고리를 선택해서 문서 목록 출력 가능?
죄송합니다.
좀 전에 당분간 코드를 멀리할 것처럼 해놓고 막상 글을 써놓고 나니까 갑자기 코드가 보고 싶어져서 또 봐버렸습니다ㅜㅜ
그러다 그냥 우연히 얻어걸린 건데요.
일반적으로 문서 리스트를 출력할 때 카테고리 하나만 선택이 가능하다고 생각을 해왔잖아요?
근데 _setSearchOption 함수를 보니
https://github.com/rhymix/rhymix/blob/922025ae8ed5de58dd75d1cac20494eb25153f23/modules/document/document.model.php#L1370-L1380
목록화 작업을 할 때 카테고리는 배열로 넘어가더라구요.
실제로 getDocumentList 쿼리에서도 category_srl은 equal이 아니라 in으로 가져오게 되더라구요.
https://github.com/rhymix/rhymix/blob/922025ae8ed5de58dd75d1cac20494eb25153f23/modules/document/queries/getDocumentList.xml#L11
즉, 배열도 받아준다는 이야기겠죠?
그래서 주소창에 분류번호를 넘기는 category 대신에 category_srl=17330,13007,12438 이런 식으로 쿼리스트링을 넘겨봤습니다.
이를 위해 getDocumentList 함수에서 $obj를 _setSearchOption 함수로 넘겨주기 직전에
https://github.com/rhymix/rhymix/blob/922025ae8ed5de58dd75d1cac20494eb25153f23/modules/document/document.model.php#L239
이거를 삽입하고 getDocumentList 쿼리로 전달되는 category_srl 변수를 가로채봤습니다.
(기존 주소 체계의 쿼리스트링 형식에서 카테고리 번호의 파라미터는 category이니, category_srl을 파라미터로 넘기는 이 방법은 기존 체계에 영향을 주지 않을 겁니다. 물론 쿼리스트링에 category_srl이 있으면 category 파라미터를 덮어버릴 테지만요ㅎ)
그리고 주소창에 https://dev.aporia.blog/board_fKje43?category_srl=17330,13007,12438 이런 식으로 url을 입력했더니... ㄷㄷㄷ
여러 개의 카테고리가 선택된 문서가 목록으로 출력됐습니다. 대박.
물론 debug 패널에 에러메시지가 있긴 했는데, 이거는 _setSearchOption 함수를 조금 수정해주면 사라지더군요.
아까 전에 category_srl을 넘겨주던 부분을 이런 식으로요.
if(isset($args->category_srl) && $args->category_srl)
{
$category_list = self::getCategoryList($args->module_srl);
if ( !is_array($args->category_srl) )
{
$args->category_srl = explode(',', preg_replace('/[^0-9\,]+/s', '', $args->category_srl));
}
foreach ( $args->category_srl as $category_srl )
{
if(isset($category_list[$category_srl]) && !empty($category_list[$category_srl]->childs))
{
$args->category_srl = array_merge($args->category_srl, $category_list[$category_srl]->childs);
}
}
}
이거 근데 이렇게 해도 되는 거겠죠?
그리고 원래 알 만한 분들은 알던 팁이었을까요?

댓글 8
글쓸때 여러개 선택해서 저장하는건가요?
https://github.com/rhymix/rhymix/blob/master/modules/document/schemas/documents.xml#L4
디비기본 타입이 number인데 그게 가능한가요?\
그냥 검색하는 정도라면 해당 카테고리에 해당되는 글을 가져오라고 in 으로 카테고리 넣어서 쿼리문을 만들었을거예요
https://github.com/rhymix/rhymix/blob/master/modules/document/queries/getDocumentList.xml#L11
아 네 테이블의 컬럼 자체는 숫자만 들어가니까...
어쨌든 오류도 없이 깔끔하게 목록이 만들어져서 깜짝 놀랐습니다;;;
알아서 만들어주고 넘겨줍니다 ㅎㅎ
주소 호출 방식을 변경해봤습니다.
이제는 이렇게 접속이 됩니다~
https://dev.aporia.blog/board_fKje43?category_srls[]=17330&category_srls[]=12438&category_srls[]=13007
관련 소스도 다음과 같이 해야 하구요.
if ( isset($args->category_srl) && $args->category_srl )
{
$category_list = DocumentModel::getCategoryList($args->module_srl);
if ( !is_array($args->category_srl) )
{
$args->category_srl = explode(',', preg_replace('/[^0-9\,]+/s', '', $args->category_srl));
}
foreach ( $args->category_srl as $category_srl )
{
if ( isset($category_list[$category_srl]) && !empty($category_list[$category_srl]->childs) )
{
$args->category_srl = array_merge($args->category_srl, $category_list[$category_srl]->childs);
}
}
}