Chciałbym utworzyć atrybut tylko do odczytu, ale wygląda na to, że nie jest to możliwe.
Próbowałem przejść do metody addAttribute () 'disabled' =>true
lub 'readonly' => true
bez powodzenia. Znalazłem pewne sugestie dotyczące używania, setLockedAttributes()
ale z jakiegoś powodu nie działa
Odniesienie:
Varien_Data_Form_Element_Abstract::serialize($attributes = array(), $valueSeparator='=', $fieldSeparator=' ', $quote='"')
setLockedAttribute
, to jestlockAttribute
:-)Odpowiedzi:
Z przywołanego artykułu SO - próbowałem i to rzeczywiście działa na 1.6CE i 1.7CE / 1.12EE. Do tej pory nie próbowałem 1.8 / 1.13.
/programming/6384120/magento-read-only-and-hidden-product-attributes
źródło
catalog_product_edit_action
imprezy zamiast ( stackoverflow.com/a/7874345/394589 ), jeżeli zamek należy zrobić tylko podczas edycji ofc.Jeśli wystarczy, aby uniemożliwić edytowanie w zarządzaniu produktem, użyj typu danych wejściowych nakładki
label
, który zastępuje wprowadzanie formularza zwykłym tekstem:Pamiętaj, że nie zapobiegnie to zapisaniu atrybutu przez interfejs API lub zmanipulowane żądanie POST. Aby zapewnić bezpieczeństwo, użyj dodatkowo
lockAttribute()
zgodnie z powyższym opisem .Wygląda również dobrze tylko dla atrybutów typu tekstu, w przypadku innych typów ponownie cofnij się
lockAttributes
lub rozszerz typ „etykiety”.źródło
Aby to naprawić, możesz do tego celu użyć renderera wejściowego. Minusem jest to, że musiałbyś to zrobić dla każdego typu danych wejściowych i ustawić to za pomocą setup dla każdego atrybutu.
Aby to zrobić, użyj klucza input_renderer podczas korzystania z atrybutu addAttribute lub frontend_input_renderer podczas korzystania z updateAttribute . Przykład:
Następnie wraz z klasą
Yourns_Yourmodule_Block_Adminhtml_Product_Helper_Form_DisabledText
rozszerz klasę wejściową, której faktycznie użyjesz. Byłoby to dla pola tekstowegoVarien_Data_Form_Element_Text
. Dla wybranych byłobyVarien_Data_Form_Element_Select
i tak dalej.Teraz dodaj swój kod w ten sposób, aby wyłączyć atrybut, nadpisując
getHtml
metodę, ustawiając atrybut i zwracając rzeczywisty kod HTML dla pola wejściowego:Metodę można znaleźć w lib / Varien / Data / Form / Abstract.php, która zostanie odziedziczona przez wszystkie pola elementów formularza, więc powinna być zawsze dostępna.
Prawdopodobnie sensowne jest włączenie wyłączonej klasy do konfiguracji atrybutów, jak pokazano powyżej, aby wizualizować możliwość odmowy wprowadzania danych. Prawdopodobnie można również użyć
$this->addClass('disabled')
w metodzie, jeszcze tego nie próbowałem.źródło