Bagaimana menemukan apakah pelanggan masuk atau tidak di Magento 2.
Jika pelanggan login, lalu bagaimana cara mendapatkan data pelanggan dari sesi?
magento2
customer
login
customer-account
customer-session
Rakesh Jesadiya
sumber
sumber
text/x-magento-init
), maka Anda dapat menyimpan beberapa overhead dengan menghindari instantiation ObjectManager dan meneruskan status ke objek konfigurasi modul, dan sebagai gantinya meminta tautan login dari dalam modul JS, misalnya:var isLoggedIn = $('.authorization-link > a').attr('href').indexOf('/login')<0;
Jawaban:
Kode berikut Anda dapat memeriksa login pelanggan atau tidak di mana pun
Dari pengontrol
sumber
Pengingat penting: Seseorang seharusnya tidak pernah memanggil Object Manager secara langsung
Jadi, inilah cara melakukannya dengan cara yang bersih
Di kelas mana pun kecuali template
Anda pertama-tama harus menyuntikkan kelas berikut di konstruktor Anda
/Magento/Customer/Model/Session
::Kemudian di kelas Anda, Anda dapat memanggil yang berikut:
Dalam sebuah templat
Ini membutuhkan sedikit lebih banyak pekerjaan dalam templat karena Anda harus menyiapkan preferensi untuk blok yang membuat templat untuk melakukannya dengan cara yang bersih:
Kemudian di contrusctor blok khusus Anda, Anda perlu mengikuti injeksi dependensi yang sama seperti untuk kelas apa pun (dijelaskan di atas).
Langkah ekstra di sini adalah membuat metode publik yang dapat digunakan dalam templat Anda untuk memeriksa apakah pelanggan masuk atau tidak
Kemudian dalam templat Anda, Anda dapat menghubungi:
Alternatif jika sesi pelanggan belum diinisialisasi
Ada cara lain untuk melakukannya yang menyiratkan menggunakan
Magento\Framework\App\Http\Context
bukanMagento/Customer/Model/Session
Kemudian Anda dapat menelepon
$this->_context->getValue(\Magento\Customer\Model\Context::CONTEXT_AUTH)
alih-alih$this->_session->isLoggedIn()
untuk memeriksa apakah pelanggan masuk atau tidak.Namun metode ini dapat memberi Anda hasil yang berbeda , saya sarankan Anda membaca jawaban yang bagus ini untuk informasi lebih lanjut: https://magento.stackexchange.com/a/92133/2380
sumber
<preference ... />
tag harus ditempatkan di dalam tema khusus? Apa sebenarnyaBlock\That\Renders\The\Template
dan apaVendor\Module\Block\Your\Custom\Block
?class Html extends \Magento\Framework\View\Element\Template
tempat saya dapat menyuntikkan objek sesi di konstruktor. Saya menggunakan blok ini dalam tema kustom saya dengan cara ini (dari file layout xml):<block class="Vendor\ThemeName\Block\Html" template="Vendor_ModuleName::html/my-custom-template.phtml"/>
. Saya ingin memeriksa pengguna yang dicatat dalam file templatmy-custom-template.phtml
. Bagaimana saya harus menggunakan tag `<preferensi ... />?Dimungkinkan melalui
Magento\Framework\App\Http\Context
atau melaluiMagento\Customer\Model\Session
. Namun, hasilnya mungkin berbeda:PageCache
modul aktif (mungkin selalu pada produksi), perlu diingat bahwa segera setelah pembuatan tata letak dimulai, sesi pelanggan akan dihapus\Magento\PageCache\Model\Layout\DepersonalizePlugin::afterGenerateXml
pada semua halaman yang dapat di-cache. Ini berarti bahwa jika Anda sekarang memeriksa apakah pelanggan masuk melalui konteks HTTP, itu masih akan mengatakan 'ya', tetapi data pelanggan tidak akan tersedia dalam sesi pelanggan lagi. Jadi periksa ulang diperlukan sebelum mencoba mengakses data di sesi pelanggan. Ini dapat dengan mudah terjadi di blok, sementara tidak mungkin dalam kontroler tindakan karena Anda tidak diharapkan untuk menghasilkan tata letak secara manual di sana, itu akan dihasilkan setelah kontroler aksi mengembalikan instance dariResultInterface
Untuk menghilangkan risiko inkonsistensi yang dijelaskan saat PageCache aktif, pertimbangkan untuk menggunakan sesi pelanggan, jika sudah diinisialisasi (berlaku untuk pengendali tindakan). Lain menggunakan konteks HTTP.
sumber
sumber
Tidak ada solusi yang berhasil untuk saya. Beberapa halaman tampaknya masuk tetapi yang lain tidak. Sepertinya ini adalah bug:
https://github.com/magento/magento2/issues/3294
Saya akhirnya membuat pembantu yang bisa saya panggil di templat saya:
Lalu saya bisa menggunakan helper di templat saya seperti:
sumber
->getCustomer()->getName()
menggunakan konteks, karena Jika saya menggunakan Sesi tidak berfungsi untuk semua halaman.Untuk membuat pengguna masuk di templat, Anda cukup memanggil pembantu hanya dalam satu baris:
sumber
Tidak ada solusi di sini yang bekerja untuk saya dengan andal di Magento v2.1 dengan Cache Halaman Penuh dan Varnish diaktifkan dalam mode Produksi. Saya akhirnya menemukan solusi yang bekerja 100% dari semua waktu dengan semua caching diaktifkan setelah mendapatkan ide dari
vendor/magento/module-theme/view/frontend/templates/html/header.phtml
. Ini solusi saya, yang memperlihatkan tautan "Masuk" saat pengguna keluar dan tautan "Keluar" saat pengguna masuk:PEMBARUAN: Sejak v2.1.5 solusi ini tidak lagi dapat diandalkan. Lihat masalah 9156 untuk solusinya.
sumber
cachable="false"
tata letak XML untuk blok ini, tetapi pernis masih caching rupanya. Tidak yakin apakah ini bug atau tidak, tetapi Knockout adalah cara yang baik untuk menghindari hal ini. Satu-satunya downside adalah bahwa ada sedikit keterlambatan sebelum tautan Masuk / Keluar muncul karena pengikatan KO.Ada banyak jawaban di luar sana yang seperti ini ...
DAPATKAN MODEL LOAD UP MODEL MANAGER OLEH DOU STUFF
Ini adalah metodologi yang SALAH untuk digunakan di Magento2.0. Pada 2.0, pabrik objek yang dibuat secara otomatis adalah cara untuk pergi. Anda dapat menyuntikkannya ke konstruktor di hampir semua kelas dan menggunakannya. Contoh:
sumber
\Magento\Customer\Model\SessionFactory $sessionFactory
.Halo mendapat jawaban di sini:
Sumber .
Ganti get with create now berfungsi dengan baik:
sumber
ObjectManager
secara langsungIni juga salah satu solusi "Periksa apakah Pelanggan Masuk atau tidak di Magento2"
Coba kode di bawah ini:
sumber
Coba kode di bawah ini:
Untuk menggunakan kode di atas dalam file phtml, Anda dapat memanggil fungsi isLoggedIn () sebagai:
Semoga bantuan ini terimakasih.
sumber
Saya sudah mendapatkan solusi terbaik. Ini didasarkan pada otentikasi pelanggan . Beberapa sesi pelanggan kasus tidak berfungsi, tetapi setiap kali solusi saya akan berhasil. Mari lihat.
Terima kasih.
sumber
Solusi saat ini bekerja (IMHO)
sumber
Jika Anda ingin memeriksa pelanggan yang masuk atau tidak, gunakan kode ini dalam file phtml,
sumber
ObjectManager
secara langsung dan Anda tidak boleh menggunakan jenis kode ini dalam templat. Anda harus membuat fungsionalitas di kelas blok Anda untuk mengelola ini.sumber
Jawaban lain:
Bagaimana menurut anda?
sumber
Mengambil status yang dicatat dari model Sesi tidak akan berfungsi jika Anda ingin menggunakannya setelah mengaktifkan cache FPC default Magento, dalam hal ini, Anda harus menggunakan SessionFactory sebagai gantinya.
Sesi tidak dimulai jika caching FPC diaktifkan, detail: https://github.com/magento/magento2/issues/3294#issuecomment-328464943
Untuk mengatasi ini, Anda harus menggunakan
SessionFactory
, misalnya:sumber
Saya mencoba banyak cara yang ditemukan di google tetapi tidak ada solusinya bekerja. SO Saya memeriksa fungsionalitas inti dan membuat file php untuk memeriksa apakah pelanggan masuk atau tidak tanpa menggunakan Object Manager.
Untuk info lebih lanjut, periksa di sini http://blog.webtechnologycodes.com/customer-loggedin-check-magento2
sumber