Extra Form
PHP PHP 7.3
CMS Rhymix

예를 들어 특정 게시글의 확장 변수 값이 TRUE일 때

해당 게시글의 경우 '게시판의 목록에서도 표시되지 않게' 만들려고 합니다.

 

스킨단에서 수정 시에는 단순히 숨길수는 있지만 페이지 수, 그리고 숨긴 글만큼 다른 글들을 치환해서 보여주는 기능이 구현이 되지 않아서 모듈 수정(또는 제작)을 해보려고 하는데요

 

구버전 XE와 라이믹스의 경우 코어를 뜯어고쳐야했지만

이제는 getDocumenTList에 Before트리거? 가 생겨서 코어 수정 없이도 충분히 구현할 수 있다고 들었습니다.

 

혹시 간단한 예제코드만 알려주실 고수분 계신가요? ㅠㅠ

감사합니다.

  • profile

    확장변수 등 복잡한 조건으로 목록에서 제외시키면서 리스트수/페이지수까지 맞추는 기능은 아예 기획하지 않으시는 것이 건강에 좋습니다. getDocumentList (before) 트리거를 사용하여 구현할 수는 있지만 성능이 극악으로 떨어질 것입니다. 방문자가 꽤 있는 사이트라면 서버 터지는 지름길이고요. 목록 표시 조건을 건드리면 모두 마찬가지입니다. 심지어 코어에서 기본지원하는 공지글 제외 옵션도 서버 부하에 굉장히 큰 영향을 줍니다. 100,000개의 게시물 중 5개를 제외하기 위해 나머지 99,995개를 모두 분류하고 정렬해야 하기 때문입니다.

     

    게시판 DB 부하의 대부분이 리스트 추출에서 발생합니다. 이 때문에 최근 라이믹스에서는 로봇 방문시 하단목록을 아예 추출하지 않거나, 현재 보고 있는 글에 맞는 페이지를 찾지 않고 1페이지로 고정시키는 등 서버 부하 개선에 도움이 되는 옵션을 추가하고 있습니다. 리스트 추출에서 조건 하나만 제거해도 DB 부하가 획기적으로 개선되거든요.

     

    애당초 getDocumentList (before) 트리거가 추가된 이유가 제가 만든 2개의 모듈을 지원하기 위해서입니다. 하나는 리스트 자체를 다른 곳에서 불러오는 엘라스틱서치 연동 모듈이었고, 다른 하나는 리스트의 주요 부분을 캐싱하여 성능을 개선하는 슈퍼캐시 모듈이었습니다. 둘 다 코어의 비효율적인 리스트 추출 방식을 우회하기 위한 궁여지책이었습니다. 동일한 트리거를 사용해서 더욱 비효율적인 리스트 추출 방식을 구현할 수도 있다고 생각하니 아이러니네요. ㅎㅎ

     

    목록은 그냥 불러오고, getDocumentList (after) 트리거를 사용하거나 스킨에서 조건문을 사용하여 특정 게시물만 제외시키는 방법이 개발하기도 편리하고, 실행 속도도 수백 배 더 빠를 것입니다. 한 페이지에 글이 22개 표시되든 18개 표시되든 절대 다수의 유저들은 눈치채지도 못하거든요.

     

    물론 제외시켜야 하는 글이 아주 많아서 20개 중 5개밖에 안 남는다거나 하면 곤란하겠지만, 그런 경우에도 목록을 아예 새로 뽑기보다는 제외시킬 글의 status를 PUBLIC, SECRET이 아닌 다른 것으로 바꿔버리거나 다른 게시판으로 이동시키는 등의 방법으로 처음부터 기본 목록에서 제외시키는 편이 낫습니다.

  • profile profile
    문서열람 페이지에서 하단 목록을 봇에게 제공을 하지 않을까 생각하고 있었는데 봇게는 굳이 보여주지 말아야 겠네요. 작업 하러 GoGo~
  • profile profile

    스킨에서만 숨기는 건 성능면에서 효과 없고요, board.view.php에서 아예 하단목록 추출 쿼리를 실행하지 않아야 합니다. 그런데 대부분의 스킨과 서드파티 자료들은 하단목록 관련 변수들이 당연히 존재한다고 가정하기 때문에, 자칫하면 로봇들에게 치명적인 오류를 뿌려주는 수가 있어요. 하단목록을 생성하지 않더라도 $document_list는 빈 배열로, $page_navigation은 제대로 된 PageHandler 인스턴스로 초기화시켜 주는 것이 좋습니다.

     

    특히 네이버 로봇은 하단목록보다는 전체목록을 긁어가도록 하는 것이 SEO 면에서 도움이 될 것 같기는 합니다.

  • profile profile

    list 부분만 호출하지 않는 것은 큰 효과가 없다는 건가요???

     

     

    <!--@if($mi->show_list != 'N' && !isCrawler())-->
        <include target="_read.html" cond="$oDocument->isExists()" />
        <include target="_list.html" />
    <!--@else-->
        <!--@if($oDocument->isExists())-->
        <include target="_read.html" />
        <!--@else-->
        <include target="_list.html" />
        <!--@end-->
    <!--@end-->

     

     

    위 크롤러 제외를 넣었거든요.

  • profile profile

    네, 스킨에서 표시하든 안하든 코어(board 모듈)에서는 리스트를 생성하느라 쿼리를 실행합니다.

  • profile profile
    아.. 그렇네요. 문서번호로 어떤 페이지에 있는 글인지 코어에서 확인한다고 했죠.

    그런데 지금 생각하니 저희는 목록에 구글광고를 피드광고로 넣고 있어 크롤러를 제한하면 곤란하겠네요. 광고를 내보내면서 구글봇을 차단하면 문제가 생길거거든요...
    좋은 정보 감사합니다.
  • profile ?
    역시나 부하 문제가 발목을 잡는군요.. ㅠ
    사실 제일 큰문제가 게시물 20개 중이 2개만 남고나머지는 사라져서 보이지 않는문제입니다.
    페이지 수는 상관없으니, 그냥 제외되는 문서가 있더라도 그걸 제외하고 그 다음문서를 보여줘서 한 페이지에 무조건 20개씩 출력해주도록 스킨에서구련하는 방법이 있을까요?
  • ? profile

    코어에서 이미 목록을 다 만들어서 넘겨준 상태이므로 스킨에서 뭔가 뺄 수는 있어도 더하는 것은 어렵습니다. 다음 페이지를 임의로 불러와서 목록을 추출할 수는 있겠지만, 속도도 느려질뿐더러 20개 중 2개만 남는 상황이라면 10페이지 넘게 불러와야 할지도;;;