केवल-उत्पाद बैकएंड विशेषता पढ़ें


13

मैं केवल पढ़ने के लिए एक विशेषता बनाना चाहूंगा, हालांकि यह संभव नहीं है।

मैंने AddAttribute () 'disabled' =>trueया 'readonly' => true किसी भी सफलता के साथ पास होने की कोशिश की है । मुझे उपयोग करने के बारे में कुछ सुझाव मिले हैं setLockedAttributes()लेकिन किसी कारण से यह काम नहीं कर रहा है

संदर्भ:
Varien_Data_Form_Element_Abstract::serialize($attributes = array(), $valueSeparator='=', $fieldSeparator=' ', $quote='"')



यह समाधान काम नहीं कर रहा है। (setLockedAttributes)
Fra

2
यह नहीं है setLockedAttribute, यह lockAttribute:-)
user487772

1
टिम! आप मुस्कराए! :-D
1

धन्यवाद दोस्तों ... मैं इसे एक अद्यतन बाहर की जाँच करेगा
Fra

जवाबों:


11

संदर्भित एसओ लेख से - मैंने कोशिश की और यह वास्तव में 1.6CE और 1.7CE / 1.12EE पर काम करता है। मैंने अभी तक 1.8 / 1.13 पर कोशिश नहीं की है।

/programming/6384120/magento-read-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');
}

1
मैं catalog_product_edit_actionइवेंट के बजाय ( stackoverflow.com/a/7874345/394589 ) के साथ जाऊँगा , अगर लॉकिंग केवल संपादन के समय किया जाना चाहिए।
नेवरमाइंड

8

यदि आपके लिए यह पर्याप्त है कि वह उत्पाद प्रबंधन में संपादन योग्य नहीं है, तो फ्रंटएंड इनपुट प्रकार का उपयोग करें label, जो सादे इनपुट के रूप में इनपुट इनपुट को बदल देता है:

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

ध्यान दें कि यह एपीआई या चालाकी से POST अनुरोध के माध्यम से विशेषता को बचाने से नहीं रोकेगा। इसे सुरक्षित बनाने के लिए, lockAttribute() ऊपर बताए अनुसार उपयोग करें ।

इसके अलावा यह केवल पाठ प्रकार की विशेषताओं के लिए अच्छा लगता है, अन्य प्रकारों के लिए, फिर से, lockAttributes"लेबल" प्रकार को वापस करने या विस्तारित करने के लिए।


यह केवल तभी काम करता है यदि विशेषता पाठ प्रकार है, बूलियन के लिए आपको लॉकट्रेड () की आवश्यकता है
Fra

1
अच्छी बात है, @ फेरा, धन्यवाद! मैं इसे जवाब में जोड़ दूंगा
फेबियन शेंगलर

पाठ विशेषताओं के लिए 1.9.4.1 में भी काम नहीं करता है
OZZIE

3

इसे ठीक करने के लिए, आप वैकल्पिक रूप से इसके लिए एक इनपुट रेंडरर का उपयोग कर सकते हैं। नकारात्मक पक्ष यह है, आपको प्रत्येक इनपुट प्रकार के लिए यह करना होगा और प्रत्येक विशेषता के लिए सेटअप के माध्यम से इसे सेट करना होगा।

ऐसा करने के लिए, input_renderer कुंजी का उपयोग तब करें जब updateAttribute का उपयोग करते समय एक विशेषता या frontend_input_renderer ऐड का उपयोग करें । उदाहरण:

$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 / Abstract.php में पाई जा सकती है, जो सभी प्रकार के इनपुट एलिमेंट फील्ड्स को विरासत में मिलेगी, इसलिए यह 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;
}

यह संभवत: समझदार इनपुट संभावना की कल्पना करने के लिए ऊपर दिखाए गए विशेषता वर्ग में विकलांग वर्ग को शामिल करने के लिए समझदार है । आप शायद $this->addClass('disabled')विधि में भी उपयोग कर सकते हैं , मैंने अभी तक यह कोशिश नहीं की थी।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.