Получить пользовательскую переменную magento 2 в файле phtml

Я создал пользовательскую переменную от администратора magento 2 (Система> Пользовательские переменные). Мой пользовательский код переменной — «test_var».

Как я могу получить это значение в файле phtml?


person Arun SS    schedule 08.04.2016    source источник


Ответы (8)


для этого вам нужно использовать диспетчер объектов и загрузить модель, используя ее переменную Code

После этого вы можете получить его простое значение, значение html и его имя.

 <?php 
$model = $this->_objectManager->get('Magento\Variable\Model\Variable')->loadByCode('test_var');
$plain_value = $model->getPlainValue();
$html_value = $model->getHtmlValue();
$name = $model->getName();
?>
person CedCommerce    schedule 09.04.2016
comment
Использование диспетчера объектов, как это, обычно не одобряется. Вероятно, вам следует написать это в логике блока и выполнить инъекцию зависимостей с помощью геттера. Вот и напишите, как это сделать. devdocs.magento.com/guides/v2.0/extension-dev-guide/ - person espradley; 27.08.2016
comment
Чтобы добавить к комментарию espradley, вы можете обратиться сюда за дополнительной информацией: magento.stackexchange.com/questions/117098/ - person thdoan; 06.10.2016

«Чистый» способ - сделать это с помощью внедрения зависимостей.

Создайте свой собственный блок:

namespace MyCompany\MyBlockName\Block;

class MyBlock extends \Magento\Framework\View\Element\Template {

    protected $_varFactory;

    public function __construct(
        \Magento\Variable\Model\VariableFactory $varFactory,
        \Magento\Framework\View\Element\Template\Context $context)
    {
        $this->_varFactory = $varFactory;
        parent::__construct($context);
    }

    public function getVariableValue() {
        $var = $this->_varFactory->create();
        $var->loadByCode('test_var');
        return $var->getValue('text');
    }

}

И используйте его в своем файле .phtml:

<?php echo $this->getVariableValue() ?>
person Arnaud    schedule 31.05.2017

Пожалуйста, используйте этот код:

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
    $variable = $objectManager->create('Magento\Variable\Model\Variable');

    $value = $variable->loadByCode('variableCode')->getPlainValue();
    echo $value;
person Abhinav Kumar Singh    schedule 06.10.2017
comment
Использование диспетчера объектов напрямую противоречит стандартам кодирования Magento, как упоминалось в других комментариях: devdocs.magento.com/guides/v2.3/extension-dev-guide/ - person c.norin; 05.06.2019

Чтобы получить пользовательские переменные, с учетом различных представлений магазина, можно использовать диспетчер объектов:

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$storeManager  = $objectManager->get('\Magento\Store\Model\StoreManagerInterface');
$storeID = $storeManager->getStore()->getStoreId();

// HTML VALUE
$objectManager->get('Magento\Variable\Model\Variable')->setStoreId($storeID)->loadByCode('your_custom_variable')->getHtmlValue();

// PLAIN VALUE
$objectManager->get('Magento\Variable\Model\Variable')->setStoreId($storeID)->loadByCode('your_custom_variable')->getPlainValue();
person Matteo Galli    schedule 29.09.2020

Это работает в magento 2.2 в файле phtml:

$manager = \Magento\Framework\App\ObjectManager::getInstance();
$value = $manager
         ->get('Magento\Framework\App\DeploymentConfig')
         ->get('shop/url') // other ex: 'db/connection/default/host'
; 
person Erwan    schedule 14.09.2018
comment
Использование диспетчера объектов напрямую противоречит стандартам кодирования Magento, как упоминалось в других комментариях: devdocs.magento.com/guides/v2.3/extension-dev-guide/ - person c.norin; 05.06.2019

Мы в команде Stenik разработали модуль magento 2 для наших нужд, который поможет вам получить доступ к пользовательской переменной из любого шаблона phtml: Загрузить

person l13    schedule 03.01.2019

Добавляя к ответу Арно, используйте $var->validate() === TRUE для проверки кода.

person Cotton    schedule 12.01.2021

person    schedule
comment
Спасибо за ваш ответ. Я попробовал и получил следующую ошибку. Неотловленная ошибка: класс «Маг» не найден в... - person Arun SS; 08.04.2016
comment
Я думаю, вы делаете во внешнем файле. пожалуйста, добавьте следующий код в начало файла. require_once('app/Mage.php'); umask(0); Mage::app(); - person Sunny Rathod; 11.04.2016
comment
Этот ответ предназначен для Magento1, а не для Magento2, как было запрошено. - person Maddy; 15.04.2016