Как получить конфигурацию магазина внутри шаблона темы


8

Я пытаюсь добавить настройку номера телефона магазина в « Магазины»> «Конфигурация»> «Общие»> «Общие»> «Информация о магазине» в шапку моей темы. Я думаю, что в модуле это можно сделать с помощью getValue()in, \Magento\Framework\App\Config\ScopeConfigInterfaceно я не вижу способа использовать это внутри темы. Пока что я добавил это в default.xml

 <referenceContainer name="header-wrapper">
      <block class="Magento\Framework\View\Element\Template" name="store.phone.number" template="Magento_Theme::phone.phtml" />
 </referenceContainer>

но я не знаю, как получить номер телефона внутри phone.phtml

Ответы:


13

Я предлагаю вам создать свой собственный блок, который расширит Magento\Framework\View\Element\Templateкласс.

Поскольку Magento\Framework\App\Config\ScopeConfigInterfaceявляется частью Magento\Framework\View\Element\AbstractBlock(родителем Templateкласса), объявленным в $_scopeConfig, вы можете добавить следующую функцию в свой пользовательский блок:

public function getConfig()
{
    return $this->_scopeConfig;
}

Тогда в вашем шаблоне вы можете сделать:

$block->getConfig()->getValue('value/you/need');

Не забудьте обновить ваш макет следующим образом:

<referenceContainer name="header-wrapper">
      <block class="Vendor\Module\Block\View\Element\Template" name="store.phone.number" template="Magento_Theme::phone.phtml" />
</referenceContainer>

Необходимость создания модуля для работы с темой не кажется очень элегантным способом сделать это (хотя, похоже, это может быть единственным способом). Конечно, это вызовет проблемы у разработчиков тем, которые публикуют темы
Alex

@ Алекс да, непосредственное использование менеджера объектов определенно проще, но не рекомендуется использовать его напрямую. Так что есть два варианта: быстрый и грязный или медленный и чистый ^^
Рафаэль из Digital Pianism

Разработчики @Alex Theme всегда поставляли свои темы с модулями, специфичными для темы, и я не знаю никаких проблем. На самом деле это элегантное решение. Наличие большого количества PHP-кода в шаблонах не так.
Фабиан Шменглер

6

Мы можем напрямую получить конфигурацию магазина в шаблоне, получив экземпляр Magento\Framework\App\Config\ScopeConfig:

 \Magento\Framework\App\ObjectManager::getInstance()
  ->get('Magento\Framework\App\Config\ScopeConfigInterface')
  ->getValue('value/you/need');

Технически, когда кто-то запрашивает экземпляр Magento\Framework\App\Config\ScopeConfigInterface, мы даем ему экземпляр Magento\Framework\App\Config\ScopeConfig. Например, мы можем получить настройку по умолчанию для режима сетки или списка:

$productListMode = \Magento\Framework\App\ObjectManager::getInstance()
   ->get('Magento\Framework\App\Config\ScopeConfigInterface')
   ->getValue('catalog/frontend/list_mode');

Примечание. Избегайте использования диспетчера объектов напрямую . Мы должны держать наши шаблоны в чистоте. Попробуйте добавить конфиг в блок. Должен следовать ответу @Raphael.


Спасибо за ответ, он работает для catalog / frontend / list_mode, как в вашем примере, но возвращает значение null для general / store_information / phone
Alex

Вы установили номер телефона для своего магазина? Я могу получить номер телефона магазина:\Magento\Framework\App\ObjectManager::getInstance() ->get('Magento\Framework\App\Config\ScopeConfigInterface') ->getValue('general/store_information/phone');
Khoa TruongDinh

Да, я добавил в Магазины> Конфигурация> Общие> Общие> Информация о магазине. Пробовал значение по умолчанию и для сайта / магазина
Алекс

Пожалуйста, попробуйте переиндексировать и очистить кеш.
Khoa TruongDinh

У меня сейчас тянется номер телефона по умолчанию, но я игнорирую тот, который установлен в конфигурации магазина / веб-сайта. Вы пробовали это?
Алекс

2

Попробуйте это на блоке, он работает для меня после многих поисков

$ isEnabled = \ Magento \ Framework \ App \ ObjectManager :: getInstance ()
-> get ('Magento \ Framework \ App \ Config \ ScopeConfigInterface') -> getValue ('section / group / field');

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.