Salt Okunur Ürün Arka Uç özelliği


13

Ben sadece bir özellik okumak istiyorum ancak mümkün görünmüyor.

AddAttribute () 'disabled' =>trueveya 'readonly' => true herhangi bir başarı ile geçmek için denedim . Kullanmayla ilgili bazı öneriler buldum setLockedAttributes()ama bir nedenden dolayı çalışmıyor

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


2
Soru stackoverflow üzerinde cevaplandı: stackoverflow.com/questions/6384120/…
Fabian Blechschmidt

Bu çözüm çalışmıyor. (setLockedAttributes)
Fra

2
değil setLockedAttribute, bu lockAttribute:-)
user487772

1
Tim! Gülümsedin! -D
benmarks

teşekkürler çocuklar ... Ben bir güncelleme iplik kontrol edecek
Fra

Yanıtlar:


11

Başvurulan SO makalesinden - denedim ve bu gerçekten 1.6CE ve 1.7CE / 1.12EE üzerinde çalışıyor. Henüz 1.8 / 1.13 üzerinde denemedim.

/programming/6384120/magento-read-only-and-hidden-product-attributes

Tamam, her şeyden önce yapılabilecek gibi görünüyor. catalog_product_load_afterOlay için bir gözlemci eklendikten sonra lockAttribute, Mage_Catalog_Model_Abstractsınıfın yöntemi bir ürün özniteliğini salt okunur yapmak için kullanılabilir. Gözlemci yönteminin kodu şöyledir:

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

1
Eğer kilitleme sadece ofc düzenlenirken yapılması gerekiyorsa, catalog_product_edit_actionbunun yerine olayla devam ediyorum ( stackoverflow.com/a/7874345/394589 ).
nevvermind

8

Ürün yönetiminde düzenlenebilir hale getirmeniz yeterliyse label, form girişini düz metinle değiştiren ön uç giriş türünü kullanın :

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

Bunun, özelliğin API veya değiştirilmiş POST isteği yoluyla kaydedilmesini engellemeyeceğini unutmayın. Güvenli hale getirmek için ayrıca lockAttribute() yukarıda önerildiği gibi kullanın .

Ayrıca, yalnızca metin türü nitelikleri için iyi görünür, diğer türler için yine lockAttributes"etiket" türüne geri döner veya uzatılır.


bu yalnızca öznitelik metin türüyse çalışır, boolean için lockattribute ()
Fra

1
Güzel nokta, @Fra, teşekkürler! Ben cevap olarak ekleriz
Fabian Schmengler

Metin özellikleri için bile 1.9.4.1'de çalışmıyor gibi görünüyor
OZZIE

3

Bunu düzeltmek için, alternatif olarak bunun için bir giriş oluşturucu kullanabilirsiniz. Dezavantajı, bunu her giriş türü için yapmanız ve bunu her özellik için kurulum yoluyla ayarlamanız gerekir.

Bunu yapmak için, kullanmak input_renderer kullanırken anahtarı addAttribute bir özelliği veya frontend_input_renderer kullanırken updateAttribute . Misal:

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

Daha sonra sınıfınızla Yourns_Yourmodule_Block_Adminhtml_Product_Helper_Form_DisabledTextgerçekten kullanacağınız giriş sınıfını genişletin. Bir metin alanı için olurdu Varien_Data_Form_Element_Text. Seçimler için böyle olur Varien_Data_Form_Element_Selectve böyle devam eder.

Şimdi özniteliği devre dışı bırakmak, getHtmlyöntemin üzerine yazmak , özniteliği ayarlamak ve giriş alanı için gerçek HTML kodunu döndürmek için böyle bir kod ekleyin :

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

Yöntem, tüm form girdi öğesi alanları tarafından miras alınacak olan lib / Varien / Data / Form / Abstract.php dosyasında bulunabilir, bu nedenle her zaman kullanılabilir olmalıdır.

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

Devre dışı bırakılan sınıfı, reddedilen giriş olasılığını görselleştirmek için yukarıda gösterildiği gibi öznitelik kurulumuna dahil etmek mantıklıdır . Muhtemelen $this->addClass('disabled')yöntemde de kullanabilirsiniz , henüz denemedim.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.