hi, ich versuche gerade IRGENDWIE die preisanzeige zu verändern. ein kunde will dass bei konfigurator-artikeln nicht immer der niedrigste preis in den kategorien angezeigt wird weil die kunden sich angeblich beschweren würden dass der tatsächliche preis viel höher ist (obwohl da ganz klar “ab” steht). aber ok. im template wird der preis ja so ausgegeben: ab {$sArticle.price|currency}{s name="Star"}\*{/s}
und jetzt suche ich verzweifelt danach wo genau das Array $sArticle eigentlich erzeugt wird. offenbar sind da ja mehrere klassen und funktionen mit einigen tausend zeilen code dran beteiligt. ich denke mal dass die preise irgendwo in der sArticles.php zusammengebaut werden. aber immer wenn ich denke die betreffende stelle gefunden zu haben und dort zu testzwecken ein die; einbaue passiert einfach garnichts, was auf dauer sehr frustrierend ist. deshalb meine fragen an die community: hat jemand einen tipp wie ich das problem konkret am besten angehe? [update 1] da ich nicht davon ausgehe dass hier irgendjemand wirklich weiterhelfen kann/will (was kein vorwurf sein soll, ist ja auch ne schwere frage, und diese zu beantworten bringt außer mir keinem was) poste ich hier einfach rein was ich so rausfinde. so ist das ja vielleicht für manche ganz unterhaltsam. O_o [update 2] habe dazu noch diesen thread gefunden, in dem das problem allerdings nicht gelöst wird. allgemein-f25/varianten-ab-preise-t9143.html dort findet sich nur die aussage dass man das nicht einstellen kann. ja, das weiß ich selbst, deshalb durchsuche ich gerade auch ungefähr 135234234 php-dateien. habe auch den hinweis auf die funktion, die den günstigsten preis ermittelt, verfolgt. dabei handelt es sich ja offenbar um diese funktion public function sGetCheapestPrice($article,$group,$pricegroup,$usepricegroups,$realtime=false,$returnArrayIfConfigurator=false,$checkLiveshopping=false){
in zeile 2379 der sArticles.php. ich habe den wert, der am ende returned wird, testweise auf 666 gesetzt, das hatte allerdings keinerlei auswirkungen auf die anzeige im template, weshalb ich davon ausgehe dass diese funktion damit nix zu tun hat. [update 3] ok, ich glaube die richtige funktion ist die public function sGetArticlesByCategory ($id=0,$blog=false,$limit=0)
in zeile 690 der sArticles.php. ist zumindest bisher die einzige funktion bei der irgendwas passiert wenn ich dort was verändere. [update 4] so, offenbar hat es irgendwas mit dem sql-statement zu tun. zum glück ist das ja nur 91 zeilen lang
ok, hier die pragmatisch-hemdsärmelige und wahrscheinlich höchst unprofessionelle lösung. in der datei sArticles.php muss, ungefähr bei zeile 1371, vor return $result;
der folgende code eingefügt werden: $vi = 0; foreach($result['sArticles'] as $article) { if($article['sConfigurator'] == 1) { $sql = " SELECT `s_articles_groups_prices` .`price` FROM `s_articles_groups_value` INNER JOIN `s_articles_groups_prices` ON `s_articles_groups_prices` .`valueID` = `s_articles_groups_value` .`valueID` WHERE `s_articles_groups_prices`.`articleID` =".$article["articleID"]." AND `standard` =1 LIMIT 0 , 30"; $new\_price = $this-\>sSYSTEM-\>sDB\_CONNECTION-\>GetOne($sql); $new\_price = $this-\>sCalculatingPrice($new\_price,$article['tax']); $result['sArticles'][$vi]['price'] = $new\_price; } $vi++; }
anschließend wird in der kategorienansicht nicht mehr die günstigste variante angezeigt, sondern die vorausgewählte. falls also jemand irgendwann mal das gleiche problem haben wird, viel spaß mit der lösung. aber immer schön dran denken: das ganze ist nicht update-sicher und sowieso ohne garantie für irgendwas. grüße.