메인 페이지에서 상품리스트를 더보기 버튼으로 늘리려면...

2017-03-01 (수) 05:52:13 19,518

어떻게 해야할까요..ㅠ.ㅠ

 

c25bd8a8a3d342ee8265aab61e8421ae_1488312921_206.PNG

일단 관리자 쇼핑몰 초기화면,

추천 상품 출력에서 기존 스킨에 변화를 준다고 할 때 

스킨은 새로 main.60.skin.php이라는 이름으로 하나 복사해서 만들었습니다.

구글링 중에 'Ajax based load more results with jQuery' 라는 제목으로

나름 간단할 것 같은 소스가 있어서 참고해서 만들고 있는데요.

※ 참고한 ajax소스 주소는 링크에 있습니다.

(영카트 질문답변 검색에서 비슷한 질문을 찾았는데 shop.lib.php파일의 run클래스를

참고하시라고 하던데 참고하고 손대기엔.. 실력 이전에 알아보기도 힘든..ㅠ.ㅠ)

일단 링크의 소스와 비슷하게

main.60.skin.php에 이런 script를 넣었습니다.

c25bd8a8a3d342ee8265aab61e8421ae_1488314248_6373.PNG 

그리고 테마의 shop폴더에 shop.list.php라는 파일을 참고소스의 loadmore.php파일과 비슷하게 만들어봤어요.

shop.list.php 파일의 앞부분

c25bd8a8a3d342ee8265aab61e8421ae_1488314685_9779.PNG
 

이렇게 해서 해보니까 일단 ajax로 넘긴 page값은 넘어가는데

Copy
if ($this->view_it_img) {        echo "<div class=\"productImg\">              <a href=\"{$this->href}{$row['it_id']}\">".get_it_image($row['it_id'], $this->img_width, $this->img_height, '', '', stripslashes($row['it_name']))."</a>              </div>\n";    }

더보기 버튼을 누르면

Fatal error: Using $this when not in object context in 

이런 무시무시한 에러가 뜨더라구요.

일단 궁금한 부분은 

1. $this를 왜 인식 못하는가하는것!!

2. 애초에 ajax를 활용하려면 이런식으로 파일을 임의로 새로 만들고 하는건지 부터 근원적으로 의구심이 드네요..ㅠ.ㅠ

메인페이지에서 더보기 버튼만 누르면 한줄 혹은 그이상씩 상품리스트들을 더 늘릴 수 있게 하는 방법은 없을까요?

|

답변 7개

2017-04-01 (토) 05:12:37

음.. 정확히 어떻게 안되는건지 잘 몰라서 답변드리기 애매한데

저 ajax소스의 기본 구조는

main.xx.skin.php -> 버튼 클릭 (처음 data-page="2" 로 설정)

ajax에서 이를 받아서 data를 새로만든 임의의 페이지 (shop.list.php)로 보냅니다.

$resultsPerPage=3;이라고 할 때 

shop.list.php -> $page_limit=$resultsPerPage*($paged-1); -> $page_limit=3*(2-1)=3, 

첫화면에서 쿼리문 날린조건이 LIMIT 0 , $resultsPerPage(3)

다음 데이터가 넘어가면서 LIMIT 3 , $resultsPerPage(3)

 

data를 받는쪽 shop.list.php의 버튼에는

data-page="<?php echo  $paged+1 ;?>라고 표시가 되어있기 때문에 

$resultsPerPage의 배수만큼 올라가게 되어있어요. 

이게 저 ajax more버튼의 기본원리라 생각되네요.

2017-03-31 (금) 12:57:38

카트궁금이님 덕분에 이상없이 .$row['it_?']은 구동이 잘됩니다. 

 

근데 클릭했을시 뿌려지는 방식이 어렵더라구요.

힌트 좀 주시면 감사하겠습니다.

2017-03-30 (목) 16:05:13

감사합니다. 카트궁금이님... 큰도움됐습니다.

2017-03-30 (목) 15:57:08

딸기케익님 안녕하세요.

우선 새로 만든 파일(스킨파일에서 넘긴 data를 받는 파일)에는

스킬 파일의 this->문법 자체가 안먹히는 부분이 있으니 코드를 간단하게 만들어서 

기능적으로 되는건지 아니면 다른 부분이 이상한건지를 찾아가니까 풀리더라구요.

 

while문 안에 <li>태그 등의 반복 문장 넣으실 때 

skin파일처럼 $this-> 등이 들어간 if문은 빼버리고 알맹이만 우선적으로 코딩을 간단하게 해서

ajax가 성공되게끔 해보시는것도 좋을것 같네요.

구글링으로 찾은 링크의 저 ajax형식으로 일단 영카트 적용하는데에 성공했으니 안되는건 아닌것 같아요.

ex) 

Copy
echo "<li>\n"; if ($this->href) {    echo "<div class=\"sct_img\"><a href=\"{$this->href}{$row['it_id']}\" class=\"sct_a\">\n";}echo "</li>\n";

이걸 이런식으로

Copy
echo "<li>\n"; echo "<div class=\"sct_img\"><a href=\"".G5_URL."/shop/item.php?it_id=".$row['it_id']."\" class=\"sct_a\">\n";echo "</li>\n";

그리고 while문 위에는 mysqli_fetch_array($ret)로 했는데 밑에껄로 적용^^; (되기는 둘다 되요.)

Copy
while($row=sql_fetch_array($ret)){ }
2017-03-30 (목) 11:30:47

shop.list.php while 나머지 부분이 중요한거 같은데..도통 감을 못잡겟네요...

쪽지 좀 부탁드려요.

2017-03-30 (목) 11:28:40

$this->view_it_name => $row['it_name'] 이러한 치환코드를 shop.list.php에 넣어야 하나요? 

2017-03-02 (목) 06:26:39

다시 한번 살펴보다가 해결했네요.

우선 main.60.skin.php에 쓰인 $this->로 이어지는 문법들을

ajax의 data를 받을 새로 만든 php페이지에서 인식 하지 못함으로 인해 생긴 문제이기에

받아온 return값의 요소들을 기본 php문법으로 하나씩 치환하면 됩니다. 

ex) $this->view_it_name => $row['it_name']

답변을 작성하려면 로그인이 필요합니다.