질문/조언질답게시판

같은 서버에 사이트 2개가 설치되어 있습니다.

 

타임라인 모듈은 같은 버전으로 같은 자료가 설치되어 있습니다.

 

사이트 1

원래게시판으로 이동 -> 아니오 설정

 

원래 게시판으로 이동하지 않고 현재 타임라인용 게시판의 MID 로 게시글일 열립니다.

 

사이트2

원래게시판으로 이동 -> 아니오 설정

 

위 설정과 관계없이 무조건 원래 게시판 MID 주소로 이동되어 버립니다.

 

104205    301    h2    document / Redirect    Other    259 B    30 ms    
104205    200    h2    document    /best/104205    32.9 kB    205 ms

 

 

짧은주소 리디렉트 애드온과는 상관없는 것을 확인했습니다.

 

같은 서버 nginx 에 설치되어 XE리라이트 규칙은 같은 파일을 인클루드하여 둘다 동일합니다.

게시판 스킨에는 특이사항을 발견하지는 못했습니다.

 

사이트2에서 타임라인용 게시판 MID 유지하면서 모아진 글을 읽는 기능이 되지 않는데 이런 이유는 뭘까요?

  • profile

    라이믹스 버전도 같은가요?

  • profile profile
    네. 라이믹스 버전도 같습니다.

    그런데 제가 타임라인 모듈에서 게시글 가져오는 쿼리 조건에서 AND를 OR로 바꾼 부분이 있는데요.
    추천수 부분을 OR로 바꿔서 특정조회수 이상 또는 추천수 이상의 경우 목록에 표시되도록 했습니다.

    그런데 지금 테스트를 해보니
    일부 게시글이 정상적으로 이동되지 않고 현재 게시판의 주소로 읽혀지는데 이 게시글들은 조회수 ADN 추천수 조건을 만족하는 것 같습니다. 더 살펴봐야 겠네요.
  • profile

    이게 타임라인 게시글 목록으로 가져오기 위한 방법이 쿼리로 되어있고
    또 글을 열람하는 페이지에서 이 글이 타임라인 게시글인지 확인하는 코드가 model.php 부분에 따로 있네요.


    function isFilterPassed($module_srl, $document_srl)
    {
    $timeline_info = $this->getTimelineInfo($module_srl);
    // 타임라인 게시판이 아닌 경우
    if (!$timeline_info)
    {
    return FALSE;
    }

    $oDocumentModel = getModel('document');
    $oDocument = $oDocumentModel->getDocument($document_srl);
    // 게시글이 없는 경우
    if (!$oDocument->isExists())
    {
    return FALSE;
    }

    $tl_filter = array('readed_count', 'voted_count', 'blamed_count', 'comment_count', 'popular_count');
    foreach ($tl_filter as $filter)
    {
    $key = $timeline_info->{'cond_' . $filter};
    $val = $timeline_info->{$filter};
    if ($filter == 'popular_count')
    {
    $if_val = $oDocument->get('voted_count');
    $if_val += $oDocument->get('blamed_count');
    }
    else
    {
    $if_val = $oDocument->get($filter);
    if ($filter == 'blamed_count')
    {
    $if_val *= -1;
    }
    }
    if ($val && (($key == 'excess' && $val >= $if_val) || ($key == 'below' && $val <= $if_val) || ($key == 'more' && $val > $if_val) || ($key == 'less' && $val < $if_val)))
    {
    // 게시글 필터링을 통과하지 못한 경우
    return FALSE;
    }
    }



    위와 같이 되어 있어서
    제가 쿼리에서 or 로 바꾼 추천,인기 입력 값이 조건에 맞는지 확인하는 위 코드에서는 and로 동작하는 것 같네요.


    방법이 없다면
    $tl_filter = array('readed_count', 'voted_count', 'blamed_count', 'comment_count', 'popular_count');

    필터 자체를 하지 않도록 위 코드를 주석하던지 해야겠습니다.

     

    그리고 조건을 OR로 동작하게 한 사이트에서는 이 의문을 해결하고 난 후에는 원래게시판으로 이동 -> 예 로 사용할 생각이어서 그냥 코드는 그대로 두고 설정을 원래게시판으로 이동하는 설정을 적용해야 할 것 같습니다.

  • ?
    SEO PRO 모듈을 사용하시나요?
    활성화 - 오류 표시 "에"로 설정할 때 그런 문제가 발생한 적이 있습니다.
  • ? profile

    아니요. 원인은 위 댓글에 다 나와있습니다.

    제가 조건을 조회수,추천수 를 둘중 하나만 만족해도 출력되게 쿼리를 고쳐서 타임라인 모듈에는 이러한 조건에 따라 출력이 되도록 고쳤는데요.

     

    실제 게시글에 접속할때 또 한번 검증하는 부분 코드에서는 여전히 처음 설계대로 AND 조건에 부합하도록 처리되어 있기 때문에 발생하는 당연한 문제였습니다. 

     

    이 코드까지 고치기는 어려울 것 같네요. 윗 댓글 보시면 됩니다.

  • profile
    추천수,조회수 등을 OR 로 바꿨더니 기간지정 부분이 적용이 안되는 문제가 발생해서 그냥 원래대로 다시 AND로 복귀