Вопрос

Я хотел бы создать только атрибут, как только это выглядит невозможно.

Я пытался передать в AddatTribute () 'disabled' =>true или же 'readonly' => true без какого -либо успеха. Я узнал некоторое предложение об использовании setLockedAttributes() Но по какой -то причине это не работает

Ссылка:
Varien_Data_Form_Element_Abstract::serialize($attributes = array(), $valueSeparator='=', $fieldSeparator=' ', $quote='"')

Это было полезно?

Решение

Из ссылки на статью - я попробовал, и это действительно работает на 1.6CE и 1.7CE / 1.12EE. Я еще не пробовал 1,8/1,13.

https://stackoverflow.com/questions/6384120/magento- Rude-only-and-hidden-product-attributes

Хорошо, похоже, это может быть сделано в конце концов. После добавления наблюдателя для catalog_product_load_after событие, lockAttribute Метод Mage_Catalog_Model_Abstract Класс может использоваться для создания только для чтения атрибута продукта. Вот код для метода наблюдателя:

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

Другие советы

Если вам достаточно сделать его не редактируемым в управлении продуктом, используйте тип ввода Frontend label, который заменяет ввод формы на простом тексту:

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

Обратите внимание, что это не предотвратит сохранение атрибута через API или манипулируемый запрос POST. Чтобы сделать его безопасным, дополнительно используйте lockAttribute() Как предполагалось выше.

Также он выглядит хорошо только для атрибутов типа текста, для других типов, опять же, возвращается к lockAttributes или расширить тип «метки».

Чтобы сделать это фиксированным, вы можете альтернативно использовать для этого входной рендеринг. Недостатком является то, что вам придется сделать это для каждого типа ввода и установить это с помощью настройки для каждого атрибута.

Для этого используйте input_renderer ключ при использовании Addattribute атрибут или frontend_input_renderer когда используешь UpdateAttributeАнкет Пример:

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

Тогда с вашим классом Yourns_Yourmodule_Block_Adminhtml_Product_Helper_Form_DisabledText Расширьте класс ввода, который вы на самом деле используете. Для текстового поля это было бы Varien_Data_Form_Element_TextАнкет Для избранных это будет Varien_Data_Form_Element_Select и так далее.

Теперь добавьте свой код, чтобы отключить атрибут, перезаписывая getHtml Метод, настройка атрибута и возвращение фактического HTML -кода для поля ввода:

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

Метод можно найти в lib/varien/data/form/rake.php которые будут унаследованы всеми полями входных элементов формы, так что это должно быть доступно.

/**
 * 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;
}

Вероятно, смысл включить инвалид Класс в настройке атрибутов, как показано выше, для визуализации возможности ввода ввода. Вы, вероятно, также можете использовать $this->addClass('disabled') В методе я еще не пробовал это.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top