Обновление веса настроенного продукта (в Woocommerce) с передачей переменных через (Admin) Ajax для корзины покупок - PullRequest
0 голосов
/ 06 мая 2020

Обновление веса сконфигурированного продукта с передачей переменных через (Admin) Ajax для корзины покупок ... Проблема в том, что вес нужно сначала рассчитать через jQuery, а затем отправить через AJAX, чтобы обновился общий вес в корзине. Я много пробовал и спрашивал, ни у кого нет решения, что переход к рассматриваемой переменной PHP почему-то не работает или мне не удалось (я не так тверд в PHP), может быть, есть не так много не хватает, вот мой последний код:

в функциях. php:

 wp_enqueue_script( 'ajax-script', get_stylesheet_directory_uri().'/js/weight_hardox.js', array('jquery') );

// in JavaScript, object properties are accessed as ajax_object.ajax_url, ajax_object.we_value
    wp_localize_script( 'ajax-script', 'ajax_object',
array( 'ajax_url' => admin_url( 'admin-ajax.php' ),'gewt' => 0, 'gewt_ges' => 0, ) );
// Same handler function...
add_action( 'wp_ajax_my_action', 'my_action' );
add_action( 'wp_ajax_nopriv_my_action', 'my_action' );
function my_action() {
    global $wpdb;
    $gewicht = floatval( $_POST['gewicht'] );
    $gesamtgewicht = floatval( $_POST['gesamtgewicht'] );
        echo 'gewicht:' . $gewicht;
         echo '<small>Gewicht update: ' . $gewicht.'+'. $gesamtgewicht. ' ' . get_option('woocommerce_weight_unit') . '</small>';
    wp_die();
}

weight_hardox. js:

jQuery(document).ready(function($) {
                    var myurl = document.URL;  //console.log('myurl '+myurl );
                    var gew_h=0;
                    var vGwges=0;
                    var sum=0;
                    var gewt1=0;
                    var gewt=0;
                    var gew_hs=0;
if ( (myurl.indexOf("warenkorb") != -1) || (myurl.indexOf("kasse") != -1) || (myurl.indexOf("hardox-500-zuschnitt") != -1) ) {

            //.single-product calc weight
            //if (myurl.indexOf("hardox-500-zuschnitt") != -1) {
            jQuery(document).on('change', '.single-product .summary .cart input', function() {
                        var vmats=parseFloat(jQuery( '.uni-module-radio input:checked+.uni-cpo-radio-option-label .uni-cpo-option-label__text' ).text());   console.log('ok fs ' + vmats);
                        var vLgs=parseFloat(jQuery( '#uni_cpo_laenge2-field' ).val());   //console.log('ok fs ' + vLgs);
                        var vBts=parseFloat(jQuery( '#uni_cpo_breite_hardox_rq2-field' ).val());   //console.log('ok fs ' + vBts);
                        var vSts=parseFloat(jQuery( '#uni_cpo_stckzahl-field' ).val());   //console.log('ok fs ' + vSts);
                        gewt = parseFloat(vmats*vLgs*vBts*vSts*0.000008);   //
                        gewt = parseFloat((gewt).toFixed(3));   console.log('gew_hs ' + gewt);
                        var vGws = jQuery( '#gewb' ).text();
                            vGws = jQuery( '#gewb' ).text(gewt); 
                                window.setTimeout(function(){  
                                    vGws = jQuery( '#gewb' ).text(); console.log('vGws>ingle ' + vGws); 
                                },990);
                        var data = {
                            'action': 'my_action',
                            'gewicht' : ajax_object.gewt,
                            'gesamtgewicht' : ajax_object.gewt_ges
                            //'whatever': ajax_object.we_value      //We pass php values differently!
                        };
                        // We can also pass the url value separately from ajaxurl for front end AJAX implementations
                        /**/ jQuery.post(ajax_object.ajax_url, data, function(response) {
                            response+=gewt;
                        console.log('Got this from the server: weight: '  +gewt +'/ update total weight: ' + gewt_ges +' / response: ' +response);
                        $( ".total-weight").after('<tr id="gew_z"></tr>');
                        $( "#gew_z" ).html('<th>Gewicht-HardoxV1</th><td><span class="kg">'+ gewt+'kg</span></td>');
                        $( ".total-weight td").text(gewt_ges + " kg"); 
                            //alert('Got this from the server: ' + response);

                        });
            });



        /* var jqxhr = $.post('https://arthouse39.de/wdl/wp-content/themes/childtheme_z/test.php',{gew_hs: gew_hs}, function() {
            //alert( "success" );
            })
         .done(function( data ) {
            console.log( "Data Loaded: " + data );
        //$( "#gew_z" ).html('<span class="Sendungsdaten_txt">Sendungsdaten:</span>'+ data ).show(399).delay( 3700 ).fadeOut( 700 );
            })  
                                   return false; 
                e.preventDefault();*/ 

    //} 

                window.setTimeout(function(){
                jQuery(".cart_item" ).each( function( index, element ){
                var array = ( jQuery( this ).html() ); //console.log('array ' + array);
                        if ( (array.indexOf("Hardox-500") != -1) || (array.indexOf("Hardox") != -1) ) {
                        var vmat=jQuery(this).find( '.variation-Materialstrkemm > p' ).text();   //console.log('ok f ' + vmat);
                        var vLg=jQuery(this).find( '.variation-Lngemm > p' ).text();   //console.log('ok f ' + vLg);
                        var vBt=jQuery(this).find( '.variation-Breitemm > p' ).text();   //console.log('ok f ' + vBt);
                        var vSt=jQuery(this).find( '.variation-Stck > p' ).text();   //console.log('ok f ' + vSt);
                            gew_h = vmat*vLg*vBt*vSt*0.000008;   //console.log('gew_h ' + gew_h);
                            gew_h = parseFloat((gew_h).toFixed(2));
                            var vGw=jQuery(this).find( '.variation-Gewichtkg > p, #uni_cpo_gew_h5-field, #gewb' ).text();   //console.log('ok fgew ' + vGw);
                            vGW = jQuery(this).find( '.variation-Gewichtkg > p, #gewb' ).text(gew_h); 
                        }
                    });
                },700);

//gesamtgewicht berechnen - total weight (all products):
                window.setTimeout(function(){

                gewt1=parseFloat(jQuery(".total-weight td").html()); //         
                console.log('gewt 1: '+gewt1);

                        var myArray=0;

                            /* jQuery(".gewl" ).each( function( index, element ){
                              myArray =jQuery(this).find( '#gewb' ).text().replace(",", "."); */  
        jQuery("#gewb" ).each( function( index, element ){  
                            myArray =jQuery(this).text().replace(",", ".");
                            myarray=parseFloat(myArray);console.log('myArray ' +myArray);
                                       //gewt = gewt*1 + myArray*1;
                                       gewt+= myArray*1;
                                gewt_ges=gewt1+gewt;
                                gewt_ges=parseFloat((gewt_ges).toFixed(2));                                 
                                gewt=parseFloat((gewt).toFixed(2));   //
                                console.log('gewt wh...= ' + gewt);                         
        }); 
                        /* var data = {
                            'action': 'my_ajax_request',
                            'post_type': 'POST',
                            'name': 'My First AJAX Request'
                          };

                          jQuery.post("", data, function(response) {

                          }, 'json'); */
                        var data = {
                            'action': 'my_action',
                            'gewicht' : ajax_object.gewt,
                            'gesamtgewicht' : ajax_object.gewt_ges
                            //'whatever': ajax_object.we_value      //We pass php values differently!
                        };
                        // We can also pass the url value separately from ajaxurl for front end AJAX implementations
                        /**/ jQuery.post(ajax_object.ajax_url, data, function(response) {
                            response+=gewt;
                        console.log('Got this from the server: weight: '  +gewt +'/ update total weight: ' + gewt_ges +' / response: ' +response);
                        $( ".total-weight").after('<tr id="gew_z"></tr>');
                        $( "#gew_z" ).html('<th>Gewicht-HardoxV1</th><td><span class="kg">'+ gewt+'kg</span></td>');
                        $( ".total-weight td").text(gewt_ges + " kg"); 
                            //alert('Got this from the server: ' + response);

                        });



                    /* var jqxhr = $.post('https://arthouse39.de/wdl/wp-content/themes/childtheme_z/test.php',{gew_hs: gewt},
                    //var jqxhr = $.post('https://arthouse39.de/wdl/wp-content/themes/childtheme_z/functions.php',{gew_hs: gewt},                   
                    function() { //alert( "success" );//alert( gew_h );
                            } )
                        .done(function( data ) {console.log( "Data Loaded: " + data );
                        $( "#gew_z" ).html('<span class="Sendungsdaten_txt">Gesamtgewicht incl. Hardox.: </span>'+ data + ' kg').show(399).delay( 3700 );
                        //$('.total-weight').html('<th>Gewicht</th><td data-title="Total Weight"><span class="kg">'+ data+'kg</span></td>');
                        }); */

                    //
                    },1390);
                    }
            } );

пример из ширины корзины настроенный товар (https://arthouse39.de/wdl/produkt/hardox-500-zuschnitt-generator-r-q-1/) в консоли:

"... Получил с сервера: weight: 177.41 / update total weight: 179.01 / response: gewicht : 0Обновление Gewicht: 0 + 0 кг177.41 "

Как включить значение в общий вес, чтобы можно было выбрать правильный способ доставки? (Перевод в общий вес уже работает ... - но, видимо, только как отображение?

Было бы здорово, если бы кто-то мог помочь, если это чего-то стоит, сделайте предложение, большое спасибо!

1 Ответ

0 голосов
/ 09 мая 2020

Вот еще одна попытка, я не знаю, почему не работает, при весе продукта Hardox-500 31 кг доставка должна переключиться на другую цену доставки: (тележка должна перезагрузиться с этим кодом)

            //gewicht zuschn bei einz. Posten im Warenkorb und Kasse - weight (product Hardox) at single Items in the shopping cart and checkout
              var myurl = document.URL;  //console.log('myurl '+myurl );
     if ( (myurl.indexOf("warenkorb") != -1) || (myurl.indexOf("kasse") != -1) || (myurl.indexOf("hardox-500-zuschnitt") != -1) ) {
           //$( document.body ).on( 'updated_cart_totals', function(){
                    var gew_h=0;
                    var vGwges=0;
                    var sum=0;
                window.setTimeout(function(){
                jQuery(".cart_item" ).each( function( index, element ){
                var array = ( jQuery( this ).html() ); //console.log('array ' + array);
                        if ( (array.indexOf("Hardox-500") != -1) || (array.indexOf("Hardox") != -1) ) {
                        var vmat=jQuery(this).find( '.variation-Materialstrkemm > p' ).text();   //console.log('ok f ' + vmat);
                        var vLg=jQuery(this).find( '.variation-Lngemm > p' ).text();   //console.log('ok f ' + vLg);
                        var vBt=jQuery(this).find( '.variation-Breitemm > p' ).text();   //console.log('ok f ' + vBt);
                        var vSt=jQuery(this).find( '.variation-Stck > p' ).text();   //console.log('ok f ' + vSt);
                            gew_h = vmat*vLg*vBt*vSt*0.000008;   //console.log('gew_h ' + gew_h);
                            gew_h = parseFloat((gew_h).toFixed(2));
                            var vGw=jQuery(this).find( '.variation-Gewichtkg > p, #uni_cpo_gew_h5-field, #gewb' ).text();   //console.log('ok fgew ' + vGw);
                            vGW = jQuery(this).find( '.variation-Gewichtkg > p, #gewb' ).text(gew_h); 
                        }
                    });
                },900);

                //bei Warenkorb aktualiseren,
                jQuery('.product-remove, a.remove, .actions').on("mouseup", function(e) {  console.log('klick ok ');
                window.setTimeout(function(){
                 location.reload();
                 },900);
                    });
                    //bei Warenkorb aktualiseren, , .qib-container button
                jQuery('.product-quantity').on("mouseup", function(e) {  //console.log('klick ok ');
                window.setTimeout(function(){
                 location.reload();
                 },1300);
                    });

                //gesamtgewicht berechnen - total weight (all products):
                var gewt=parseFloat(jQuery(".total-weight td").html()); //
                console.log('gewt 1: '+gewt);
window.setTimeout(function(){

                        var myArray=0;

                            jQuery(".gewl" ).each( function( index, element ){
                              myArray =jQuery(this).find( '#gewb' ).text();
                              anz= myArray.length;

                                       gewt+= myArray*1;
                                gewt=parseFloat((gewt).toFixed(2));   //
                                console.log('gewt nB = ' + gewt);                           
                            });
                        jQuery('.total-weight').html('<th>Gewicht</th><td data-title="Total Weight"><span class="kg">'+ gewt +' kg</span></td>');


                     var jqxhr = $.post('https://arthouse39.de/wdl/wp-content/themes/childtheme_z/test.php',{gew_hs: gewt},                 
                    function() { //alert( "success" );//alert( gew_h );
                            } )
                        .done(function( data ) {console.log( "Data Loaded: " + data );
                        //$( "#gew_z" ).html('<span class="Sendungsdaten_txt">Gesamtgewicht incl. Hardox: </span>'+ data + ' kg').show(399).delay( 3700 );
                        $('.total-weight').html('<th>Gewicht</th><td data-title="Total Weight"><span class="kg">'+ data+'kg</span></td>');
                        }); 

        var new_form = jQuery(".woocommerce").html(); //
        console.log('von cart.js $new_form = ' + new_form);

        var update_wc_div = function( html_str, preserve_notices ) {
        var $html       = $.parseHTML( html_str );
        var $new_form   = $( '.woocommerce-cart-form', $html );
        $new_form = new_form;       
        var $new_totals = $( '.cart_totals', $html );
        var $notices    = $( '.woocommerce-error, .woocommerce-message, .woocommerce-info', $html );

        // No form, cannot do this.
        if ( $( '.woocommerce-cart-form' ).length === 0 ) {
            window.location.reload();
            return;
        }

        // Remove errors
        if ( ! preserve_notices ) {
            $( '.woocommerce-error, .woocommerce-message, .woocommerce-info' ).remove();
        }

        if ( $new_form.length === 0 ) {
            // If the checkout is also displayed on this page, trigger reload instead.
            if ( $( '.woocommerce-checkout' ).length ) {
                window.location.reload();
                return;
            }

            // No items to display now! Replace all cart content.
            var $cart_html = $( '.cart-empty', $html ).closest( '.woocommerce' );
            $( '.woocommerce-cart-form__contents' ).closest( '.woocommerce' ).replaceWith( $cart_html );

            // Display errors
            if ( $notices.length > 0 ) {
                show_notice( $notices );
            }

            // Notify plugins that the cart was emptied.
            $( document.body ).trigger( 'wc_cart_emptied' );
        } else {
            // If the checkout is also displayed on this page, trigger update event.
            if ( $( '.woocommerce-checkout' ).length ) {
                $( document.body ).trigger( 'update_checkout' );
            }

            $( '.woocommerce-cart-form' ).replaceWith( $new_form );
            $( '.woocommerce-cart-form' ).find( ':input[name="update_cart"]' ).prop( 'disabled', true );

            if ( $notices.length > 0 ) {
                show_notice( $notices );
            }

            update_cart_totals_div( $new_totals );
        }

        $( document.body ).trigger( 'updated_wc_div' );
    }; 

},1200);

} 

Ни у кого нет идей?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...