Magento 2 Comment créer un paramètre de table dans la configuration du système d'administration?

9

Selon magento 1, nous étendons de "adminhtml / system_config_backend_serialized_array" pour créer une table comme celle-ci: entrez la description de l'image ici

Ma question est: comment le créons-nous dans magento 2?

Edit: Enfin, avec l'aide de @Marius: c'est le champ Exceptions User-Agent dans System => Configuration => General => Design => Design Theme.

entrez la description de l'image ici

Nous pouvons créer une nouvelle configuration de table basée sur ce champ en regardant ses codes "Magento \ Config \ Block \ System \ Config \ Form \ Field \ Regexceptions"

thienphucvx
la source
regardez dans ce magento.stackexchange.com/questions/86147/… cela vous aidera
Bojjaiah
Je vous remercie. Mais je pense que la réponse de @Marius est ce dont j'ai besoin.
thienphucvx

Réponses:

14

Vous pouvez le faire en utilisant, Company / Modulename / etc / adminhtml / system.xml

Sous la section -> champ de groupe

<field id="mapping" translate="label comment tooltip" sortOrder="80" showInDefault="1" showInWebsite="1" showInStore="0">
    <label>Customer Fields Mapping</label>
    <frontend_model>Company\Modulename\Block\Adminhtml\System\Config\Form\Field\Customermap</frontend_model>
    <backend_model>Magento\Config\Model\Config\Backend\Serialized\ArraySerialized</backend_model>
    <comment>
        <![CDATA[Add the comments!]]>
    </comment>
    <tooltip>Map the magento customer field to custom module merge_fields</tooltip>
</field>

Dans le fichier de modèle frontal à l'intérieur du bloc,

<?php
namespace Company\Modulename\Block\Adminhtml\System\Config\Form\Field;

class Customermap extends \Magento\Config\Block\System\Config\Form\Field\FieldArray\AbstractFieldArray
{
    /**
     * @var \Magento\Framework\Data\Form\Element\Factory
     */
    protected $_elementFactory;

    /**
     * @param \Magento\Backend\Block\Template\Context $context
     * @param \Magento\Framework\Data\Form\Element\Factory $elementFactory
     * @param array $data
     */
    public function __construct(
        \Magento\Backend\Block\Template\Context $context,
        \Magento\Framework\Data\Form\Element\Factory $elementFactory,
        array $data = []
    )
    {
        $this->_elementFactory  = $elementFactory;
        parent::__construct($context,$data);
    }
    protected function _construct()
    {
        $this->addColumn('field1', ['label' => __('Field1')]);
        $this->addColumn('field2', ['label' => __('FIeld2')]);
        $this->_addAfter = false;
        $this->_addButtonLabel = __('Add');
        parent::_construct();
    }

}

Vous avez un tableau d'affichage dans la zone de configuration et après avoir enregistré sa valeur, vous êtes enregistré dans le core_config_datatableau.

Rakesh Jesadiya
la source
ça marche bien. Mais quand j'économise comme <test>ça s'affiche &lt;test2&gt;. Toute suggestion?
Bojjaiah
Bonjour, ayant des doutes, si je souhaite ajouter un autre groupe qui comprend les mêmes champs, le modèle frontal, le modèle principal que vous avez ajouté dans votre system.xml, alors comment ajouter un autre groupe avec le même fichier system.xml. lors de l'ajout d'un nouveau groupe, s'il chargera le modèle correctement?
Jaisa
@Rakesh Jesadiya, veuillez jeter un œil et répondre magento.stackexchange.com/questions/212229/…
Jaisa
salut @rakesh Jesadiya, j'ai ajouté des champs en utilisant le code ci-dessus mais je ne peux pas enregistrer et il y a une erreur sur le champ de la console (qté) non défini.
faizanbeg
Comment créer les lignes de cette table de configuration admin par programme?
Ashwani Shukla
4

L'équivalent pour adminhtml/system_config_backend_serialized_arraydans Magento 2 est Magento\Config\Model\Config\Backend\Serialized\ArraySerialized.
Vous pouvez prendre comme exemple le champ User-Agent Exceptionsde config et essayer de le répliquer.
Le champ est défini dansMagento/Backend/etc/adminhtml/system.xml

Marius
la source
Oui. C'est exactement ce que je recherche. Merci beaucoup.
thienphucvx
salut @marius, j'ai ajouté des champs en utilisant le code $ this-> addColumn ('value', ['label' => __ ('Value')]); $ this-> addColumn ('qty', ['label' => __ ('Qty')]); mais impossible d'enregistrer et il y a une erreur sur le champ de la console (qté) non défini Veuillez aider
faizanbeg