안녕하세요. 고수님들
메인페이지에 qa게시판의 제목과 내용 일부를 출력하려고 하는데 ai가 알려준 아래 코드로 적용하면 무조건 *표시로 됩니다.
혹시 어느 부분에 오류가 있을까요?
추워지는 날씨에 건강관리 잘 하시길 바랍니다.
감사합니다.
메인페이지에 qa게시판의 제목과 내용 일부를 출력하려고 하는데 ai가 알려준 아래 코드로 적용하면 무조건 *표시로 됩니다.
혹시 어느 부분에 오류가 있을까요?
Copy
$is_qa_board = false;
if (strpos($vlt_href, 'bo_table=qa') !== false || (isset($bo_table) && $bo_table == 'qa')) {
$is_qa_board = true;
}
if ($is_qa_board && isset($list[$i]['wr_id'])) {
// DB에서 원본 글 데이터(작성자, 내용) 직접 조회 (비밀글 원문 확보용)
$tmp_write = sql_fetch(" select mb_id, wr_content from {$g5['write_prefix']}qa where wr_id = '{$list[$i]['wr_id']}' ");
$writer_id = isset($tmp_write['mb_id']) ? $tmp_write['mb_id'] : '';
$db_content = isset($tmp_write['wr_content']) ? cut_str(strip_tags($tmp_write['wr_content']), 80) : $raw_content;
// 권한 체크 (최고관리자 또는 작성자 본인)
$is_super_admin = (isset($is_admin) && ($is_admin == 'super' || $is_admin));
$current_user_id = isset($member['mb_id']) ? $member['mb_id'] : '';
$is_author = ($current_user_id !== '' && $writer_id !== '' && $current_user_id === $writer_id);
if ($is_super_admin || $is_author) {
// 관리자나 작성자 본인이면 실제 작성 내용 출력
$vlt_content = ($db_content !== '') ? $db_content : '내용이 없습니다.';
} else {
// 일반 회원이나 방문자에게는 * 표 출력
$vlt_content = '********************';
}
} else {
// 질문답변이 아닌 다른 게시판(공지사항, 자유게시판 등)은 내용 그대로 출력
$vlt_content = $raw_content;
}
추워지는 날씨에 건강관리 잘 하시길 바랍니다.
감사합니다.
|
답변 3개 / 댓글 3개
채택된 답변
+20 포인트
스킨 상단(for 문 위)에 전역 선언 한 번 해보심이...
<?php
global $g5, $member, $is_admin; // 최신글 스킨
?>
<?php
global $g5, $member, $is_admin; // 최신글 스킨
?>
Copy
$is_qa_board = (
isset($list[$i]['bo_table']) &&
$list[$i]['bo_table'] === 'qa'
);
if ($is_qa_board && !empty($list[$i]['wr_id'])) {
$wr_id = (int) $list[$i]['wr_id'];
$write_table = $g5['write_prefix'] . 'qa';
$row = sql_fetch("
SELECT mb_id, wr_content
FROM {$write_table}
WHERE wr_id = {$wr_id}
AND wr_is_comment = 0
");
$login_id = isset($member['mb_id'])
? (string) $member['mb_id'] : '';
$writer_id = isset($row['mb_id'])
? (string) $row['mb_id'] : '';
$is_super = isset($is_admin) &&
$is_admin === 'super';
$is_writer = $login_id !== '' &&
$writer_id !== '' &&
$login_id === $writer_id;
if ($is_super || $is_writer) {
$content = isset($row['wr_content'])
? $row['wr_content'] : '';
$content = preg_replace(
'/\s+/u',
' ',
strip_tags($content)
);
$vlt_content = $content !== ''
? cut_str(trim($content), 80)
: '내용이 없습니다.';
} else {
$vlt_content = '********************';
}
} else {
$vlt_content = $raw_content;
}
현재 코드에서는 관리자나 작성자 본인이 아니면 게시글의 공개 여부와 관계없이 무조건 ***로 출력하도록 되어 있습니다.
혹시 원하시는 게 일반 공개글의 내용 중 앞부분만 노출하고 나머지를 *** 처리하는 방식인가요?
앞에 20글자 정도 보여주고 *** 처리하는거면 이런식으로 작성할 수 있을 것 같습니다.
Copy
$is_qa_board = false;
if (strpos($vlt_href, 'bo_table=qa') !== false || (isset($bo_table) && $bo_table == 'qa')) {
$is_qa_board = true;
}
if ($is_qa_board && isset($list[$i]['wr_id'])) {
// DB에서 원본 글 내용 조회
$wr_id = (int) $list[$i]['wr_id'];
$tmp_write = sql_fetch("
SELECT wr_content
FROM {$g5['write_prefix']}qa
WHERE wr_id = '{$wr_id}'
");
// HTML 태그 제거 및 공백 정리
$db_content = strip_tags($tmp_write['wr_content'] ?? '');
$db_content = trim(preg_replace('/\s+/u', ' ', $db_content));
// 앞 20글자만 노출
$visible_length = 20;
$vlt_content = mb_substr($db_content, 0, $visible_length, 'UTF-8');
// 20글자를 초과하면 뒤에 *** 표시
if (mb_strlen($db_content, 'UTF-8') > $visible_length) {
$vlt_content .= '***';
}
if ($db_content === '') {
$vlt_content = '내용이 없습니다.';
}
} else {
// 다른 게시판은 기존 내용 그대로 출력
$vlt_content = $raw_content;
}
답변을 작성하려면 로그인이 필요합니다.
덕분에 해결 되었습니다. 정말 고맙습니다.