Cara mendapatkan konfigurasi toko di dalam templat tema


8

Saya mencoba menambahkan pengaturan nomor telepon toko di Toko> Konfigurasi> Umum> Umum> Informasi Toko ke header di tema saya. Dalam sebuah modul saya pikir ini bisa dilakukan menggunakan getValue()dalam \Magento\Framework\App\Config\ScopeConfigInterfacetetapi saya tidak bisa melihat cara bagaimana menggunakan ini di dalam tema. Sejauh ini saya telah menambahkan ini ke default.xml

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

tapi saya tidak tahu bagaimana cara memasukkan nomor telepon di dalamnya phone.phtml

Jawaban:


13

Saya sarankan Anda membuat blok Anda sendiri, yang akan memperluas Magento\Framework\View\Element\Templatekelas.

Saat Magento\Framework\App\Config\ScopeConfigInterfacebagian dari Magento\Framework\View\Element\AbstractBlock(induk dari Templatekelas) dideklarasikan $_scopeConfig, Anda dapat menambahkan fungsi berikut ke blok khusus Anda:

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

Kemudian dalam template Anda, Anda dapat melakukan:

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

Jangan lupa memperbarui tata letak Anda seperti ini:

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

Harus membuat modul untuk bekerja dengan tema sepertinya bukan cara yang sangat elegan untuk melakukannya (walaupun sepertinya itu satu-satunya cara). Tentunya ini akan menyebabkan masalah bagi pengembang tema yang menerbitkan tema
— Alex

@Alex ya menggunakan object manager secara langsung jelas lebih mudah tetapi tidak disarankan untuk menggunakannya secara langsung. Jadi ada dua opsi, cepat dan kotor atau lambat dan bersih ^^
— Raphael di Digital Pianism

Pengembang @Alex Theme selalu mengirimkan tema mereka dengan modul khusus tema dan saya tidak tahu masalah apa pun. Ini sebenarnya adalah solusi yang elegan. Memiliki banyak kode PHP dalam templat tidak.
— Fabian Schmengler

6

Kami dapat langsung mendapatkan konfigurasi toko di template dengan mendapatkan instance dari Magento\Framework\App\Config\ScopeConfig:

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

Secara teknis, ketika seseorang meminta instance Magento\Framework\App\Config\ScopeConfigInterface, kami akan memberikan instance dari Magento\Framework\App\Config\ScopeConfig. Misalnya, kita bisa mendapatkan pengaturan default untuk mode kisi atau daftar:

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

Catatan: Menghindari Menggunakan Object Manager secara langsung . Kita harus menjaga templat kita tetap bersih. Coba tambahkan config ke blok. Harus mengikuti jawaban @Raphael.


Terima kasih atas jawabannya, ini berfungsi untuk katalog / frontend / list_mode seperti pada contoh Anda tetapi mengembalikan null untuk umum / store_information / phone
— Alex

Apakah Anda menetapkan nomor telepon untuk toko Anda? Saya bisa mendapatkan nomor telepon toko:\Magento\Framework\App\ObjectManager::getInstance() ->get('Magento\Framework\App\Config\ScopeConfigInterface') ->getValue('general/store_information/phone');
— Khoa TruongDinh

Yeh I menambahkan di Toko> Konfigurasi> Umum> Umum> Informasi Toko. Mencoba nilai default dan untuk situs web / toko
— Alex

Coba indeks ulang dan hapus cache.
— Khoa TruongDinh

Saya mendapatkannya menarik nomor telepon default sekarang tetapi mengabaikan satu set di konfigurasi toko / situs web. Sudahkah Anda mencoba ini?
— Alex

2

Coba ini di Block, ini berfungsi untuk saya setelah banyak pencarian

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.