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

Alex
sumber

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>
Raphael di Digital Pianism
sumber
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.

Khoa TruongDinh
sumber
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');

Maaraa
sumber