ich habe vorhin das Update auf 5.2.2 gemacht, und seid dem werden mir globale Variablen nur noch auf den Checkoutseiten zur Verfügung gestellt. Ist hier etwas bekannt?
Unten ist der Code, der bis vorhin noch Einwandfrei funktioniert hat. Angezeigt wird es nur auf den Artikeldetailseiten und Kassenseiten!
?php
/**
* Global Vars Plugin
*/
class Shopware_Plugins_Frontend_Data_Bootstrap extends Shopware_Components_Plugin_Bootstrap
{
/**
* Install plugin method
*
* @return bool
*/
public function install()
{
$this->subscribeEvents();
return true;
}
private function subscribeEvents()
{
$this->subscribeEvent(
'Enlight_Controller_Action_PostDispatchSecure_Frontend',
'onPostDispatch'
);
}
/**
* @return array
*/
public function getInfo()
{
return array(
'label' => $this->getLabel()
);
}
/**
* @return string
*/
public function getLabel()
{
return 'Data';
}
/**
* Event listener method
*
* @param Enlight_Controller_ActionEventArgs $args
*/
public function onPostDispatch(Enlight_Controller_ActionEventArgs $args)
{
$view = $args->getSubject()->View();
$dataID = 123;
$view->assign('plugin_data_data', $dataID);
}
}
Also die Methode wird ja scheinbar nur auf der Artikeldetailseite und im eingeloggten Zustand auf den Checkoutseiten angezeigt. Auf allen anderen Seiten erscheint die Variabel nicht im Smartydebugger.
Im $args = Enlight_Controller_ActionEventArgs Object
im $args->view() = Shopware_Proxies_ShopwareControllersFrontendDetailProxy
Aber ich komme einfach nicht dahinter, wieso das Plugin sonst nicht ausgeführt wird. Ich habe es vom Advancedmenu abgeleitet, da hier ja auch die Varibale $advancedMenu überall verfügbar ist.
Dafür brauchst du auf jeden Fall ein Action Widget - eine einfache Variable reicht da nicht. Schau dir mal diesen Beitrag an: Understanding the Shopware HTTP Cache
Naja dort wird ja nur erklärt, wie der Chache funktioniert. Verstanden habe ich nun dass ich en Widget brauch, welches vom Chache ausgeschlossen wird, und ich dann jedes mal im Template aufrufen muss, um an die Live-Informationen zu kommen.
irgendwie komme ich nicht weiter. Ich habe bis nun folgendes:
class Shopware_Plugins_Frontend_SwagController_Bootstrap extends Shopware_Components_Plugin_Bootstrap
{
public function getVersion()
{
$info = json_decode(file_get_contents( __DIR__. DIRECTORY_SEPARATOR .'plugin.json'), true);
if ($info) {
return $info['currentVersion'];
} else {
throw new Exception('The plugin has an invalid version file.');
}
}
public function getLabel()
{
return 'SwagController';
}
public function uninstall()
{
return true;
}
public function update($oldVersion)
{
return true;
}
public function install()
{
$this->registerController('Frontend', 'SwagControllerTest');
return true;
}
}
Front()->Plugins()->ViewRenderer()->setNoRender();
$userdata = Shopware()->Modules()->Admin()->sGetUserData();
$eingeloggt = Shopware()->Modules()->Admin()->sCheckUser();
$this->View()->assign('plugin_benutzerDaten_userData', $userdata);
$this->View()->assign('plugin_benutzerDaten_userEingeloggt', $eingeloggt);
}
}
{* Extend the base template to get the header, navbar etc *}
{extends file="parent:frontend/index/index.tpl"}
{debug}
Wenn ich nun die URL /SwagControllerTest aufrufe bekomme ich die zwei gewünschte Variabeln geliefert, solange ich das parsen des Templates nicht verbiete aber wie bekomme ich dieses nun bei jedem Aufruf generiert?
So wie ich es Verstanden habe, werden nur dem selbst zu zugewiesenen Template die Variablen zugewiesen, ich würde aber gerne die Variablen dem Block zur Verfügung stellen, in dem ich sie gerade brauche!
Irgendwo hab ich noch nen Denkfehler sowei scheinbar ein Verständnisproblem. Könnt ihr mir nochmal helfen?
Nein, der Ansatz ist IMO falsch. Lies Dir bitte das Thema HTTP Cache durch, dann wird es Dir klar.
Der Action-Controller ist sowas wie ein kleines Artefakt, dass neben dem gecachten Content geladen wird. Hat ein bisschen Ähnlichkeit mit dem AJAX Prinzip - ok, vielleicht weit hergeholt, aber mich erinnert es daran.
D.h.: Du baust einen Controller + Template in Deinem Plugin und der Output dieses Templates wird dann im Haupt-Template automatisch an der Stelle des {action…} Aufrufs ausgegeben. Eine sehr elegante Lösung, da Du dieses Plugin-Template z.B. im Haupttemplate wieder überladen könntest etc. pp.
Sobal ich aber ein Template nur erweitern oder etwas an einen vorhanden Block anhängen will läd er ewig und die Seite bleibt weiß.
Dabei fällt mir im Firebug aber auf das hierfür keine eigener Aufruf gestartet wird wie bei einem Ajax aufruf, das passiert wahrscheinlich dann im Hintergrund beim laden der Seite.
Für mich stellt es nur als Problem da, da ich diese Information ja je nach Stelle wo ich sie benötige in den Templates brauche. Ich finde aber dafür auch einfach keine Bespiele, weder in den Shopware Templates und Plugins, noch irgendwo im Netz.
Ich habe auch noch nicht herrausgefunden, wie ich in meiner SwagControllerTest.php auf eine andere Funktion zugreifen kann. Meiner derzeitigen Logik nach, ja mit action=myFunction, dann läd er aber die Seite nicht mehr.
Genauso wenig verstehe, wie das dann das Feld name= geht. Also umgesetzt wird es wahrscheinlich wie so ein Get-Aufruf
Nein, es ist ja kein AJAX Call… Ich habe das nur aufs Prinzip bezogen. Diese Inklusion passiert natürlich komplett serverseitig. Nur holt er sich alle Daten aus dem HTTP Cache - außer die ESI Module - für die startet er einen eigenen Request an den Shopware Core.
__________________________________________________
Konnte ich Dir helfen? Dann freue ich mich über ein Danke
Das System habe ich ja nun verstanden. Wie steht es zu der Frage um den Aufruf? --> Ok mein Fehler, sollte vlt mal geauer lesen… muss der function natürlich nen Action mit geben -_-