• Hallo liebe Userinnen und User,

    nach bereits längeren Planungen und Vorbereitungen sind wir nun von vBulletin auf Xenforo umgestiegen. Die Umstellung musste leider aufgrund der Serverprobleme der letzten Tage notgedrungen vorverlegt werden. Das neue Forum ist soweit voll funktionsfähig, allerdings sind noch nicht alle der gewohnten Funktionen vorhanden. Nach Möglichkeit werden wir sie in den nächsten Wochen nachrüsten. Dafür sollte es nun einige der Probleme lösen, die wir in den letzten Tagen, Wochen und Monaten hatten. Auch der Server ist nun potenter als bei unserem alten Hoster, wodurch wir nun langfristig den Tank mit Bytes vollgetankt haben.

    Anfangs mag die neue Boardsoftware etwas ungewohnt sein, aber man findet sich recht schnell ein. Wir wissen, dass ihr alle Gewohnheitstiere seid, aber gebt dem neuen Board eine Chance.
    Sollte etwas der neuen oder auch gewohnten Funktionen unklar sein, könnt ihr den "Wo issn da der Button zu"-Thread im Feedback nutzen. Bugs meldet ihr bitte im Bugtracker, es wird sicher welche geben die uns noch nicht aufgefallen sind. Ich werde das dann versuchen, halbwegs im Startbeitrag übersichtlich zu halten, was an Arbeit noch aussteht.

    Neu ist, dass die Boardsoftware deutlich besser für Mobiltelefone und diverse Endgeräte geeignet ist und nun auch im mobilen Style alle Funktionen verfügbar sind. Am Desktop findet ihr oben rechts sowohl den Umschalter zwischen hellem und dunklem Style. Am Handy ist der Hell-/Dunkelschalter am Ende der Seite. Damit sollte zukünftig jeder sein Board so konfigurieren können, wie es ihm am liebsten ist.


    Die restlichen Funktionen sollten eigentlich soweit wie gewohnt funktionieren. Einfach mal ein wenig damit spielen oder bei Unklarheiten im Thread nachfragen. Viel Spaß im ngb 2.0.

Shopware und Ajax

KingJamez

Aktiver NGBler

Registriert
18 Juli 2013
Beiträge
505
Hallo,
ich muss gerade an Shopware rumschrauben, ich möchte gerne, das bei Änderung der Variant, nicht das Formular abgesendet wird, sondern Ajax Request gestartet.
Soweit, Sogut, Ansich klappt das auch. Aber die Daten vom Server enthalten die Variantenauswahl nicht mehr, woran liegt das, was mache ich hier falsch?

Ich habe ein kleines Testcase gebaut, um es zu visualisieren, muss die Action- Url aber entfernen, wegen der anonymität

[src=html4strict]
<!-- das ist das normale varianten formular -->
<form method="post" action="<!-- die url zum produkt -->">
<select name="group[149]">
<option value="810">text</option>
</select>

<select name="group[150]">
<option value="823">text</option>
</select>

<select name="group[152]">
<option value="840">text</option>
</select>

<input type="submit" name="name" />
</form>

<div class="dbg"></div>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>

[/src]

[src=javascript]

var $form = $('form'),
formUrl = $form.attr( 'action' ),
formMethod = $form.attr( 'method' );


function sendForm(){
var serData = {};
$.each( $form.serializeArray(), function( i, data ){
serData[data.name] = data.value;
});


$.ajax({
url: formUrl,
//dataType: 'json',
data: serData,
async: true,
method: 'POST',

success: function( data ){
// es kommt eine antwort, diese enthält auch das produkt,
// allerdings keine varianten auswahl und keinen preis
console.log(data);
$('.dbg').html(data);
},
error : function(e,a,b){
console.log('error');
console.log(e,a,b);
}
})

}


$('input[type=submit]').on('click', function(e){
e.preventDefault();
sendForm();
})
[/src]

Derzeit wird Shopware 4.3.6 eingesetzt.
 

sharpy35

Neu angemeldet

Registriert
13 Apr. 2015
Beiträge
210
Wieso machst du mehrere selects mit einem option?
Warum nimmst du da nicht checkboxen? das ist doch so sinnlos?
 

virtus

Gehasst

Registriert
24 Apr. 2015
Beiträge
1.689
Ort
AUF DEM MOND
Dein Code sieht seltsam aus.

Zuerst initialisierst du serData als Objekt:
var serData = {};

Anschließend beschreibst du es als Array:
serData[data.name] = data.value;

Was willst du denn nun für einen Datentyp haben? Ein Array oder ein Objekt?
Falls es ein Array sein soll wäre die korrekte Initialisierung: serData = [];
Falls es ein Objekt sein soll wäre die korrekte Beschreibung der Felder, falls ich das richtig in Erinnerung habe: serData.{data.name} = data.value;

Du solltest dir auch mal ausgeben lassen, was du an den Server sendest:
console.log('Sending: ' + JSON.stringify(serData));
 

KingJamez

Aktiver NGBler

Registriert
18 Juli 2013
Beiträge
505
  • Thread Starter Thread Starter
  • #4
Wieso machst du mehrere selects mit einem option?
Warum nimmst du da nicht checkboxen? das ist doch so sinnlos?
Es ist das derzeitig laufende Template, wo ich noch nicht eingreife. Checkboxen würden in dem Fall aber auch in der länge das Design zerstören, da hier über ca. 10 Variantentypen vorkommen. Das oben ist nur ein Testcase.


Dein Code sieht seltsam aus.

Zuerst initialisierst du serData als Objekt:
var serData = {};

Anschließend beschreibst du es als Array:
serData[data.name] = data.value;
Daran sehe ich kein Problem, ich Beschreibe es Ursprünglich als Object, und werfe dann mit der Array Syntax ein. Es ist sicherlich keine sehr elegante Lösung, aber auch kein Fehler.

[src=javascript]
function whatsIt( data ){
return Object.prototype.toString.call( data )
}
[/src]
gibt [object Object] zurück. Auch MDN gibt an das man Object Properties mit punkt notation oder bracket notatation beschreiben und auselesen kann. Auch auf StackOverflow wird es empfohlen, gerade bei Variablen ist es ja auch absolut Sinnvoll.


Das löst aber leider alles nicht mein Problem, die von virtus erwähnte Ausgabe vor dem Senden mache ich natürlich.
[src=javascript]{"group[149]":"810","group[150]":"823","group[152]":"840"}[/src]
Für mich steht er die Frage ob ich evtl. die falsche URL sende, oder ob Shopware prüft irgendwo ob es ein xmlhttprequest ist und gibt mir deshalb weniger Daten zurück.
Da ich Shopware aber kaum kenne, weiß ich nicht genau wonach ich suchen soll. Gibt es evtl. einen extra Controller für die Varianten?
 

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.577
Moin KingJamez!

Dein Code sieht seltsam aus.

Zuerst initialisierst du serData als Objekt:
var serData = {};

Anschließend beschreibst du es als Array:
serData[data.name] = data.value;

Das ist so nicht ganz richtig.
Es wird als Objekt deklariert korrekt, die zuweisung von
Object["feldName"] legt hierbei aber automatisch einen Schlüssel an da es sich nicht um einen Integer handelt sondern um einen String.
Anders liese sich das Feld dynamisch nicht anlegen der den Schlüsselnamen beinhaltet.


Zum Problem:
Überprüfe doch mal welche Parameter die PHP Datei ausgibt welche du im Action Feld mit angibst, vielleicht findest du dort einen Grund warum nicht alle Informationen zurückkommen.
Ist jetzt auch sehr allgemein aber ich kenne Shopware leider nicht :(
 

sharpy35

Neu angemeldet

Registriert
13 Apr. 2015
Beiträge
210
Eventuell hast du auch i.welche Plugins aktiviert, die die Post Daten killen.
Hatten wir schonmal bei einem ^^
 

KingJamez

Aktiver NGBler

Registriert
18 Juli 2013
Beiträge
505
  • Thread Starter Thread Starter
  • #7
Ich habe einen Ansatz einer Lösung und möchte diesen hier auch teilen, falls jemand nocheinmal ein ähnliches Problem hat.
Im template Ordner/details befindet sich eine ajax.tpl, diese wird vom controller/custom.php aufgerufen.
Diese Datei dient anscheinend eigentlich zur Vorschau, bevor man auf die Detailseite kommt, da wir das aber so nicht verwenden, kann ich diese Datei einfach umbauen, und meine gewünschten Daten dort anlegen. (http://www.shopwaredemo.de/ - click aufs produkt öffnet ein Modalfenster - dafür scheint das eigentlich zu sein).
Da ich noch keine Shopware erfahrung habe (werde ich jetzt aber ansammeln) weiß ich noch nicht ob und wie ich in der ajax.tpl parameter nutzen kann, was dargestellt werden soll. oder wie ich mehrere ajax.tpl files anlegen kann.

Vielen Dank den Helfern,
vielen dank auf für die erörterung des Object / Array problems. Immer wieder schön hier

__ edit
falls ich noch mehr in erfahrung bringe, was das problem eleganter löst, berichte ich es hier
 
Oben