Saya bekerja dengan ekstensi khusus yang terkait dengan beberapa situs web. Saya menghadapi masalah, menentukan eksekusi kode skrip di Panel Admin dengan mendapatkan Id Situs Web. Saya mengharapkan hasil website_id
seperti 0 (ID default dalam store_website
tabel). Tetapi ketika saya menggunakan fungsi ini di bawah selalu mengembalikan 1.
/** @var \Magento\Store\Model\StoreManagerInterface */
$this->_storeManager->getStore()->getWebsiteId(); //return 1, expect 0
$this->_storeManager->getWebsite()->getId(); //return 1
Pertanyaan Saya : Adakah cara untuk mendapatkan arus
website_id
di Panel Admin atau menentukan fungsi yang dijalankan diadminhtml
area?Catatan: Fungsi ini perlu bekerja di bagian depan dan belakang.
Bantuan apa pun akan dihargai.
Jawaban:
Gagasan umum adalah untuk melewatkan ruang lingkup, dipilih, melalui parameter permintaan.
Saya pikir Anda harus menggunakan kode yang sama seperti dalam tindakan edit produk:
Dalam hal ini
$store->getWebsiteId()
harus merupakan id situs web yang sebenarnya (dipilih). Tapi ini bisa dilakukan hanya jika Anda menggunakan blok toko yang bekerja dengan cara yang sama seperti blok magento standar (untuk memilih ruang lingkup toko):Ini adalah hasil saya dalam contoh ketika saya memilih tampilan store default (id == 1):
dan di sini adalah untuk cakupan global default ( Semua Tampilan Toko , id situs web adalah 0):
Memperbarui:
Anda dapat menambahkan metode seperti ini di helper dan menggunakannya di tempat yang Anda inginkan:
Hasilnya harus seperti ini:
Backend tanpa lingkup pemilih - 0
Didukung dengan lingkup pemilih - id situs web yang dipilih atau 0 jika tidak ada yang dipilih (Semua Tampilan Toko)
Frontend - id situs web saat ini
Jika Anda mencari jalan pintas di frontend:
Anda dapat menggunakan
Magento\Store\Model\StoreResolver
kelas untuk tujuan itu:Itu benar mendeteksi tampilan toko yang dipilih saat ini di area frontend, tetapi tidak berguna untuk area admin.
sumber
website_id = 0