그누보드 다중 게시판 최신글

Lpla

·

2021. 10. 23. 21:36

반응형

1. 그누보드 최신글

그누보드는 하나의 게시판을 최신글로 불러올 수 있다.

<?php echo latest('스킨이름', '테이블이름', '게시글 개수', '제목 길이'); ?>

 

하지만 이 방식으로는 두 개 이상의 게시판을 불러올 수 없다.

가령 공지사항 게시판, 소식 게시판을 하나의 최신글로 불러오고 싶다면 어떻게 해야 할까?

 

 

2. 그누위즈 다중 게시판 최신글

그누위즈에서 여러 게시판을 하나의 최신글로 불러오는 기능을 만든 것이 있다.

 

[기능] 여러개의 게시판을 하나의 최신글로 불러오기 > 최신글 | 그누위즈

[기능] 여러개의 게시판을 하나의 최신글로 불러오기 > 최신글 | 그누위즈

www.gnuwiz.com

 

먼저 /lib/latest.lib.php 파일 하단에 다음 코드를 추가한다.

 

function latest_all($skin_dir = '', $bo_tables, $rows = 10, $subject_len = 40, $cache_time = 1, $options = '')
{
  global $g5;

  if (!$skin_dir) $skin_dir = 'basic';
  
  if (preg_match('#^theme/(.+)$#', $skin_dir, $match)) {
    if (G5_IS_MOBILE) {
      $latest_skin_path = G5_THEME_MOBILE_PATH . '/' . G5_SKIN_DIR . '/latest/' . $match[1];
      if (!is_dir($latest_skin_path))
        $latest_skin_path = G5_THEME_PATH . '/' . G5_SKIN_DIR . '/latest/' . $match[1];
      $latest_skin_url = str_replace(G5_PATH, G5_URL, $latest_skin_path);
    } else {
      $latest_skin_path = G5_THEME_PATH . '/' . G5_SKIN_DIR . '/latest/' . $match[1];
      $latest_skin_url = str_replace(G5_PATH, G5_URL, $latest_skin_path);
    }
    $skin_dir = $match[1];
  } else {
    if (G5_IS_MOBILE) {
      $latest_skin_path = G5_MOBILE_PATH . '/' . G5_SKIN_DIR . '/latest/' . $skin_dir;
      $latest_skin_url  = G5_MOBILE_URL . '/' . G5_SKIN_DIR . '/latest/' . $skin_dir;
    } else {
      $latest_skin_path = G5_SKIN_PATH . '/latest/' . $skin_dir;
      $latest_skin_url  = G5_SKIN_URL . '/latest/' . $skin_dir;
    }
  }

  $list = array();
  $sql_common = " from {$g5['board_new_table']} a  where find_in_set(a.bo_table, '{$bo_tables}')";
  $sql_common .= " and a.wr_id = a.wr_parent ";
  $sql_order = " order by a.bn_id desc ";
  $sql = " select a.* {$sql_common} {$sql_order} limit 0, {$rows}";

  $result = sql_query($sql);

  for ($i = 0; $row = sql_fetch_array($result); $i++) {
    $sql = " select * from {$g5['board_table']} where bo_table = '{$row['bo_table']}' ";
    $board = sql_fetch($sql);

    $tmp_write_table = $g5['write_prefix'] . $row['bo_table'];
    $row2 = sql_fetch(" select * from {$tmp_write_table} where wr_id = '{$row['wr_id']}' ");

    $list[$i] = $row2;
    $list[$i] = get_list($row2, $board, $latest_skin_url, $subject_len);
    $list[$i]['bo_subject'] = $row['bo_subject'];
    $list[$i]['bo_table'] = $row['bo_table'];
  }
  ob_start();
  include $latest_skin_path . '/latest.skin.php';
  $content = ob_get_contents();
  ob_endclean();

  return $content;
}

 

이제 최신글을 사용하고자 하는 페이지에서 latest 대신 latest_all 함수를 사용하면 여러 게시판의 글을 불러올 수 있다.

주의해야할 점은 콤마 사이에 띄어쓰기를 사용하면 적용되지 않기 때문에 띄어쓰기 없이 붙여 써야 한다.

 

 

<?php echo latest_all('스킨이름', '테이블이름1,테이블이름2', '게시글 개수', '제목 길이'); ?>

 

공지사항 게시판과 자유게시판 2개의 게시글을 무사히 불러왔다.

 

 

3. 보완 사항

3-1. 게시판 이름 표시

이제 여러 게시판의 게시글을 불러올 수 있지만 해당 게시글이 어떤 게시판인지 카테고리를 알 수 있으면 더 좋을 것이다.

그러기 위해서는 처음에 추가한 latest.lib.php 내용을 수정할 필요가 있다.

// $list[$i]['bo_subject'] = $row['bo_subject'];
$list[$i]['bo_subject'] = $board['bo_subject'];

 

latest_all 함수 내부에 $list[$i]['bo_subject'] = $row['bo_subject']; 를 $list[$i]['bo_subject'] = $board['bo_subject']; 로 수정한 후 저장한다.

 

그리고 게시판 스킨 폴더의 latest.skin.php에서 적당한 위치에 아래 코드를 추가한다.

반복문 바깥에 넣게 되면 에러가 뜨기 때문에 반복문(for 문) 안에 추가해야 한다.

 echo "<span class=\"latest_cate\">" . $list[$i]["bo_subject"] . "</span>

 

 

다시 페이지를 확인해보면 게시판 이름이 표시된다.

 

3-2. 링크 문제

스킨에 따라 게시글의 링크가 제대로 연결되지 않는 문제가 있다.

보다시피 게시글의 아이디만 달랑 있고 게시판 이름이 없다.

이 문제는 이때는 스킨 폴더 latest.skin.php에서 $bo_table를 $list[$i]['bo_table']로 바꿔주면 해결된다.

 

basic2.zip
0.00MB

 

 

반응형