Domanda

vorrei creare un attributo solo lettura tuttavia osservare che non è possibile.

ho cercato di passare a AddAttribute () 'disabled' =>true o 'readonly' => true con qualsiasi successo. Ho scoperto qualche suggerimento su come utilizzare setLockedAttributes() ma per qualche ragione non funziona

Riferimento:
Varien_Data_Form_Element_Abstract::serialize($attributes = array(), $valueSeparator='=', $fieldSeparator=' ', $quote='"')

È stato utile?

Soluzione

Dall'articolo SO riferimento - ho provato e funziona davvero su 1.6CE e 1.7CE / 1.12EE. Non ho provato a 1,8 / 1,13 a partire da ancora.

https://stackoverflow.com/questions/6384120/magento-read -Solo-e-nascosto-prodotto-attributi

OK, sembra che si può fare, dopo tutto. Dopo aver aggiunto un osservatore per l'evento catalog_product_load_after, il metodo di lockAttribute la classe Mage_Catalog_Model_Abstract può essere usato per fare un prodotto attributo di sola lettura. Ecco il codice per il metodo di osservazione:

public function lockAttributes($observer) {
    $event = $observer->getEvent();
    $product = $event->getProduct();
    $product->lockAttribute('attribute_code');
}

Altri suggerimenti

Se è abbastanza per voi per rendere non modificabile nella gestione del prodotto, utilizzare il tipo di input label frontend, che sostituisce l'ingresso modulo con testo semplice:

addAttribute($entity, $code, array(
    ...
    'input' => 'label',
    ...
));

Si noti che questo non impedirà salvare l'attributo attraverso API o richiesta POST manipolato. Per renderlo sicuro, utilizzare in aggiunta lockAttribute() come suggerito sopra .

Inoltre sembra solo un bene per gli attributi di tipo testo, per gli altri tipi, ancora una volta, ricadere lockAttributes o estendere il tipo di "etichetta".

Per fare questo riparato, in alternativa è possibile utilizzare un renderer di ingresso per questo. Il rovescio della medaglia è, si dovrebbe fare questo per ogni tipo di ingresso e impostare questa via di installazione per ciascun attributo.

Per fare ciò, utilizzare il input_renderer chiave quando si usa AddAttribute un attributo o frontend_input_renderer quando si usa updateAttribute . Esempio:

$installer->addAttribute(Mage_Catalog_Model_Product::ENTITY, 'yourattribute', array(
// ...
// won't be used actually as you use a custom renderer (constant equals to text), but I'm not sure what omitting this will have as effect..
    'input' => Mage_Catalog_Model_Product_Option::OPTION_GROUP_TEXT,
    'input_renderer' => 'yourns_yourmodule/adminhtml_product_helper_form_disabledText',
    'frontend_class' => 'disabled',
    'note' => 'This field is disabled',
// ...
));

Poi, con la tua classe Yourns_Yourmodule_Block_Adminhtml_Product_Helper_Form_DisabledText estendere la classe di ingresso che si sarebbe effettivamente utilizzare. Per un campo di testo che sarebbe stato Varien_Data_Form_Element_Text. Per seleziona sarebbe Varien_Data_Form_Element_Select e così via.

Ora aggiungere il codice come questo per disabilitare l'attributo, sovrascrivendo il metodo getHtml, impostando l'attributo e restituire il codice HTML per il campo di input:

public function getHtml()
{
    // Set disabled
    $this->setReadonly(true, true);
    return parent::getHtml();
}

Il metodo può essere trovato in lib / Varien / dati / Form / Abstract.php che verrà ereditato da tutti i campi elemento di input forma, quindi dovrebbe essere disponibile alaways.

/**
 * Disable elements
 *
 * @param boolean $readonly
 * @param boolean $useDisabled
 * @return Varien_Data_Form_Abstract
 */
public function setReadonly($readonly, $useDisabled = false)
{
    if ($useDisabled) {
        $this->setDisabled($readonly);
        $this->setData('readonly_disabled', $readonly);
    } else {
        $this->setData('readonly', $readonly);
    }
    foreach ($this->getElements() as $element) {
        $element->setReadonly($readonly, $useDisabled);
    }

    return $this;
}

E 'probabilmente senseful per includere il disabilitata di classe nel setup attributo come mostrato sopra per visualizzare la possibilità di ingresso negato. Probabilmente si può anche utilizzare $this->addClass('disabled') nel metodo, non ho provato questo ancora.

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