So erstellen Sie ein Eingabe-Tag: Deaktivieren Sie das Attribut in system.xml Magento 2

7

In meinem habe system.xmlich ein Feld-Tag als:

<field id="token" translate="label comment" type="text" sortOrder="20" showInDefault="1" showInWebsite="1" showInStore="1">
      <label>Auth Token</label>
</field>

Was ist das Attribut, das ich zum Feld-Tag hinzufügen muss, um die Eingabe in der Konfiguration zu deaktivieren?

Vielen Dank

Thao Pham
quelle

Antworten:

21

Ich denke <frontend_model>funktioniert für dich so wieMagento1

<field id="recipient_email" translate="label" type="text" sortOrder="10" showInDefault="1" showInWebsite="1" showInStore="1">
                    <label>Send Emails To</label>
                    <validate>validate-email</validate>
                    <frontend_model>YOUR_NAMESPACE\YOUR_MODULE\Block\System\Config\Form\Field\Disable</frontend_model>
                </field>

und deine frontend_modelKlasse sollte sein

<?php
namespace YOUR_NAMESPACE\YOUR_MODULE\Block\System\Config\Form\Field;

use Magento\Framework\Data\Form\Element\AbstractElement;

class Disable extends \Magento\Config\Block\System\Config\Form\Field
{    
    protected function _getElementHtml(AbstractElement $element)
    {
        $element->setDisabled('disabled');
        return $element->getElementHtml();

    }
}
Keyur Shah
quelle
10

Die Antwort von Keyur Shah ist richtig, aber ich habe festgestellt, dass es nicht möglich ist, den Wert des deaktivierten Elements zu kopieren. Anstatt zu schreiben $element->setDisabled('disabled'); , können Sie also schreiben $element->setData('readonly', 1);. Dadurch wird das Feld auf die gleiche Weise angezeigt, Sie können den Wert jedoch markieren und kopieren.

Alobeejay
quelle
3

Dies wird von der aktuellen XSD von system.xml ( Magento / Config / etc / system.xsd ) nicht unterstützt .

Um ein solches Verhalten für alle Arten von Feldern gleichzeitig zu aktivieren, ist es möglich, es zu erweitern \Magento\Config\Block\System\Config\Form\Field::render()(z. B. mithilfe von Plugins), damit es den neuen typeWert des attributeElements unterstützt:

<field id="token" ...>
      <label>Auth Token</label>
      <attribute type="disabled">1</attribute>
</field>

Im Moment ist es möglich , einen beliebigen Wert für angeben , typevon attributeElement, sondern nur Wert sharedwird verarbeitet werden, finden \Magento\Config\Block\System\Config\Form::_getSharedCssClass(). Eine ähnliche Verarbeitung kann in einem neuen Plugin hinzugefügt werden, um das Element zu deaktivieren, wenn dies attributeangegeben ist.

Alex Paliarush
quelle
0

Eine andere Möglichkeit, Ihr Feld zu deaktivieren, besteht darin, den Wert in der env.phpDatei festzulegen. In der Datei env.php können Sie Ihre Konfiguration standardmäßig festlegen und die Felder deaktivieren, die in der env.phpDatei zugeordnet sind. Ihre Konfiguration konnte vom Administrator nicht geändert werden. Es ist sehr praktisch, wenn Sie einige sensible Einstellungen vornehmen möchten.

'system' => [
   'default' => [
      'your_path => [
         'to_your' =>[
            'system_config =>['my special config in the store config']
          ],
       ],
   ]
]
Sony
quelle
-3

Setzen Sie alle show * -Felder auf 0

<field id="token" showInDefault="0" showInWebsite="0" showInStore="0">
</field>
KAndy
quelle
1
Ich möchte, dass das Eingabe-Tag deaktiviert wird, aber wenn das Attribut wie Sie festgelegt wird, wird es ausgeblendet
Thao Pham
stimme @ThaoPham zu
jibin george