M2 | Как получить значение значений динамических сгенерированных строк, созданных при настройке системы, в шаблон?


Я создал динамические строки в конфигурации, такие же в SS:

enter image description here

Когда я сохраняю значение и регистрируюсь:

Данные Core_config_data

Значение это не то, что я сохраняю, вместо этого оно похоже

"{"_1556026243400_400":{" стоимость продукта":"7"}}"

В соответствующем столбце значений.

Это мой system.xml поле:

<group id="prices" translate="label" type="text" sortOrder="10" showInDefault="1" showInWebsite="0" showInStore="0">
            <label>Voucher Prices Setting</label>
            <field id="add_item" translate="label" sortOrder="15" showInDefault="1" showInWebsite="1" showInStore="1">
                <label>Dropdown Prices</label>
                <frontend_model>Vendor\Module\Block\Adminhtml\Menu\Field\AdditionalItem</frontend_model>
                <backend_model>Vendor\Module\Block\Adminhtml\Menu\Config\Backend\AdditionalItem</backend_model>
            </field>
</group>

Обновление:

Вот модель интерфейса:

namespace Vendor\Module\Block\Adminhtml\Menu\Field;

use Magento\Config\Block\System\Config\Form\Field\FieldArray\AbstractFieldArray;

class AdditionalItem extends AbstractFieldArray
{
protected $_typeblockOptions;
protected $_cmsblockOptions;
/**
 * {@inheritdoc}
 */
protected function _prepareToRender()
{

    $this->addColumn(
        'productcost',
        [
            'label' => __('Product Cost'),
            'size' => '200px',
            'class' => 'required-entry'
        ]
    );

    $this->_addAfter = false;
    $this->_addButtonLabel = __('Add');
}
}

Может ли кто-нибудь понять, чего не хватает? Спасибо

Author: Ajwad Syed, 2019-04-23

1 answers

Вы можете создать помощника в своем расширении в следующем месте, чтобы получить значение.

app\code\Vendor\Extension\Helper\Data.php

<?php 
namespace Vendor\Extension\Helper;

use Magento\Store\Model\ScopeInterface;

class Data extends \Magento\Framework\App\Helper\AbstractHelper
{
    const PRODUCTCOST = 'pme_giftcard/prices/add_item';

    protected $_storeManager;
    protected $serialize;

    public function __construct(
    \Magento\Framework\App\Helper\Context $context,
    \Magento\Store\Model\StoreManagerInterface $storeManager,
    \Magento\Framework\Serialize\Serializer\Json $serialize)
    {
        $this->_storeManager = $storeManager;
        $this->serialize = $serialize;
        parent::__construct($context);
    }

    public function getStoreid()
    {
        return $this->_storeManager->getStore()->getId();
    }


    public function getProductCost()
    {
        $productcostconfig = $this->scopeConfig->getValue(self::PRODUCTCOST,ScopeInterface::SCOPE_STORE,$this->getStoreid());

        if($productcostconfig == '' || $productcostconfig == null)
            return;

        $unserializedata = $this->serialize->unserialize($productcostconfig);

        $productcostarray = array();
        foreach($unserializedata as $key => $row)
        {
            $productcostarray[] = $row['productcost'];
        }

        return $productcostarray;
    }
}

Теперь вызовите вспомогательную функцию getProductCost(), чтобы получить значение этого поля. Это возвращает значение в виде массива.

 1
Author: Dhiren Vasoya, 2019-04-24 05:14:50