Modify

Opened 8 years ago

Last modified 8 years ago

#1358 new Erweiterung

Javascript zur Vereinfachung der Eingabe der tabellrischen Versandkosten

Reported by: Torsten Riemer Owned by: somebody
Priority: normal Milestone:
Component: Admin Version: 2.0.3.0
Keywords: Cc:
Blocked By: Blocking:

Description

Eine schöne Sache, die mir da heute zugesandt wurde:

Hallo Tomcraft und die modified eCommerce Community,

ich bin ein Frontend-Entwickler und habe für das tabellarische Versandkosten Modul ein simples aber effektives Javascript erstellt, dass die Eingabe sehr vereinfacht und sich dabei ohne andere Änderungen am modified ecommerce Core out-of-the-box funktioniert.

Die Javascript Datei kann auch als Standalone-Plugin verwendet werden.
Anbei ein Screenshot der zeigt wie das Formular das die Felder für tabellarische Versandkosten erweitert und dynamisch wieder befüllt.

Würde mich freuen, wenn das Script mit einer der nächsten Shop-Versionen der Community zur Verfügung gestellt wird.

Das Javascript habe ich hier ins Backend eingebunden.
Der auto_include.inc.php tut dann sein übriges.

./admin/includes/extra/javascript/zones_shipping_fields.js.php

<script>
/**
 * Tabellarische Versandkosten einfach und übersichtlicher
 * Author: Gökhan Karaca (goeko@goeko.de)
*/
$(document).ready(function(){
    var shipping_fields = [],
        shipping_fields_arr = [
            'MODULE_SHIPPING_TABLE_COST_',
            'MODULE_SHIPPING_ZONES_COST_'
        ];

    getShipping = function(wrapper){
        var values = [],
            inputsWrapper = wrapper.find('.priceWrapper');

        inputsWrapper.each(function(i, e){
            var $inputs = $(e).find('input'),
                weight = $inputs.eq(0).val(),
                shipping_price = $inputs.eq(1).val();

            if(weight && shipping_price){
                values.push( parseFloat($inputs.eq(0).val()).toFixed(2) +':'+ parseFloat($inputs.eq(1).val()).toFixed(2) );
            }
        });
        return values.join(',');
    };

    setField = function(field){
        //console.log( typeof $this.val() === 'number' );

        if( field.val() != '') {
            field.val( parseFloat(field.val()).toFixed(2) );
        } else {
            field.val('');
        }
        if(field.val() == 'NaN'){
            field.val('');
        }
    };

    for(var s=0;s<shipping_fields_arr.length;s++){

        for(var n=0;n<11;n++){

            var shipping_field = $('[name*='+shipping_fields_arr[s]+n+']');

            if(shipping_field.length>0){
                var shipping_field_values = shipping_field.val(),
                    shipping_fieldWrapper = $('<div/>', {class:"shipping_fieldWrapper shipping_fieldWrapper"+s});

                shipping_field.wrapAll(shipping_fieldWrapper);

                var shipping_items = shipping_field_values.split(','),
                    shipping_values = [],
                    shipping_fieldWrapper = shipping_field.closest('div');

                if(shipping_items.length > 0){

                    var mode = $('[name*=MODULE_SHIPPING_TABLE_MODE]'),
                        mode_text = "Gewicht";
                    if(mode.length > 0){
                        var mode_id = $('[name*=MODULE_SHIPPING_TABLE_MODE]:checked').attr('id'),
                            mode_text = $('[for='+mode_id+']').text();
                    }

                    shipping_fieldWrapper.append('<div class="title"><div>max. '+mode_text+'</div><div>Versandkosten</div></div>')

                    for(var i=0; i<shipping_items.length; i++){
                        var shipping_item = shipping_items[i].split(':');
                        shipping_values.push(shipping_item);

                        var priceWrapper        = $('<div/>', {class:'priceWrapper'}),
                            cart_price          = $('<input/>', {value:shipping_item[0], type:"search", placeholder:'max. Bestellgewicht'}),
                            shipping_price      = $('<input/>', {value:shipping_item[1], type:"search", placeholder:'Versandkosten'});

                        priceWrapper.append(cart_price);
                        priceWrapper.append(shipping_price);

                        shipping_fieldWrapper.append(priceWrapper);

                    }
                    var priceWrapper        = $('<div/>', {class:'priceWrapper'}),
                        cart_price          = $('<input/>', {value:"", type:"search", placeholder:'max. Bestellgewicht'}),
                        shipping_price      = $('<input/>', {value:"", type:"search", placeholder:'Versandkosten'}),
                        buttonbar           = $('<div/>', {class:"buttonbar"}),
                        submit_btn           = $('<input/>', {value:"Speichern", type:"submit", class:"submit_btn"}),
                        reset_btn           = $('<input/>', {value:"Zurücksetzen", type:"reset", class:"reset_btn"});

                    priceWrapper.append(cart_price);
                    priceWrapper.append(shipping_price);

                    shipping_fieldWrapper.append(priceWrapper);

                    buttonbar.append(reset_btn);
                    buttonbar.append(submit_btn);
                    shipping_fieldWrapper.append(buttonbar);

                    var inputFields = shipping_fieldWrapper.find('input')
                        .not(".inputModule")
                        .not(".submit_btn")
                        .not(".reset_btn");
                    inputFields.each(function(i, e){
                        $input = $(e);
                        var wrapper = $input.closest('.shipping_fieldWrapper'),
                            shipping_field = wrapper.find('input').first();

                        $input.on('blur', function(){
                            $this = $(this);
                            setField($this, shipping_field, wrapper);
                            shipping_field.val( getShipping(wrapper) );
                        });
                        $input.on('search', function(){
                            $this = $(this);
                            $this.val('');
                            shipping_field.val( getShipping(wrapper) );
                        });

                    });
                }
            }



        }
    }

});
</script>

Attachments (2)

Bild 20171130_223842.png (27.9 KB ) - added by Torsten Riemer 8 years ago.
zones_shipping_fields.js.php (5.0 KB ) - added by Torsten Riemer 8 years ago.

Download all attachments as: .zip

Change History (10)

by Torsten Riemer, 8 years ago

Attachment: Bild 20171130_223842.png added

by Torsten Riemer, 8 years ago

comment:1 by Ronald Parcinski, 8 years ago

Wirklich gute Idee. Es fehlt aber noch CSS Code, damit es so aussieht wie im Screenshot.

Was auch gut wäre: Ein Button um mit jquery weitere Eingabefeler zu generieren

comment:2 by Torsten Riemer, 8 years ago

Ich habe das mal beides beim Entwickler angefragt.

comment:3 by Torsten Riemer, 8 years ago

Hier noch die notwendigen Styles:

.shipping_fieldWrapper {
    padding:0.5em;
    outline:1px solid #000;
}
.shipping_fieldWrapper div {
    margin:0.5em 0;
}
.shipping_fieldWrapper .title div {
    font-weight: bold;
}
.shipping_fieldWrapper .title div,
.shipping_fieldWrapper input {
    display: inline-block;
    margin:0 0.5em 0 0;
    padding:0.2em;
    width:150px;
}

comment:4 by Ronald Parcinski, 8 years ago

Was auch gut wäre: Ein Button um mit jquery weitere Eingabefeler zu generieren

Schon etwas vom Entwickler dazu gehört?

comment:5 by Torsten Riemer, 8 years ago

Nein bisher noch nicht.

comment:6 by Markus Rehm, 8 years ago

Hi

also ich weiss ja nicht ... das ist wieder so eine Spielerei die mehr Probleme verursachen als Nutzen bringen wird. Zum einen muss das wenn überhaupt für alle Shipping-Module gemacht werden und nicht nur für eins .. und nicht zu vergessen die Nachnahme bei den Zahlungsmodulen und zum anderen ist es damit hinfällig mal einfach auf die schnelle ein Shipping-Modul zu kopieren. Aus meiner Sicht ist das was für ein Addon und nichts für den Trunk. Einfach nur ne "Spielerei" die man aus meiner Sicht nicht braucht. Und dann auch noch Felder automatisch hinzufügen ... herzlichen Glückwunsch ... wer fixt die ganzen Probleme die damit auf uns zu kommen wegen so einer Spielerei?

Markus

comment:7 by Ronald Parcinski, 8 years ago

Hallo Markus,

an Shopdateien und Datenbank ändert sich nichts.
Das Modul erzeugt nur per jQuery eine übersichtlichere Dateneingabe/ausgabe.
Teste das einfach mal.

Ronald

comment:8 by Torsten Riemer, 8 years ago

Milestone: modified-shop-2.0.4.0

Modify Ticket

Action
as new The owner will remain somebody.

Add Comment


E-mail address and name can be saved in the Preferences .
 
Note: See TracTickets for help on using tickets.