Jump to content
php.lv forumi

Question

Posted

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

 

7 answers to this question

Recommended Posts

  • 0
Posted

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>
  • 0
Posted

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. 

  • 0
Posted

Tur jau opciju ir daudz un dažādu. Es visticamāk, ka glabātu tās sesijas mainīgajā, kā masīva keyus un pie izmaiņām, tad updeitotu urli.

  • 0
Posted

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));
  • 0
Posted

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);
});
  • 0
Posted

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. 

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