Jump to content
php.lv forumi
  • 0

Produktu salīdzināšana


Question

Sveiki, tautieši. 

 

Mēģinu izveidot produkta salīdzināšanu, kur no produktu skata lapas, spiežot piemēram pogu, pievienot salīdzināšanai, beigās būtu iespējams savākt visus izvēlētos produktus, kuri ir pievienoti salīdzināšanai.

 

Backend puse itkā man visa ir.

 

Pēc šāda principa tiks iegūts produkta salīdzināšanas url. Salīdzināšanai ir jāstrādā arī pēc URL, lai pēc tam klienti varētu šos linkus izmantot arī turpmāk, un nebūtu pa jaunu jāveido salīdzināšanas saraksts. 

 

/compare?id=5-20-100

 

Problēma sākas tur, ka nevaru izdomāt, nezinu kā uzrakstīt, vai kā savādāk dabot gatavu to, ka "rādīt salīdzināšanas produktus, jeb varētu teikt bookmarkus", lai šis links updeitotos automātiski, katru reizi kā spiež produktus, lai id audzētos klāt jau esošam linkam, un lai šo rādīt salīdzināšanas produktus es varētu izmantot globāli, gan headerī ielikt pogu, linku, gan arī citās lapās. Vienas lapas ietvaros nav problēmu to izdarīt. 

 

Doma ir tāda, ka tos ID turēt kaut kādā ajax sesijā, bet tur man pagaidām tumša bilde, kā tā ajax sesija uzsetotos un izmainītos, utt... meklēju piemērus, līdz šim nesekmīgi. 

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

Varētu teikt, ka funkcija būtu līdzīga kā bookmarkiem, wishlistam, preču grozam. 

 

Varbūt to visu veidot ar JQ cookijiem, bet laikam tas itkā īsti pareizi nebūtu. 

 

Te backend kods:

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

$myarray = $list;

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

Paldies, jau iepriekš.

 

Link to post
Share on other sites

7 answers to this question

Recommended Posts

  • 0

Teorētiski pushState() vajadzētu būt tam, ko tu meklē, bet pats neesmu nekad testējis.

 

EDIT:

 

Notestēju, strādā pat uz IE:

 

 

<html>
<head>
  <title>Original title</title>
</head>
<body>
<script>
  function test() {
    window.history.pushState( '', 'New Url', 'new-url' );
    document.title = 'New title';
  }
</script>
<input type="button" value="Click me" onClick="test();" />
</body>
</html>
Link to post
Share on other sites
  • 0

Tagad JQ daļa izskatās šāda ar cookijiem:

 

$( ".aaddtocart" ).click(function(){


var org_cookie = $.cookie('compare_data', '0');


var compare_id = $(this).data("compare");
$.cookie('compare_data', compare_id, { expires: 7 });
});

Izmantoju šo JQ cookie pluginu: https://github.com/carhartl/jquery-cookie

 

Tagad cookiji uzsetojās, iegūt arī var, bet kā panākt to, lai katru reizi klikojot, viņš paņem iepriekšējo vērtību, un pieliek klāt jauno, ja piemēram vērtības id ir 40 un 10, tad lai katru reizi spiežot uz sava linka, viņš izveidotu 40-10 un tā tālāk piem 40-10-23-utt.. kā arī kā panākt to, lai viņš neskaitītu klāt 40-20-40, divas reizes to pašu ID. 

Link to post
Share on other sites
  • 0

Tagad man ir divas fijas, viena ievāc no linkiem id un saliek masīvā, otra fija, pārbauda vai neatkārtojās id numuri. Kā tos tagad abus kopā salikt? 

 

var some = [];
$( ".aaddtocart" ).click(function(){
  some.push($(this).data("compare"));
  
});




function unique(list) {
    var result = [];
    $.each(list, function(i, e) {
        if ($.inArray(e, result) == -1) result.push(e);
    });
    return result;
}


var thelist = ["ball_1", "ball_13", "ball_23", "ball_1"];
alert(unique(thelist));
Link to post
Share on other sites
  • 0

indoom: object has no split method. 

 

Te strādājoša versija, ko sanāca izmocīt:

 

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 });


   console.log(str);
console.log(unique);
alert(unique);
});
Link to post
Share on other sites
  • 0

Final kods, priekš compare, bookmarkiem, pievienot grozam, standarta sākuma funkcijas. Šis tika veidots priekš wordpresa. Varbūt kādam noderēs:

 

JS daļa:

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;
});

HTML pogu daļa:

<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>

Wordpress template daļa:

<?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 -->

Paldies visiem, kas palīdzēja. 

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...