죄송합니다.
좀 전에 당분간 코드를 멀리할 것처럼 해놓고 막상 글을 써놓고 나니까 갑자기 코드가 보고 싶어져서 또 봐버렸습니다ㅜㅜ
그러다 그냥 우연히 얻어걸린 건데요.
일반적으로 문서 리스트를 출력할 때 카테고리 하나만 선택이 가능하다고 생각을 해왔잖아요?
근데 _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
$obj->category_srl = Context::get('category_srl') ?: $obj->category_srl;
이거를 삽입하고 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을 넘겨주던 부분을 이런 식으로요.
// add subcategories 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); } } }
이거 근데 이렇게 해도 되는 거겠죠?
그리고 원래 알 만한 분들은 알던 팁이었을까요?
글쓸때 여러개 선택해서 저장하는건가요?
https://github.com/rhymix/rhymix/blob/master/modules/document/schemas/documents.xml#L4
디비기본 타입이 number인데 그게 가능한가요?\
그냥 검색하는 정도라면 해당 카테고리에 해당되는 글을 가져오라고 in 으로 카테고리 넣어서 쿼리문을 만들었을거예요