VM3 - product id in browse page anzeigen

  • Hallo zusammen,


    ich habe mir eine eigene view zur Produktdetailsanzeige erstellt. Es funktioniert auch alles soweit parallel zur view Productdetails. Nur die Übergabe der Produkt-ID klappt nicht. Die view rufe ich über die Startseite mittels diesem link auf:


    $mylink = JRoute::_ ('index.php?option=com_virtuemart&view=myproddetailview&virtuemart_product_id=' . $product->virtuemart_product_id . '&virtuemart_category_id=' . $product->virtuemart_category_id . '&tmpl=component', FALSE);



    Auf meiner default.php der eigenen view wird mir dann aber nicht das Produkt geliefert, welches in $mylink steht, sondern irgend ein zufälliges. Meistens das letzte aus einer featured Kategorie. Testweise habe ich $mylink auch mit &view=productdetails ausprobiert aber mit gleichem Ergebnis.


    Nun habe ich etliche Seiten durchforstet und bin auf eine ältere Lösung gestoßen: how to display product id in browse page?


    Die Struktur von VM hat sich seither aber sehr geändert. Ist solch eine Lösung auch in der aktuellsten VM Version 3.0.16 möglich?


    Ich nutze folgendes:
    VM 3.0.16
    Joomla 3.4.8
    PHP 5.6.14


    VG
    Michael

  • Ja leider brauche ich zwei. Die originale view productdetails benötige ich ganz normal für die Produkte der Startseite.
    Über einen Sofort kaufen Button verweise ich auf meine view, die in einer fancybox angezeigt wird. Diese Seite benötigt nur ein paar Angaben des Produkts..plus Zahlungsmöglichkeit.


    Die Anzeige des korrekten Produkts habe ich zu allererst mit der Standard-view eingerichtet und getestet. Auch hier ging beim Aufruf/ der Übergabe des Produkts zur view der Inhalt des links verloren und irgendein Produkt angezeigt. Im link selbst stimmt noch alles. Mit Sessions hatte ich bisher auch keinen Erfolg.
    Und da ich dann keine Möglichkeit fand, zusätzlich eine zweite php in der VM Shop Konfiguration als view einzutragen, habe ich die zweite view erstellt.
    Die Eintragung der product_id in eine url innerhalb einer shop.browse.php zur Übergabe an externe Seiten wäre eine optimale Lösung. Ich habe aber noch nicht herausgefunden, welche Datei(en) nun hierfür verantwortlich sind. order.php vlt?

  • Ok. Das für mich big grande problem konnte ich endlich endlich lösen:rolleyes::o
    mit $_COOKIE's. Normale $Sessions across my sites sind nicht möglich, aber cookies sind verfügbar.


    Mit onclick="setcookie(my_cookie, cProdPath, cProdName, cProdPrice, cProdID, cimg, expiredays, ....) sende ich meine benötigten Variablenwerte an die fancybox, welcghe meine eigene product detail page öffnet.


    In der fancybox setze ich zur Übergabe der Werte an externe Seiten die Funktion setCookie(cname..etc. :


    script type="text/javascript">
    function setCookie(cname, cProdPath, cProdName, cProdPrice, cProdID, cimg, expiredays)
    {
    .....
    document.cookie=cname+ "=" + "," + escape(cProdPath) + "," + escape(cProdName) + "," + .....usw.



    Den document.cookie string splitte ich manuell noch mit Kommas.
    Dann kann ich innerhalb meiner product detail page die Werte mit index iteration wieder auslesen:


    $cookie = explode(",", $_COOKIE['my_cookie']);
    $i=0;
    $myProduct = array('Prod');


    foreach($cookie as $index => $val)
    {
    $i ++;
    $k = explode(",", $val);
    $myProduct['Prod'][$i] = trim($k[0]);
    }
    echo 'Name: ' .$myProduct['Prod'][2]; // cProdName
    echo 'Price: ' .$myProduct['Prod'][3]; // cProdPrice
    echo 'ID: ' .$myProduct['Prod'][4]; // cProdID



    Das funktioniert soweit wunderbar. Ein Problem bleibt dennoch. Sobald die setcookie parameter Reihenfolge verändert würden, müssten auch alle indexes von $myProduct['Prod'][$i] in der detail page angepasst werden.


    Es gibt sicherlich eine elegantere Lösung (effizient code), z. Bsp. getElementByID oder ähnliches, wo ich direkt nach beispielsweise "cProdName" suchen und ausgeben kann. Aber meine ersten Tests funktionierten nicht mit der index iteration sondern gaben nur Zeile für Zeile alle Inhalte des Cookies aus und die Lösung dieses Problems hat mich bereits sehr lange aufgehalten. Deshalb bin ich damit erstmal zufrieden. The show must go on..


    Gruuuß :)
    Micha

  • Hallo,


    meinst Du damit $_Server['REQUEST_URI'] bzw. $_Server['QUERY_STRING'] ?
    Beide geben mir immer nur das letzte Produkt von 'Kürzlich betrachtete Produkte' zurück. Warum das so ist weiß ich nicht:(:confused:


    Wenn ich die Anzeige in der Shop Konf deaktiviere, dann bekomme ich sowas wie die höchste produkt id von den 'Neuesten Produkten'. Deaktiviere ich diese auch, erscheint ein Produkt von 'Aktionen z.Bsp. Meine ursprüngliche Frage war eigentlich, diesbezüglich die entsprechende Datei anzupassen. Das scheint mir aber zu tricky. Deshalb die Lösung mit setcookie.


    Es betrifft wie gesagt nur die Anzeige via fancybox. Rufe ich beide detail views ganz normal im Browser auf, dann ist alles ok. Die fancybox aber verwirft den user call und zeigt mir das letzte bekannte produkt oder so ähnlich an.

  • $mylink = JRoute::_ ('index.php?option=com_virtuemart&view=myproddetai lview&virtuemart_product_id=' . $product->virtuemart_product_id . '&virtuemart_category_id=' . $product->virtuemart_category_id . '&tmpl=component', FALSE);


    => $product_id = vRequest::getInt('virtuemart_product_id',false)

  • Das funktioniert leider nicht. Die Product_id ist immer 1. Die wird dann auch nur mit true übergeben, mit false wird gar keine gefunden.
    Merkwürdig ist aber auch, dass mit setCookie zwei Produkte nicht in der fancybox geöffnet bzw ausgewählt werden können. Also irgendwas ist noch faul..:(
    Habe das ganze auch mit der originalen productdetails view und getInt getestet, mit gleichem Ergebnis: product_id = 1.