2013-12-20 1 views
0

2 개 이상의 제품을 비교할 수있는 기능이 필요한 프로젝트를 진행 중입니다. 그리고 클라이언트는 을 직접에 연결하는 페이지에 대한 능력을 필요로했습니다.제품 비교 세션

내가 구현 한 방식은 다음과 같은 URL로 이루어져 있습니다. /compare?id=5-20-100 (제품 ID 5, 20 및 100 비교).

는 기본적으로 모든 일이 스크립트에 의해 구문 분석됩니다 : 나는 항목이 내가 jQuery를 사용하고 있습니다 (AJAX를 통해에 추가 세션을 사용하려는 목록에 제품을 추가하려면

$list = explode('-', $_GET['id']); 

$myarray = $list; 

$args = array(
    'post_type' => 'products', 
    'post__in'  => $myarray 
); 
// The Query 
$the_query = new WP_Query($args); 

,이다 문제). 내가 가진 문제는 다음과 같습니다.

사용자가 "이 제품 비교"를 클릭하면이 제품의 ID (아마도 html 데이터 속성 product-id="100")가 필요합니다.

이 AJAX 세션을 설정하는 방법은 무엇입니까? 좀 더 정확하게 말하자면, 사용자가 "아이템 비교"버튼 버튼을 클릭하면 어떻게하면 /compare?id=5-20-100 URL로 이동합니까?

프런트 엔드 업데이트 :

<a href="#" data-id="5">Product 1 add to compare</a> 
<a href="#" data-id="20">Product 2 add to compare</a> 

보기 내가 아약스 세션에서 URL을 얻을 필요가이 부분에서, 제품을 비교.

<a href="compare?id=5-20">View compare products</a> 
+0

입니까? –

+0

네, 워드 프레스의 일부입니다. 나는 커스텀 루프를 작업했다. 루프 페이지에서 제품에 대한 모든 정보를 출력 한 다음 데이터를 정렬하는 테이블 뷰를 만듭니다. – Foxsk8

+0

프론트 엔드 또는 백엔드에 있습니까? 지금까지 작성한 코드 중 일부를 추가 할 수 있습니까? –

답변

1

내 제안은 배열 액세스 표기법과 함께 확인란 입력을 사용하는 것입니다.

<form id="compare" method="get" action="/path/to/compare.php" enctype="application/x-www-form-urlencoded"> 
<input type="checkbox" name="compare[]" value="[ID POPULATED VIA PHP]" /> 
<input type="checkbox" name="compare[]" value="[ID POPULATED VIA PHP]" /> 
<input type="checkbox" name="compare[]" value="[ID POPULATED VIA PHP]" /> 
... 
<input type="submit" value="Compare Selected Items" /> 
</form> 

이 같은 URL로 부를 것이다 :

http://yoursite.com/path/to/compare.php?compare[]=ID1&compare[]=ID2&compare[]=ID3 

쉽게 $_GET['compare'] 배열 내의 선택된 모든 비교 아이디의에 액세스 할 수 있습니다. GET을 사용한 이후 북마크 가능 URL도 있습니다. 이것은 또한 자바 스크립트에 대한 필요없이 작동

(물론 하나 여전히 자바 스크립트 양식 유효성 검사를 추가 할 수 있지만 - 아마도 확인하기 전에 비교 선택 적어도 두 확인란을 사용할 수를 확인합니다.) 모든

+0

하지만 제품 비교보기가 다른 페이지가 아닌 동일한 페이지에있는 경우 제품을 찾을 수없는 위치는 어디입니까? 예 : products.php - 버튼이있는 상품 목록입니다. 다른 페이지는 전입니다. catalog.php, 또는 주요 전체 헤더, 여기서 우리는 "view compare products"를 넣어야합니다. 귀하의 솔루션은 단일 페이지보기에 좋습니다. 어쩌면 쿠키를 사용합니까? 쿠키 저장, 생성, 업데이트, 삭제? – Foxsk8

+0

@ Foxsk8 GET 끝 점이 단일 페이지인지 다른 페이지인지는 중요하지 않습니다. 체크 된 체크 박스의 모든 값은'$ _GET [ 'compare']'에 전달됩니다. 이 경우 단순히 제품 ID를 체크 박스의 'value'속성으로 설정하면됩니다. 비교 페이지로 가면, 체크 된 모든 제품 id 값은'$ _GET [ 'compare']'에서 사용할 수 있습니다. –

+0

Probelm 해결되었습니다. 나는 쿠키를 사용할 필요가있다. 왜냐하면 후자는 모든 버튼이 모든 사이트에서 나중에 사용하기 위해 쿠키에 저장되는 "비교 제품"이라는 글로벌 버튼에 비교 URL을 가져 오기 때문이다. 문제가 프런트 엔드 부분에 전역 leter 사용 URL을 설정했다. :) – Foxsk8

1

첫째, 대한 ID를 수집하고 링크에 추가하면 AJAX를 사용할 필요가 없습니다.

링크에서 이벤트 핸들러를 설정해야하는 솔루션이 필요합니다. JQuery를 사용하지 않고 Javascript를 사용하는 것이 이상적입니다. 이미 사용하고 있고 데이터 속성에 대해 이야기하면 링크에서 이벤트 핸들러를 설정 한 다음 JQuery data() 메소드를 사용하여 ID를 얻은 다음 마지막으로 href 속성에 추가합니다. 최종 링크. 당신은 그것에 대해 읽을 수 있습니다 here

더 나은 해결책은 양식을 사용하는 것입니다. @ 마이크 Brant 그냥 사용하는 것이 좋습니다 같은 솔루션을 제출했다.

JS :

cookie_data_load = $.cookie('compare_data'); 
    $('.view_compare').attr("href", "http://localhost/auto/cart/?id=" + cookie_data_load); 


    var fieldArray = []; 
    $(".aaddtocart").click(function(){ 
     fieldArray.push($(this).data("compare")); 
     var unique=fieldArray.filter(function(itm,i,a){ 
      return i==fieldArray.indexOf(itm); 
     }); 

     var str = unique.join('-'); 
     $.cookie('compare_data', str, { expires: 7, path: '/' }); 
     cookie_data = $.cookie('compare_data'); 
     console.log(str); 
     console.log(unique); 
     alert(unique); 
     $('.view_compare').attr("href", "http://localhost/auto/cart/?id=" + cookie_data); 
     return false; 
    }); 

워드 프레스 템플릿 :

<?php 

$list = explode('-', $_GET['id']); 

$myarray = $list; 

$args = array(
    'post_type' => 'products', 
    'post__in'  => $myarray 
); 
// The Query 
$the_query = new WP_Query($args); 

?> 

<?php if ($the_query->have_posts()) : ?> 

    <!-- pagination here --> 

    <!-- the loop --> 
    <?php while ($the_query->have_posts()) : $the_query->the_post(); ?> 
    <h2><?php the_title(); ?></h2> 
    <?php endwhile; ?> 
    <!-- end of the loop --> 
다음
0

북마크 작동 최종 코드는, 기본 기능을 비교하거나 장바구니에 추가입니다

,363,210

HTML 버튼 : 워드 프레스 위해

<a href="http://localhost/auto/cart/?id=24-40" class="view_compare">Show compare products</a> 
<a href="#" class="aaddtocart" data-compare="<?php echo get_the_ID(); ?>">Add to compare list</a> 
관련 문제