Ich möchte ein Attribut erstellen, das nur lesbar ist. Es sieht jedoch so aus, als wäre dies nicht möglich.
Ich habe versucht, addAttribute () 'disabled' =>true
oder 'readonly' => true
ohne Erfolg zu übergeben. Ich habe einen Vorschlag über die Verwendung gefunden, setLockedAttributes()
aber aus irgendeinem Grund funktioniert es nicht
Referenz:
Varien_Data_Form_Element_Abstract::serialize($attributes = array(), $valueSeparator='=', $fieldSeparator=' ', $quote='"')
setLockedAttribute
, es istlockAttribute
:-)Antworten:
Aus dem SO-Artikel, auf den verwiesen wird - ich habe es versucht und dies funktioniert tatsächlich auf 1.6CE und 1.7CE / 1.12EE. Ich habe 1.8 / 1.13 noch nicht ausprobiert.
/programming/6384120/magento-read-only-and-hidden-product-attributes
quelle
catalog_product_edit_action
Ereignis gehen ( stackoverflow.com/a/7874345/394589 ), wenn das Sperren nur beim Bearbeiten von c erfolgen muss.Wenn es ausreicht, dass Sie es in der Produktverwaltung nicht bearbeitbar machen, verwenden Sie den Eingabetyp des Frontends
label
, der die Formulareingabe durch einfachen Text ersetzt:Beachten Sie, dass dies das Speichern des Attributs über eine API oder eine manipulierte POST-Anforderung nicht verhindert. Verwenden Sie es zusätzlich
lockAttribute()
wie oben empfohlen, um die Sicherheit zu erhöhen .Auch sieht es nur für Texttypattribute gut aus, für andere Typen wiederum greifen Sie auf
lockAttributes
den Typ "label" zurück oder erweitern ihn.quelle
Um dies zu beheben, können Sie alternativ einen Eingabe-Renderer verwenden. Der Nachteil ist, dass Sie dies für jeden Eingabetyp tun und dies über das Setup für jedes Attribut einstellen müssen.
Verwenden Sie dazu den Schlüssel input_renderer, wenn Sie ein Attribut addAttribute verwenden , oder frontend_input_renderer, wenn Sie updateAttribute verwenden . Beispiel:
Yourns_Yourmodule_Block_Adminhtml_Product_Helper_Form_DisabledText
Erweitern Sie dann mit Ihrer Klasse die Eingabeklasse, die Sie tatsächlich verwenden würden. Für ein Textfeld wäre esVarien_Data_Form_Element_Text
. Für Auserwählte wäre esVarien_Data_Form_Element_Select
und so weiter.Fügen Sie nun Ihren Code wie folgt hinzu, um das Attribut zu deaktivieren, die
getHtml
Methode zu überschreiben , das Attribut festzulegen und den tatsächlichen HTML-Code für das Eingabefeld zurückzugeben:Die Methode befindet sich in der Datei lib / Varien / Data / Form / Abstract.php, die von allen Feldern der Formulareingabeelemente übernommen wird und daher immer verfügbar sein sollte.
Es ist wahrscheinlich sinnvoll, die deaktivierte Klasse wie oben gezeigt in das Attribut-Setup aufzunehmen, um die Möglichkeit der verweigerten Eingabe zu veranschaulichen. Sie können wahrscheinlich auch
$this->addClass('disabled')
in der Methode verwenden, ich habe dies noch nicht ausprobiert.quelle