갤러리 리스트 썸네일에서 하나를 추가하고 싶습니다.

갤러리 리스트 썸네일에서 하나를 추가하고 싶습니다.

QA

갤러리 리스트 썸네일에서 하나를 추가하고 싶습니다.

본문

안녕하세요.
제가 아래와 같은 방법으로 갤러리 게시판 리스트에서 썸네일을 불러오고 있습니다.

 


                <?php
                if ($list[$i]['is_notice']) { // 공지사항  ?>
                    <img src="<?php echo $board_skin_url ?>/img/notice.gif"  class="img-fluid">
                <?php }else if($list[$i]['icon_secret']) { ?>
                    <img src="<?php echo $board_skin_url ?>/img/secret.gif"  class="img-fluid">
              
                <?php } else {
                    $thumb = get_list_thumbnail($board['bo_table'], $list[$i]['wr_id'], $board['bo_gallery_width'], $board['bo_gallery_height'], false, true);
   
                    $img_content = '';
                    if($thumb['src']) {
                        $img_content = '<img src="'.$thumb['src'].'" class="img-fluid">';
                    } else if($list[$i]['wr_4']) {
                        $img_content = '<img src="'.$list[$i]['wr_4'].'" class="img-fluid1">';
                    } else {
                        $thumbnail_file = substr($list[$i]['wr_9'], 0, 4) == "http" ? $list[$i]['wr_9'] : substr(str_replace("/", "", str_replace("?v=", "", substr(explode("https://www.youtube.com/watch", $list[$i]['wr_content'])[1], 0, 21))), 0, 11);
                        if (empty($thumbnail_file)) {
                            $thumbnail_extension = [".jpg", ".png", ".gif", "jpeg", ".mp4"];
                            foreach ($list[$i]['file'] as $thumbnail) {
                                if (in_array(strtolower(substr($thumbnail['file'], -4)), $thumbnail_extension)) {
                                    $thumbnail_file = $thumbnail['path']."/".$thumbnail['file'];
                                    break;
                                }
                                else $thumbnail_file = $board_skin_url."/img/no_image.gif"; 
                            }
                        }
                        $thumbnail_file = substr($thumbnail_file, 0, 4) == "http" ? $thumbnail_file : "https://img.youtube.com/vi/".$thumbnail_file."/maxresdefault.jpg";
                        $img_content = strtolower(substr($thumbnail_file, -4)) == ".mp4" ? "<video class='img-fluid2' src='".$thumbnail_file."' loop muted></video>" : "<img class='img-fluid' src='".$thumbnail_file."'>";
                    }
                    echo run_replace('thumb_image_tag', $img_content, $thumb);
                }
                ?>

 

여기에 유튜브 쇼츠 썸네일을 더 추가하고 싶은데 방법을 모르겠습니다.


substr(str_replace("/", "", str_replace("?v=", "", substr(explode("https://www.youtube.com/watch", $list[$i]['wr_content'])[1], 0, 21))), 0, 11);

이 부분을


substr(str_replace("/", "", str_replace("?v=", "", substr(explode("https://www.youtube.com/shorts", $list[$i]['wr_content'])[1], 0, 21))), 0, 11);

로 바꾸면 쇼츠로 올린 영상의 썸네일이 불러와지기는 하지만 이렇게 변경하면 유튜브 영상의 썸네일은 불러와 지지 않습니다.

 

이 두 개를 같이 사용할 수 있는 방법을 아시는 분 계시면 좀 알려주세요.
감사합니다.

이 질문에 댓글 쓰기 :

답변 1

/lib/common.lib.php에 아래 함수 추가하시고



function get_youtube_id($url)
{ 
    $regex = '#^(?:https?://|//)?(?:www\.|m\.|.+\.)?(?:youtu\.be/|youtube\.com/(?:embed/|v/|shorts/|feeds/api/videos/|watch\?v=|watch\?.+&v=))([\w-]{11})(?![\w-])#';
    preg_match($regex, $url, $matches);
    return isset($matches[1]) ? $matches[1] : null;
}

아래코드는 리스트에 넣어서 응용하세요


$thumbnail_file = "https://img.youtube.com/vi/".get_youtube_id($list[$i]['wr_9])."/maxresdefault.jpg";

 

 

친절하신 답변 감사합니다.

그런데, 알려주신대로 하면
Parse error: syntax error, unexpected 'img' (T_STRING), expecting ']' 에러가 나오네요.

그리고 제가 잘 몰라서 그러는데,
$thumbnail_file = "https://img.youtube.com/vi/".get_youtube_id($list[$i]['wr_9])."/maxresdefault.jpg";
가 wr_9에 입력한 유튜브나 쇼츠 주소에서 썸네일을 뽑느다는 의미인가요?

지금 썸네일 불러오는 소스가 유튜브 주소를 wr_9에 입력하는게 아니라 그냥 본문에 주소만 입력했을 때 뽑느거라서요.

혹시나해서 wr_9를 wr_content로 바꿔봤지만 동일하게 에러나오고요.

어떤식으로 되어있는지 몰라서 함수만 다시 수정했습니다.
get_youtube_id()에 주소든 html코드든 유튜브주소형태가있으면 아이디만 뽑아서 배열로 리턴합니다. 무조건 배열로 리턴하니까 if($youtube_id_array[0]) 이런식으로 체크해서 사용해보세요


function get_youtube_id($url)
{
    $regex = '#(?:https?://|//)?(?:www\.|m\.|.+\.)?(?:youtu\.be/|youtube\.com/(?:embed/|v/|shorts/|feeds/api/videos/|watch\?v=|watch\?.+&v=))([\w-]{11})(?![\w-])#';
    preg_match_all($regex, $url, $matches);
    return isset($matches[1]) ? $matches[1] : array();
}

$text = '<div>
<a href="https://youtube.com/shorts/grPpo2JIF8o?si=UC8MaNjn1rNbJTuK"></a>
<iframe width="560" height="315" src="https://www.youtube.com/embed/A5KwgSVxgdg?si=WZW9sKVmhd2ZhFV-" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<iframe width="560" height="315" src="https://www.youtube.com/embed/eNngaRXaLpw?si=hsROu7vtX5kpMoUk" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
</div>';

$youtube_id_array = get_youtube_id($text);
print_r($youtube_id_array);

계속 시간내주셔서 정말 감사합니다.
그런데 알려주신 내용을 어떻게 넣어야 할지 잘 모르겠습니다.
이리저리 넣어봤지만 에러가 나네요.

그런데, 무식한(?) 방법으로 원하는걸 구현하긴 했습니다.
나중에 또 어떤 에러가 나올지 모르겠지만 일단 원하는대로 되긴하네요.
/lib/common.lib.php는 건들지 않고,

기존 소스 아래


                        $thumbnail_file1 = substr($list[$i]['wr_9'], 0, 4) == "http" ? $list[$i]['wr_9'] : substr(str_replace("/", "", str_replace("?v=", "", substr(explode("https://www.youtube.com/shorts", $list[$i]['wr_content'])[1], 0, 21))), 0, 11);
                        if (empty($thumbnail_file1)) {
                            $thumbnail_extension = [".jpg", ".png", ".gif", "jpeg", ".mp4"];
                            foreach ($list[$i]['file'] as $thumbnail) {
                                if (in_array(strtolower(substr($thumbnail['file'], -4)), $thumbnail_extension)) {
                                    $thumbnail_file1 = $thumbnail['path']."/".$thumbnail['file'];
                                    break;
                                }
                                else $thumbnail_file1 = $board_skin_url."/img/no_image.gif"; 
                            }
                        }
                        $thumbnail_file1 = substr($thumbnail_file1, 0, 4) == "http" ? $thumbnail_file : "https://img.youtube.com/vi/".$thumbnail_file1."/maxresdefault.jpg";
                        $img_content = strtolower(substr($thumbnail_file1, -4)) == ".mp4" ? "<video class='img-fluid2' src='".$thumbnail_file1."' loop muted></video>" : "<img class='img-fluid' src='".$thumbnail_file1."'>";

이런식으로 추가하니 일단 에러도 안나고
유튜브, 쇼츠 썸네일도 정상적으로 나오네요.

답변을 작성하시기 전에 로그인 해주세요.
전체 467
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT