본격적인 백앤드, 프론트앤드 작업 시작
22.12.30 6:44 am
db 불러오는건 성공했고 이제 맨 아래까지 스크롤 하게 되면 다음 데이터를 불러오는
이벤트 핸들러를 구현해보자
일단 무한 스크롤을 구현하기 위해 블로그를 찾아보다가
이분이 신기한 api 를 사용해서 구현한걸 보고 더 찾아봤다
http://blog.hyeyoonjung.com/2019/01/09/intersectionobserver-tutorial/
IntersectionObserver 라는 api 라고 하는데 이걸 사용해서 구현할 수 있을것 같다
일단 이번 포스트의 목표는
1. 한번에 48장의 사진을 불러오고
2. 첫 화면에서 12장 보여주고
3. 스크롤 내리면 다음 12장 (24)
4. 또 12장 (36)
5. 마지막 12장 (48)
6. 이후 다시 db 조회해서 다음 사진 48장을 불러오는 식으로 짜볼 예정
12.30 8:07 am
일단 php 를 다뤄본적이 잘 없기때문에
db에 쿼리를 전달할 php 함수를 만들기 위해
sample.html 을 만들어서 php 변수 활용을 테스트해봤다
<?php
$arr = array("a", "b", "c", "d", "e", "f", "g", "h");
$i=0;
function one(){
global $i;
global $arr;
echo $i;
if ($i>=8) {
echo "<p>no more index</p>";
$i=0;
}
else {
$j=0;
while($j<4) {
echo "<p> the alphabet : ".$arr[$i]." this time</p>";
$j++;
$i++;
}
}
}
?>
<!DOCTYPE html>
<html>
<meta charset="UTF-8">
<body>
<?php
one();
?>
<p data-ke-size="size16"> </p>
<p data-ke-size="size16"> </p>
<p>sleep</p>
<p data-ke-size="size16"> </p>
<p data-ke-size="size16"> </p>
<?php
one();
?>
<p data-ke-size="size16"> </p>
<p data-ke-size="size16"> </p>
<p>sleep</p>
<p data-ke-size="size16"> </p>
<p data-ke-size="size16"> </p>
<?php
one();
?>
</body>
</html>
https://iancoding.tistory.com/196
위 블로그를 참고해서 코드 가독성을 높일겸 함수를 적용해봤다
전역변수를 사용해서 배열을 몇 차례에 나눠서 읽고
더 이상 읽어들일 인덱스가 없으면 다른 행동을 하게 했다
위 테스트 코드를 활용해서 무한스크롤을 구현할 수 있을것 같다
12.30 10:07 pm
작업하다가 낮잠자고 운동하고 씻고 밥먹고 다시 ㅋㅋ
무한스크롤을 구현하기 위해서 php 함수를 먼저 작성하려고 했다
일단 48개씩 이미지를 불러오고 배열에 url 을 저장해서
12개씩 보여준다.
이후 배열안에 든 이미지가 다 호출되었으면 다시 48개 이미지를 불러오려고 하는데
https://limjunho.github.io/2022/08/04/MySql-limit.html
위 블로그 내용을 사용해서 db 에 쿼리할 듯 하다
12.30 11:48 pm
php 함수는 모두 만들었다
offset 을 이용한 limit 로 sql 을 계속 불러오도록 했고
php 변수를 이용해서 1번의 쿼리에 대해 12장씩 4번에 나눠서 총 48장의 이미지를 보여주기로 했다
<?php
$arr_images=array();
$offset=0;
function get_images($member, $offset_value) {
require("idpass.php");
global $arr_images;
global $offset;
//connect 설정(host,user,password)
$conn = new mysqli($mysql_host, $mysql_user, $mysql_password, $mysql_db);
//charset UTF8
//mysqli_query("set names utf8");
//쿼리문 작성
if ($member=="all") {
$query = "select * from blackpink_img_data where db_year=2022 order by db_month desc, db_day desc limit ".$offset_value.", 48";
} else {
$query = "select * from blackpink_img_data where db_year=2022 and db_members=".$member." order by db_month desc, db_day desc limit ".$offset_value.", 48";
}
$offset=$offset_value+48;
//쿼리보내고 결과를 변수에 저장
$result = mysqli_query($conn, $query);
//이미지 배열 초기화
$i=0;
while($i<48) {
$arr_images[$i]="";
$i++;
}
//이미지 배열에 쿼리 결과 url 입력
$i=0;
if ($result) {
while($row = mysqli_fetch_array($result)){
$arr_images[$i]=$row['DB_S3URL'];
$i++;
}//while end
mysqli_free_result($result); //메모리에서 result 삭제
}//if end
else {
echo "Error : ".mysqli_error($conn);
}
mysqli_close($conn);
}
$arr_index=0;
function post_images() {
global $arr_index;
global $arr_images;
global $offset;
if ($arr_index==48) {
get_images("all", $offset);
$arr_index=0;
}
$j=0;
while (true) {
if ($j<12) {
if (strlen("$arr_images[$arr_index]")>2) {
echo "<div class='col-4'><span class='image fit'><img src='".$arr_images[$arr_index]."' alt='' /></span></div>";
$arr_index++;
} else {
echo "<p>no more images</p>";
break;
}
$j++;
} else {
break;
}
}
}
?>
//아래 html 에서 호출
<div class="box alt">
<div class="row gtr-50 gtr-uniform">
<?php
get_images("all", 0);
post_images();
?>
</div>
</div>
이제 이 함수들을 호출하는 js 파일을 작업해보자
12.31 12:48 am
http://blog.hyeyoonjung.com/2019/01/09/intersectionobserver-tutorial/
https://nohack.tistory.com/124
함수 다짜고 무한스크롤 관련해서 찾아보니까 내가 생각을 잘못했던것 같다
몰라서 그랬겠지만
php 로는 db url 을 얻어오면 되는거고
그걸 배열로 리턴받아서 자바스크립트에서 보여줘야 할 것 같다
오늘은 이만 해야겠다 내가 졌다 ㅅㅂ
'Archive > [Infra+Web] fanpage:BLACKPINKINYOURAREA' 카테고리의 다른 글
프로젝트 조기 종료 (0) | 2023.02.21 |
---|---|
[Web]BLACKPINK IN YOUR AREA-29- 무한 스크롤 ajax 실패 (1) | 2023.01.20 |
[Web]BLACKPINK IN YOUR AREA-27-dockerfile ㅡㅡ (0) | 2022.12.27 |
[Web]BLACKPINK IN YOUR AREA-26-인프라 설계 및 구축 -완- (1) | 2022.12.27 |
[Web]BLACKPINK IN YOUR AREA-25-CI/CD 환경 구축-3 (0) | 2022.12.18 |