Sto riscontrando un problema in un sistema Magento in cui il salvataggio di un numero elevato di attributi non funziona affatto o funziona solo parzialmente. Sembra essere un problema relativo a JavaScript, e speravo che qualcuno su Stack Overflow avesse una "scienza conosciuta" per affrontare questa situazione, o potrebbe indicarmi la giusta direzione.Problemi nel salvataggio di un numero elevato di etichette di opzioni di attributo in Magento
Il problema di base è che il sistema Magento in questione ha oltre 250 etichette di opzioni di attributo colore. Se un utente amministratore tenta di gestire questi effettuando le seguenti
- Navigazione al Catalogo -> Attributi -> Gestisci attributi
- Selezione del colore attributi
- Cliccando sulla etichetta Gestisci/scheda Opzioni
- Editing l'ultima etichetta Option
- Cliccando su "Salva e continua Modifica"
una delle due cose accada.
In Google Chrome su OS X, il pulsante rimane nello stato "depresso" e, dopo un certo periodo di tempo, compare la finestra di dialogo "Questa pagina non risponde" di Google Chrome.
In un browser basato su Mozilla su OS X, facendo clic sul pulsante il browser "pensa" per un po ', ma alla fine invia il modulo. Tuttavia,, solo un elenco parziale delle etichette degli attributi viene registrato nel controller di amministrazione. Ciò significa che l'utente può modificare solo le prime 75 - 100 etichette, poiché le altre etichette non vengono mai inviate.
Ho segnalazioni degli utenti di Windows che descrivono la seconda comportamento così (browser sono non-specifici)
Le risposte sono ovvie a uno indagare il javascript scarso rendimento, o (stile Groucho Marx) "non fanno quella". Prima di passare il tempo a profilare/scavare il javascript in quella pagina, speravo che ci fosse qualche soluzione nota per questo, o una conoscenza specifica di ciò che stava causando il problema.
Magento CE 1.7.x, se presente.
Aggiornamento: I problemi di prestazioni di Javascript sono una falsa pista. Sono causate dal massiccio numero di campi di input essere iterati attraverso
js/prototype/validation.js
In particolare in questo blocco catch try
try {
if(this.options.stopOnFirst) {
result = Form.getElements(this.form).all(function(elm) {
if (elm.hasClassName('local-validation') && !this.isElementInForm(elm, this.form)) {
return true;
}
return Validation.validate(elm,{useTitle : useTitles, onElementValidate : callback});
}, this);
} else {
result = Form.getElements(this.form).collect(function(elm) {
if (elm.hasClassName('local-validation') && !this.isElementInForm(elm, this.form)) {
return true;
}
return Validation.validate(elm,{useTitle : useTitles, onElementValidate : callback});
}, this).all();
}
} catch (e) {
}
Tuttavia, anche se questo corto circuito e hanno la funzione di ritorno vero, il comportamento di non salvare tutte le etichette persiste.
Sembra che questo fosse il problema. Se applico l'array POST e lo contiamo, ha esattamente 1000 elementi. I futuri che arrivano dovrebbero leggere anche questa segnalazione di bug, dato che la documentazione di max_input_vars è leggermente imprecisa. https://bugs.php.net/bug.php?id=62921&edit=1 –
Ho risolto anche il problema (lo stesso problema di Alan Storm). Il max_input_vars era già impostato su 1000 ma non ha funzionato con i miei 380 valori di attributo. Quando si imposta su 3000, il pulsante è rimasto premuto in chrome, ma i valori sono stati salvati correttamente. –