글 목록 도우미 - 본문 밑에 다른 글들 목록 넣기 (댓글 위에)

드루팔에서 각종 게시글들이 모인 곳에서 하나의 글을 선택/열람하면,
다소 불편한 것이 위/아래에 있었던 다른 글들의 링크 보기가 어렵다는 점이다.
한국형 게시판들은 대부분 위/아래 글들의 목록에 대해서 기본적으로 표시하는 경향이 있다.

물론 드루팔도 Book 모듈을 이용한 북 타입형 컨텐츠가 이를 기본적으로 지원하지만,
뭔가 인터페이스가 다소 약하다는 인상이다. 그래서 조사해 보았다.

Drupal에서 글 목록 도우미 - 본문 밑에 다른 글들 목록 넣기 (특히 댓글 부분 위에)를 하려면,
아래와 같은 여러 방법이 있다.

1. ConTemplate 모듈을 이용하는 방법
2. Book 모듈을 이용하는 방법
3. http://drupal.org/project/content_slider 모듈을 이용하는 방법
4. http://drupal.org/project/blockreference 모듈을 이용하는 방법

이 중 2번과 3번은 하나 혹은 두개의 노드만 보여줄 수 있기에 조금 불편하고,
4번 방법은 제법 괜찮은 방법이지만 Block 필드가 (FeedAPI 등을 이용한) 자동화 노드에는 반응치 않는다는 것이 약점이다.

그래서 남은 방법은 1번, 역시나 Content Templates 모듈을 이용해서 처리하는 것이 가장 좋았다.
Content Templates 혹은 contemplate 모듈 - http://drupal.org/project/contemplate
이 모듈에 대한 여러 게시글이 있으니, 맨 아래 "관련이 있나요?" 목록이나 본 사이트의 검색을 이용하길 바란다.

[Content Templates 모듈을 이용한 본문 밑에 다른 글들 목록 넣기]

* 사전 확인 : 우선 게시글들이 하나의 동일 Term (Taxonomy > Vocabulary > 태그 모음 > 용어 또는 Term ) 으로
카테고리 분류가 돼 있어야 한다는 전제이다.

1. 해당 컨텐츠 타입의 Contemplate 편집 항목 (주소는 주로 admin/content/templates/컨텐츠타입명 이다.)에 가서
본문 영역을 아래와 같이 수정/저장하면 된다.

<?php print $body ?>
<?php
$strTermsID
= "";
if ( 
$node->taxonomy == null  ||  !is_array($node->taxonomy)  )    return;   // Do Nothing

/* extracting the keys from the array */
foreach( array_keys($node->taxonomy) as $keys )
{
 
$strTermsID .= $keys.",";
}

// comma separated lists of terms tid to display nodes
$terms = substr( $strTermsID, 0, -1);    // trim the last comma.
if ( trim($terms) == "" )  return;   // exception

// the number of nodes to show
$count = 10;

// $sql = "SELECT n.title, n.nid FROM {node} n INNER JOIN {term_node} tn ON n.nid = tn.nid WHERE tn.tid in ($terms) AND n.status=1 ORDER BY n.created DESC"; // latest
// 아래 SQL의 DISTINCT가 없으면 중복이 생긴다. 성능상 좋지 않을지 모른다. SQL의 개선이 필요.
$sql = "SELECT DISTINCT n.title, n.nid FROM {node} n INNER JOIN {term_node} tn ON n.nid = tn.nid WHERE tn.tid in (".$terms.") AND  n.status=1 AND n.created<=".($node->created)." ORDER BY n.created DESC"; // previous articles from this nid

$result = db_query_range(db_rewrite_sql($sql), 0, $count);
if (
$result) {
  echo
"<hr />";
  echo
t('[Articles List]');
  echo
"<br />";
  echo
node_title_list($result);
  echo
"<hr />";
}
else {
  echo
t('No nodes available.');
}
?>

2. 확인을 위해 해당 컨텐츠 타입의 아무 글이나 살펴보라.
본문 아래 쪽에 해당 게시글과 그 이후의 다른 글들 목록이 10개씩 보일 것이다.

* 응용 팁 하나 : 위 기능을 이용하면 Google AdSense 도 컨텐츠 타입/용어별로 지정이 가능하다.
댓글 인터페이스 위의 노드내 한 부분에 표시가 된다.
AdSense Injection 모듈보다 더 사용하기 편한 느낌이었다.

* 응용 팁 둘 : 위 기능을 이용하면 RSS 피이드 정보내에도 관련 글 목록을 넣을 수 있다.
역시나 Contemplate 설정 화면에서 RSS 부분을 편집하면 된다.

Your rating: None 평균 : 5 (1 vote)

댓글

참고로 본문 내의

참고로 본문 내의 Snippet 소스는 아래 주소를 참고했다.
http://drupal.org/node/135344
http://drupal.org/node/21867 - PHP Block Snippet이 모인 곳이다. 추천한다.