Domanda

Ho aggiunto un attributo a un'entità indirizzo del cliente. codice di impostazione attributo è la seguente -

'entity_type_id'=>$customer_address_type_id,
'attribute_code'=>'signature_required',
'backend_type'=>'int',
'frontend_input'=>'boolean',
'frontend_label' => 'Signature required',
'is_global' => '1',
'is_visible' => '1',
'is_required' => '0',
'is_user_defined' => '0',

Ho poi -

  • attributo aggiunto al modello \ entità \ setup.php
  • aggiunto un campo HTML sul modulo di modifica

Ora sto ottenendo l'attributo salvato al database quando la casella è selezionata. Tuttavia, non è essere disinserito quando non sia spuntata (sto cercando di indovinare a causa di input checkbox non essere 'post'-ed se non controllata.

Qual è il modo migliore per deselezionare questa? Dovrei aggiungere un valore predefinito 0? O disinserire / eliminare l'attributo prima di salvare nel controller? Dovrei aggiungere get / metodi set al modello?

È stato utile?

Soluzione 2

Alla fine, ho calpestato il metodo setData nel mio modello personalizzato.

Ho trovato alcuni buone risorse a cercare di ignorare / sovraccarico (entrambi i termini sono comuni) controllori / router.

Anche di nota -

'frontend_input'=>'boolean',

dovrebbe essere

'frontend_input'=>'checkbox',

Altri suggerimenti

Ho avuto un problema simile oggi, trovato le varie guide di essere noioso e lavorato intorno cambiando utilizzando un "selezionare" invece di una "casella di controllo" e impostando la "fonte" per eav/entity_attribute_source_boolean che dà un semplice "Sì" / "No" a discesa e consente di risparmiare in modo corretto senza modifiche.

Hai ragione, il problema è che le caselle di controllo deselezionate non vengono inviati attraverso su richiesta POST.

È possibile risolvere questo mettendo un modulo di input nascosto con un valore pari a '0' prima della casella di controllo in questo modo:

<input type='hidden' name='my_checkbox' value='0'>
<input type='checkbox' name='my_checkbox' value='1'>

Ora, se la casella è selezionata invierà attraverso un valore di '1', se non è selezionata invierà un valore di '0'.

Vorrei sottolineare che questo è vero solo in PHP perché quando due valori POST identici vengono inviati, prende l'ultimo. Lingue diverse lato server possono gestire in modo diverso

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top