Block
<?php
namespace Vendor\Module\Block;
class CustomerLink extends \Magento\Framework\View\Element\Template
{
protected $_customersession;
public function __construct(
\Magento\Framework\View\Element\Template\Context $context,
\Magento\Customer\Model\Session $session
) {
parent::__construct($context);
$this->_customersession=$session;
}
public function sessionCheck()
{
return $this->_customersession->isLoggedIn();
}
}
Vorlage
<?php
if($block->sessionCheck())
{
echo 'logged in';
}
else
{
echo 'logged out';
}
?>
Es funktioniert nur auf der Kundenseite und der Checkout- / Warenkorbseite . Die verbleibende Seite gibt false zurück, selbst wenn der Kunde angemeldet ist.
Deshalb habe ich mich entschlossen, \Magento\Framework\App\Http\Context $httpContext
diesen booleschen Rückgabewert auf der gesamten Website zu verwenden, aber wie man Kundendaten verwendet httpContext
.
Warum funktioniert \ Magento \ Customer \ Model \ Session nur auf der Kundenseite?
Hinweis: Alle Caches befinden sich im Aktivierungsmodus.
quelle
$this->$_isScopePrivate = true
, habe ich diesen Code auf __construct hinzugefügt, aber diesen Fehler erhalten PHP Schwerwiegender Fehler: Kannst du nicht auf leere Eigenschaften zugreifen$this->_isScopePrivate = true;
?$this->_isScopePrivate
. Beachten Sie, dass diese Variable veraltet ist und nicht verwendet werden sollte. Stattdessen sollten alle Blöcke zwischengespeichert werden und das dokumentierte Verfahren für privaten Inhalt sollte befolgt werden, um sitzungsspezifische Daten zu Seiten hinzuzufügenDies scheint kein Problem zu sein, da Magento 2 den Sitzungsspeicher für zwischenspeicherbare Anforderungen bereinigt, um das Zwischenspeichern von privaten Kundeninhalten zu vermeiden. Kurz gesagt, Sie sollten nicht auf die Sitzungsdaten des Kunden zugreifen, während Sie die GET-Anforderung verarbeiten, mit der die zwischengespeicherte Seite gerendert werden soll.
Ich würde auch nicht empfehlen, den Cache für die gesamte Seite über das Layout-Update zu deaktivieren, um dies zu umgehen.
Magento 2 bietet einen speziellen Ansatz für die Arbeit mit privaten Inhalten eines Kunden. Weitere Informationen finden Sie im Abschnitt Magento DevDocs: Privater Inhalt .
quelle