如何在主题模板中获取商店配置


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

Answers:


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

@Alex是,直接使用对象管理器绝对容易,但是不建议直接使用它。因此,有两种选择,快速和肮脏或缓慢和干净^^
Digital Pianism的Raphael,2016年

@Alex主题开发人员一直在为主题提供主题特定的模块,我不知道有任何问题。实际上,这是一个优雅的解决方案。模板中没有太多PHP代码。
Fabian Schmengler '16

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的答案。


感谢您的回答,它适用于目录/前端/ list_mode就像在你的榜样,但对于一般/ store_information /电话返回null
亚历克斯

您是否设置了商店的电话号码?我可以得到商店的电话号码:\Magento\Framework\App\ObjectManager::getInstance() ->get('Magento\Framework\App\Config\ScopeConfigInterface') ->getValue('general/store_information/phone');
Khoa TruongDinh

是的,我在商店>配置>常规>常规>商店信息中添加了。尝试使用默认值和网站/商店的默认值
Alex

请尝试重新索引并清除缓存。
Khoa TruongDinh '16

现在,我已获取默认电话号码,但忽略了商店/网站配置中的那个。你有尝试过吗?
亚历克斯

2

在Block上尝试一下,经过多次搜索,它对我有用

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.