갤러리 리스트 썸네일에서 하나를 추가하고 싶습니다. 채택완료
masahide
1년 전
조회 2,421
안녕하세요.
제가 아래와 같은 방법으로 갤러리 게시판 리스트에서 썸네일을 불러오고 있습니다.
<?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 = '';</p>
<p> 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("<a href="https://www.youtube.com/watch"," target="_blank" rel="noopener noreferrer">https://www.youtube.com/watch",</a> $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 : "<a href="https://img.youtube.com/vi/".$thumbnail_file."/maxresdefault.jpg";" target="_blank" rel="noopener noreferrer">https://img.youtube.com/vi/".$thumbnail_file."/maxresdefault.jpg";</a>
$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);
}
?>
여기에 유튜브 쇼츠 썸네일을 더 추가하고 싶은데 방법을 모르겠습니다.
</p>
<p>substr(str_replace("/", "", str_replace("?v=", "", substr(explode("<a href="https://www.youtube.com/watch"," target="_blank" rel="noopener noreferrer">https://www.youtube.com/watch",</a> $list[$i]['wr_content'])[1], 0, 21))), 0, 11);</p>
<p>
이 부분을
</p>
<p>substr(str_replace("/", "", str_replace("?v=", "", substr(explode("<a href="https://www.youtube.com/shorts"," target="_blank" rel="noopener noreferrer">https://www.youtube.com/shorts",</a> $list[$i]['wr_content'])[1], 0, 21))), 0, 11);</p>
<p>
로 바꾸면 쇼츠로 올린 영상의 썸네일이 불러와지기는 하지만 이렇게 변경하면 유튜브 영상의 썸네일은 불러와 지지 않습니다.
이 두 개를 같이 사용할 수 있는 방법을 아시는 분 계시면 좀 알려주세요.
감사합니다.
댓글을 작성하려면 로그인이 필요합니다.
답변 1개
채택된 답변
+20 포인트
1년 전
/lib/common.lib.php에 아래 함수 추가하시고
</p>
<pre>
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;
}</pre>
<p>
아래코드는 리스트에 넣어서 응용하세요
</p>
<p>$thumbnail_file = <code>"<a href="https://img.youtube.com/vi/"." target="_blank" rel="noopener noreferrer">https://img.youtube.com/vi/".</a></code>get_youtube_id($list[$i]['wr_9])<code>."/maxresdefault.jpg";</code></p>
<p>
로그인 후 평가할 수 있습니다
답변에 대한 댓글 3개
m
masahide
1년 전
�
세크티
1년 전
어떤식으로 되어있는지 몰라서 함수만 다시 수정했습니다.
get_youtube_id()에 주소든 html코드든 유튜브주소형태가있으면 아이디만 뽑아서 배열로 리턴합니다. 무조건 배열로 리턴하니까 if($youtube_id_array[0]) 이런식으로 체크해서 사용해보세요
[code]
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);
[/code]
get_youtube_id()에 주소든 html코드든 유튜브주소형태가있으면 아이디만 뽑아서 배열로 리턴합니다. 무조건 배열로 리턴하니까 if($youtube_id_array[0]) 이런식으로 체크해서 사용해보세요
[code]
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);
[/code]
m
masahide
1년 전
계속 시간내주셔서 정말 감사합니다.
그런데 알려주신 내용을 어떻게 넣어야 할지 잘 모르겠습니다.
이리저리 넣어봤지만 에러가 나네요.
그런데, 무식한(?) 방법으로 원하는걸 구현하긴 했습니다.
나중에 또 어떤 에러가 나올지 모르겠지만 일단 원하는대로 되긴하네요.
/lib/common.lib.php는 건들지 않고,
기존 소스 아래
[code]
$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."'>";
[/code]
이런식으로 추가하니 일단 에러도 안나고
유튜브, 쇼츠 썸네일도 정상적으로 나오네요.
그런데 알려주신 내용을 어떻게 넣어야 할지 잘 모르겠습니다.
이리저리 넣어봤지만 에러가 나네요.
그런데, 무식한(?) 방법으로 원하는걸 구현하긴 했습니다.
나중에 또 어떤 에러가 나올지 모르겠지만 일단 원하는대로 되긴하네요.
/lib/common.lib.php는 건들지 않고,
기존 소스 아래
[code]
$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."'>";
[/code]
이런식으로 추가하니 일단 에러도 안나고
유튜브, 쇼츠 썸네일도 정상적으로 나오네요.
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인
그런데, 알려주신대로 하면
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로 바꿔봤지만 동일하게 에러나오고요.