Che cosa è il modo più pulito per applicare i limiti di lunghezza su indirizzo del cliente nel pannello di amministrazione?

magento.stackexchange https://magento.stackexchange.com//questions/63220

Domanda

Per un cliente stiamo esportando tutte le informazioni di indirizzo che va in Magento in un terzo sistema di elaborazione.I dettagli su questo è importante - ma quello che è importante è che le cose vanno terribilmente male se i campi sono più di una quantità prevista di caratteri.

Per questo motivo, stiamo utilizzando le API con substr per troncare i dati verso la dimensione prevista - ma questo non è certo sufficiente.Il personale, tramite il pannello di amministrazione è, apparentemente, di una dimensione decente e non possono essere addestrati ad utilizzare correttamente, in modo che anche noi abbiamo bisogno di applicare questo limiti il pannello di amministrazione stessa.

Come non abbiamo davvero cura di loro, utilizzando il know-how per superare queste limitazioni, tutti abbiamo veramente bisogno è una maxlength="x" sul modulo di elementi. Si tratta di un requisito di forma diversi elementi possono avere diverse maxlengths.

Qual è la più pulita, più l'aggiornamento a prova di applicazione di una lunghezza massima del cliente, indirizzo campi nel pannello di amministrazione?

Il mio primo pensiero è stato che utilizza JavaScript, ma i campi non sono davvero prevedibili identificatori, quindi non sono sicuro che posso facilmente.Perché tutti usano il modulo di rendering roba, anche io non riesco a modificare un file di modello con la creazione di un custom tema admin.

Formulata in un altro modo: Qual è il più semplice e il modo più pulito per aggiungere un attributo maxlength a questi campi?

È stato utile?

Soluzione

Nel metodo _afterToHtml aggiungere questo:

    if($this instanceof Mage_Adminhtml_Block_Widget_Form_Renderer_Fieldset_Element)
    {
        //this code will prevent update unnecessary items in other parts of admin area
        if(!strpos($html, 'account[')) {
            return $html
        }

        if(strpos($html, 'account[prefix]')) {
            $length = 15;
        } elseif(strpos($html, 'account[firstname]')) {
            $length = 25;
        } elseif(strpos($html, 'account[lastname]')) {
            $length = 35;
        //.....
        }

        $string = '<input maxlength="' . $length . '" ';
        return str_replace('<input ', $string, $html);
    }

All'interno maxlength param mettere il valore che ti piace.

upd.1

Se lo si desidera è possibile includere getStoreConfig invece di valore costante

$length = Mage::getStoreConfig(......)

upd.2

Qui ci sono alcuni più idee.

Dove memorizzare i valori con lunghezza max?

  • direttamente nel metodo
  • sistema / configurazione ( Mage::getStoreConfig() )
  • come nuovo campo di attributo del cliente

Memorizzare i valori direttamente nel metodo è il modo più semplice.Ma non sembra molto buona.È anche possibile memorizzare il valore in sistema / configurazione, ma è necessario scrivere altre config.E la 3 ° variante è molto meglio.Ma qui ci sono un sacco di svantaggi.In primo luogo magento CE non hanno l'attributo griglia di attributo e di modificare le pagine.In secondo luogo è necessario personalizzare attributo esistente aggiungendo un nuovo campo.Teoricamente si può prendere qualche estensione come questa http://www.magentocommerce.com/magento-connect/manage-customer-attributes.html e un po ' di personalizzarlo (non hanno tale campo come maxlength - per ottenere il valore nel modello).A mio parere, se non hai bisogno di modificare i valori di lunghezza un sacco di volte, basta usare la prima variante e vi farà risparmiare molto tempo.

Per esempio, avete deciso come aggiungere questo campo.È necessario decidere dove è necessario sostituire il codice.Penso riscrivere il metodo di _afterToHtml($html) è un modo normale, perché magento creato questo metodo per tali scopi.

E ancora una cosa:magento EE supporta tutte le caratteristiche.Certo, è costoso da installare EE.Spero che questa informazione può essere utile.

Altri suggerimenti

Se si utilizza Magento Enterprise, la lunghezza di questi attributi può essere impostato in clienti> Attributi> Gestisci gli attributi dell'indirizzo cliente

È possibile aggiungere la linea JavaScript:

setMaxLengths = function() {
    $$("input[name^='address']").each(function (obj) { obj.setAttribute('maxlength','256'); });
}; Event.observe(window, "load", function(){ setInterval(function(){ setMaxLengths(); }, 1000); });
.

(Modificato per aggiungere il battito cardiaco in modo da lavorare su elementi Dom Dom dinamici ...)

fino alla fine del file /js/prototipo/validation.js e farà applicare il Maxlimit impostato su entrambi i front e admin per tutti i campi di testo dell'indirizzo.Basta sostituire 256 con il limite di lunghezza effettivo che desideri.

Inoltre, prendi nota del cambiamento del file in modo da poterlo rifacarlo dopo qualsiasi aggiornamento. Idealmente lo avresti inserito nel suo file JS che includi tramite XML, ma quanto sopra è il modo più rapido per aggiungerlo a tutte le posizioni corrette.Avrei personalmente rotolare in un modulo Magento personalizzato, sono OCD di fare tutto il modo giusto magento, ma è al di là della portata della domanda.:-) Spero che questo aiuti.

Se si desidera aggiungere diverse massime lunghezza a diversi campi, aggiungi solo più linee di script Java con selettori più specifici.Questo è certamente il modo più semplice!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top