Zugriff auf Artikeldetail

Hallo an alle, ich möchte gerne in einem Plugin auf die Artikeldaten zugreifen, wenn ich im Detailbereich bin. Kann mir jemand sagen, wie ich z.B. auf die Artikelnummer zugreife? Ich habe es so gemacht: ‚Enlight_Controller_Action_PostDispatch_Frontend_Detail‘,‚onPostDispatch‘ In „onPostDispatch“ möchte ich nun auf Artikelnummer, Lagerbestand usw. zugreifen und ggf. verändern. Danke und Gruß Reload

Mache mal $request = $args-\>getSubject()-\>Request(); $response = $args-\>getSubject()-\>Response(); $view = $args-\>getSubject()-\>View(); Mit var_dump($view); kannst du dir den Inhalt der Arrays ausgeben lassen.

Hallo Ottscho, ich habe folgendes gemacht: $request = $args->getSubject()->Request(); $response = $args->getSubject()->Response(); $view = $args->getSubject()->View(); var_dump($view->ordernumber); Es kommt leider nur „NULL“ als Ergebnis. Kannst du mir sagen, wo der Fehler liegt? Gruß Reload

mache doch erst mal var_dump($view); Dann sieht du alle verfügbaren Werte.

Hallo Ottscho, hab ich doch gemacht. Ich hab dann nach der Artikelnummer gesucht und bin dann auf die Idee gekommen, odernumer zu nehmen. Ich hänge mal den Dump an (Die Artikelnummer ist „B7000391220116“: Gruß Reload object(Enlight_View_ViewDefault)#194 (4) { [„engine“:protected]=> object(Enlight_Template_TemplateManager)#206 (75) { [„helper_manager“]=> object(Enlight_Helper_HelperManager)#207 (3) { [„template_manager“:protected]=> *RECURSION* ["_helper_list":protected]=> array(0) { } ["_helper_dir":protected]=> array(1) { [„Enlight_Helper_“]=> string(39) „/var/www/engine/Enlight/Enlight/Helper/“ } } [„block_manager“]=> NULL [„template_old“]=> bool(false) [„default_resource_type“]=> string(7) „extends“ [„ignore_namespace“]=> bool(false) [„auto_literal“]=> bool(true) [„error_unassigned“]=> bool(false) [„template_dir“]=> array(3) { [0]=> string(23) „/var/www/templates/ebb/“ [1]=> string(26) „/var/www/templates/_local/“ [2]=> string(28) „/var/www/templates/_default/“ } [„default_template_handler_func“]=> NULL [„compile_dir“]=> string(25) „/var/www/cache/templates/“ [„plugins_dir“]=> array(3) { [0]=> string(63) „/var/www/engine/Shopware/Plugins/Default/Core/Template/plugins/“ [1]=> string(49) „/var/www/engine/Enlight/Enlight/Template/Plugins/“ [2]=> string(51) „/var/www/engine/Enlight/Vendor/Smarty/libs/plugins/“ } [„cache_dir“]=> string(25) „/var/www/cache/templates/“ [„config_dir“]=> string(10) „./configs/“ [„force_compile“]=> bool(false) [„compile_check“]=> bool(true) [„compile_locking“]=> bool(true) [„use_sub_dirs“]=> bool(false) [„compile_error“]=> bool(false) [„caching“]=> bool(false) [„merge_compiled_includes“]=> bool(false) [„cache_lifetime“]=> int(3600) [„force_cache“]=> bool(false) [„cache_id“]=> NULL [„compile_id“]=> string(21) „templates_ebb_de_DE_1“ [„left_delimiter“]=> string(1) „{“ [„right_delimiter“]=> string(1) „}“ [„security_class“]=> string(15) „Smarty_Security“ [„php_handling“]=> int(0) [„allow_php_tag“]=> bool(true) [„allow_php_templates“]=> bool(false) [„security“]=> bool(false) [„security_policy“]=> NULL [„security_handler“]=> NULL [„direct_access_security“]=> bool(true) [„trusted_dir“]=> array(0) { } [„debugging“]=> bool(true) [„debugging_ctrl“]=> string(4) „NONE“ [„smarty_debug_id“]=> string(12) „SMARTY_DEBUG“ [„debug_tpl“]=> string(52) „/var/www/engine/Enlight/Vendor/Smarty/libs/debug.tpl“ [„error_reporting“]=> NULL [„config_overwrite“]=> bool(true) [„config_booleanize“]=> bool(true) [„config_read_hidden“]=> bool(true) [„config_vars“]=> array(0) { } [„tpl_vars“]=> array(0) { } [„global_tpl_vars“]=> array(2) { [„SCRIPT_NAME“]=> object(Smarty_Variable)#205 (3) { [„value“]=> string(13) „/shopware.php“ [„nocache“]=> bool(false) [„scope“]=> int(0) } [„this“]=> object(Smarty_Variable)#204 (3) { [„value“]=> object(Enlight_Helper_HelperManager)#207 (3) { [„template_manager“:protected]=> *RECURSION* ["_helper_list":protected]=> array(0) { } ["_helper_dir":protected]=> array(1) { [„Enlight_Helper_“]=> string(39) „/var/www/engine/Enlight/Enlight/Helper/“ } } [„nocache“]=> bool(false) [„scope“]=> int(0) } } [„parent“]=> NULL [„template_functions“]=> array(0) { } [„caching_type“]=> string(4) „file“ [„cache_resource_types“]=> array(1) { [0]=> string(4) „file“ } [„cache_resource_objects“]=> array(0) { } [„properties“]=> array(0) { } [„default_config_type“]=> string(4) „file“ [„template_objects“]=> array(1) { [1716234320]=> object(Enlight_Template_Template)#195 (44) { [„compiler_object“]=> NULL [„cacher_object“]=> NULL [„cache_id“]=> NULL [„compile_id“]=> string(21) „templates_ebb_de_DE_1“ [„caching“]=> bool(false) [„cache_lifetime“]=> int(3600) [„cacher_class“]=> NULL [„caching_type“]=> NULL [„force_compile“]=> bool(false) [„forceNocache“]=> bool(false) [„template_resource“]=> string(25) „frontend/detail/index.tpl“ [„resource_type“]=> string(7) „extends“ [„resource_name“]=> string(25) „frontend/detail/index.tpl“ [„resource_object“]=> object(Enlight_Template_TemplateResource)#191 (9) { [„compiler_class“]=> string(38) „Smarty_Internal_SmartyTemplateCompiler“ [„template_lexer_class“]=> string(29) „Smarty_Internal_Templatelexer“ [„template_parser_class“]=> string(30) „Smarty_Internal_Templateparser“ [„usesCompiler“]=> bool(true) [„isEvaluated“]=> bool(false) [„allFilepaths“]=> array(0) { } [„smarty“]=> *RECURSION* ["_rdl"]=> string(2) „}“ ["_ldl"]=> string(2) „{“ } [„isExisting“:„Smarty_Internal_Template“:private]=> NULL [„templateUid“]=> string(0) „“ [„template_filepath“]=> NULL [„template_source“]=> NULL [„template_timestamp“:„Smarty_Internal_Template“:private]=> NULL [„compiled_filepath“:„Smarty_Internal_Template“:private]=> NULL [„compiled_template“]=> NULL [„compiled_timestamp“:„Smarty_Internal_Template“:private]=> NULL [„mustCompile“]=> NULL [„suppressHeader“]=> bool(false) [„suppressFileDependency“]=> bool(false) [„has_nocache_code“]=> bool(false) [„rendered_content“]=> NULL [„cached_filepath“:„Smarty_Internal_Template“:private]=> NULL [„cached_timestamp“]=> NULL [„isCached“:„Smarty_Internal_Template“:private]=> bool(false) [„cache_resource_object“:„Smarty_Internal_Template“:private]=> NULL [„cacheFileChecked“:„Smarty_Internal_Template“:private]=> bool(false) [„tpl_vars“]=> array(1) { [„smarty“]=> object(Smarty_Variable)#192 (3) { [„value“]=> NULL [„nocache“]=> bool(false) [„scope“]=> int(0) } } [„parent“]=> object(Smarty_Data)#193 (5) { [„tpl_vars“]=> array(8) { [„sAction“]=> object(Smarty_Variable)#196 (3) { [„value“]=> string(5) „index“ [„nocache“]=> bool(true) [„scope“]=> NULL } [„sErrorFlag“]=> object(Smarty_Variable)#190 (3) { [„value“]=> array(0) { } [„nocache“]=> bool(true) [„scope“]=> NULL } [„sFormData“]=> object(Smarty_Variable)#189 (3) { [„value“]=> array(0) { } [„nocache“]=> bool(true) [„scope“]=> NULL } [„sInquiry“]=> object(Smarty_Variable)#174 (3) { [„value“]=> string(69) „http://www.shopware.vm/fragen-zum-artikel?sOrdernumber=B7000391220116“ [„nocache“]=> bool(false) [„scope“]=> NULL } [„sBreadcrumb“]=> object(Smarty_Variable)#173 (3) { [„value“]=> array(4) { [0]=> array(2) { [„link“]=> string(41) „shopware.php?sViewport=cat&sCategory=2185“ [„name“]=> string(5) „TERRA“ } [1]=> array(2) { [„link“]=> string(41) „shopware.php?sViewport=cat&sCategory=2243“ [„name“]=> string(14) „TERRA Notebook“ } [2]=> array(2) { [„link“]=> string(41) „shopware.php?sViewport=cat&sCategory=2244“ [„name“]=> string(12) „TERRA Mobile“ } [3]=> array(2) { [„link“]=> string(58) „shopware.php?sViewport=detail&sArticle=1178&sCategory=2244“ [„name“]=> string(11) „Testartikel“ } } [„nocache“]=> bool(false) [„scope“]=> NULL } [„sCategoryInfo“]=> object(Smarty_Variable)#172 (3) { [„value“]=> array(2) { [„link“]=> string(41) „shopware.php?sViewport=cat&sCategory=2244“ [„name“]=> string(12) „TERRA Mobile“ } [„nocache“]=> bool(false) [„scope“]=> NULL } [„sArticle“]=> object(Smarty_Variable)#171 (3) { [„value“]=> array(81) { [„articleID“]=> string(4) „1178“ [„articleDetailsID“]=> string(4) „1279“ [„ordernumber“]=> string(14) „B7000391220116“ [„datum“]=> string(10) „2011-07-14“ [„additionaltext“]=> string(0) „“ [„shippingtime“]=> string(1) „0“ [„shippingfree“]=> string(1) „0“ [„instock“]=> string(2) „10“ [„minpurchase“]=> int(1) [„notification“]=> string(1) „0“ [„purchasesteps“]=> int(1) [„maxpurchase“]=> string(3) „100“ [„referenceunit“]=> string(1) „0“ [„packunit“]=> string(0) „“ [„weight“]=> string(1) „5“ [„laststock“]=> string(1) „1“ [„unitID“]=> string(1) „0“ [„template“]=> string(0) „“ [„pricegroupID“]=> string(1) „1“ [„pricegroupActive“]=> string(1) „0“ [„releasedate“]=> string(10) „0000-00-00“ [„mode“]=> string(1) „0“ [„description“]=> string(110) „Professionales Business Notebook mit Non Glare Panel und USB3,0! 24 Monate Garantie incl. Pickup TERRA MOBILE“ [„keywords“]=> string(0) „“ [„description_long“]=> string(10341) "

dann nimm: $view->sArticle[‚ordernumber‘] die sArticle ist die gleiche Variabel wie du beim Tempalting in den TPL Dateien verwendest.

Hallo Ottscho, super und vielen Dank. So hat es funktioniert. Kannst du mir auch sagen, ob ich damit zB. die Menge verändern kann, bevor sie im Detail-Bereich angezeigt wird? Ich bin mal so unverschämt und frag dich auch mal, ob du mir hier auch weiterhelfen kannst: post31210.html#p31210 Gruß und Dank Reload

welche Menge meinst du den? Die auf Lager? $view->sArticle[‚instock‘] aber was bringt dir das?

Hallo Otscho, ja, ich meine $view->sArticle[‘instock’]. Der Hintergrund ist der, das ich in Echtzeit die Bestände bei meinen Lieferanten abrufen möchte, um diese dann zu benutzen. Hab auch schon versucht mal testweise zu überschreiben. Das Überschreiben hat auch geklappt. Hab den Bestand mal auf 0 gesetzt um zu testen, ob er den Artikel dann noch zum Verkauf anbietet. Da es ein Abverkaufsartikel ist, hätte kein Einkauf möglich sein sollen. Leider konnte man ihn immer noch kaufen. Ich denke mal, ich muss den Bestand dann wohl in der Artikelstamm-Datei ändern, oder? Gruß Reload

Diese Logik wird ja nicht im Template überprüft sondern viel früher. Sprich du änderst den INSTOCK auf z.B. 0 und gibts dies zum Template weiter. Darum fragte ich auch, warum! Da du mit der Änderung nichts bewirkst…

Hallo Ottscho, ach so… Das heißt, ich bin hier auf dem falschen Dampfer. Wo müsste ich den ansetzen, um das zu realisieren, was ich möchte? Gruß Reload

Wenn du noch mal genau beschreibst was du willst, versuche ich dir zu helfen.

Ich möchte bei einigen Artikel nicht die Shopware-Bestände verwenden, sondern die meines Lieferanten. Ich frage also per PHP den aktuellen Lagerbestand ab. Soweit hab ich es jetzt dank deiner Hilfe auch auf die Reihe bekommen. (Wohl nur an der falschen stelle). Wenn ein Kunde durch den Shop stöbert und auf die Detailansicht eines Artikel klickt, soll in Abhängigkeit vom Lagerbestand des Lieferanten eine Verfügbarkeit angezeigt werden oder eben nicht. Ich hoffe ich hab es so beschrieben, das es verständlich ist. Gruß Relod

ja gut, dann stimmt der Weg eig. schon. Du fragst deinen Lieferanten ab und bekommt X Menge auf Lager zurück. Diese Menge gibts du an Smarty/Template weiter. z.B. unter sArticle[‘supplierInstock’] $view->sArticle[‘supplierInstock’] = $deineMenge; Nun bearbeitest du das Artikeldetail Template. Wenn sArticle[‘supplierInstock’] > 0 //Ariktel beim Lieferant auf Lager Wenn sArticle[‘supplierInstock’] == 0 //Ariktel nicht auf Lager Es würde ja schon reichen, wenn du den Warenkorbbutton auf inaktiv setzt und einen Infotext erscheinen lässt “Artikel nicht auf Lager”. Möglichkeiten gibt es ja viele…

Hallo Ottscho, genau so möchte ich es gern machen. Bin allerdings ein Neuling im Bereich PHP und Template. Vielleicht könntest du mit etwas Code erklären, wie ich das Artikeldetail Template bearbeitet könnten oder den Warenkorbbutton inaktiviere. Könntest du auch netter weise mal ein Blick auf dieses Problem werfen? post31210.html#p31210 Oder hast du es vielleicht schon gemacht? Ich komme da nicht wirklich weiter und es fehlt nur noch ein kleiner Schubs, glaub ich. Gruß Reload PS. Wenn genügend Bestand da sein sollte, wäre es natürlich wünschenswert das der Kunden nicht mehr bestellt als vorhanden ist. Ich müsste dass also irgendwie bei der Mengenauswahl mit berücksichtigen.

Wäre es eig. nicht sinnvoller den Bestand des Herstellers direkt im Artikelstamm zu pflegen/updaten? Die gewünschten Funktionen Mit Abverkauf oder das nur die gewünschte Menge gekauft werden kann bringt ja Shopware schon mit. Aber natürlich nur im Bezug auf die Lagermenge in Shopware. Du könntest doch 2 Mal am Tag die Lagermenge von deinem Hersteller in deinem Shop updaten.

Hallo Ottscho, so hab ich es z.Zt realisiert. Aber ich denke, wenn ich eine Verfügbarkeit anzeige, dann sollte sie auch möglichst gewährleistet sein. Ich ärgre mich beim Online-Einkauf auch öfter darüber, das Verfügbar angezeigt wird, es aber dann doch länger dauern soll, weil die Ware nicht vorrätig ist. Klar kann man nicht zu 100% garantieren, das alles da ist, aber es ist doch vielleicht etwas genauer. Ich hab vielleicht noch eine Info für Dich. Gestern kämpfte ich mit dem Fehler: Fatal error: Call to a member function getConfig() on a non-object in /var/www/engine/Shopware/Components/Plugin/Bootstrap.php on line 182 Ich hab es nach langen ausprobieren in den Griff bekommen, aber logisch erklären kann ich es nicht. Hier die Zeilen, die den Fehler verursacht haben: $instance = Enlight_Class::Instance(__CLASS__); $request = $args->getSubject()->Request(); $response = $args->getSubject()->Response(); $view = $args->getSubject()->View(); if(!$request->isDispatched()||$response->isException()||$request->getModuleName()!=‚frontend‘){ return; } $config = Shopware()->Plugins()->Frontend()->getWortmannStock()->Config(); Wenn ich die Zeile „$instance = Enlight_Class::Instance(__CLASS__);“ hinter die Config-Anweisung setze, dann funktioniert es. Hab gesehen, das du auch mal damit gekämpft hast und ich glaube ich war so frei die Variante mit $instance von Dir zu übernehmen. Wäre schön, wenn ich Dir da auch helfen könnte. Gruß Reload

Danke, auf die Lösung bin ich auch schon gekommen. Das liegt an der Instanz. Daher muss dies erst gemacht werden, nachdem die Config geladen wurde :wink: