Pregunta

Me gustaría crear un atributo sólo lectura sin embargo, mira que no es posible.

He tratado de pasar a addAttribute () 'disabled' =>true o 'readonly' => true sin ningún éxito. He descubierto alguna sugerencia sobre el uso de setLockedAttributes() pero por alguna razón no se trabaja

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

¿Fue útil?

Solución

Desde el artículo referenciado SO - me trató y esto de hecho trabaja en 1.6CE y 1.7CE / 1.12EE. No he tratado de 1,8 / 1,13 hasta el momento.

https://stackoverflow.com/questions/6384120/magento-read -sólo-y-oculta-producto-atributos

OK, parece que se puede hacer después de todo. Después de añadir un observador para el evento catalog_product_load_after, el método lockAttribute de la clase Mage_Catalog_Model_Abstract puede ser utilizado para hacer un producto atributo de sólo lectura. Aquí está el código para el método de observador:

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

Otros consejos

Si es suficiente para que pueda hacer que no se puede editar en la gestión de productos, utilice el tipo de entrada label frontend, que sustituye a la entrada de formulario con texto sin formato:

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

Tenga en cuenta que esto no impedirá salvar el atributo a través de la API o solicitud POST manipulado. Para que sea más segura, utilice adicionalmente lockAttribute() como se sugirió anteriormente .

También sólo se ve bien para los atributos de tipo de texto, para otros tipos, de nuevo, caen de nuevo a lockAttributes o extender el tipo de "etiqueta".

Para hacer que esto esté arreglado, puede utilizar alternativamente un procesador de entrada para esto. La desventaja es, que tendría que hacer esto para cada tipo de entrada y establecer este a través de la configuración para cada atributo.

Para ello, utilice la tecla input_renderer cuando se utiliza addAttribute un atributo o frontend_input_renderer cuando se utiliza updateAttribute . Ejemplo:

$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',
// ...
));

A continuación, con su Yourns_Yourmodule_Block_Adminhtml_Product_Helper_Form_DisabledText clase extiende la clase de entrada que iba a utilizar realmente. Para un campo de texto que sería Varien_Data_Form_Element_Text. Por selecciona sería Varien_Data_Form_Element_Select y así sucesivamente.

Ahora añadir su código como este para desactivar el atributo, sobrescribiendo el método getHtml, estableciendo el atributo y devolver el código HTML real para el campo de entrada:

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

El método se puede encontrar en lib / Varien / Datos / Formulario / Abstract.php que será heredado por todos los campos de elementos de entrada de formulario, por lo que debe estar disponible 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;
}

Es probablemente senseful para incluir el desactivado clase en la configuración de atributos como se muestra arriba para visualizar la posibilidad de entrada negada. También es probable que pueda utilizar $this->addClass('disabled') en el método, no lo probé esto todavía.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top