Eigene Suchfunktion / danach Problem mit vmkeepalive.js

  • Hallo liebe VirtueMart-/Joomla-Experten,


    ich habe für einen Kunden eine eigene, individuell auf die Kundenwünsche angepasste Suche erstellt.
    Diese ist in dem erstellten Template fest integriert (Oberfläche HTML mit Ajax Aufruf an PHP).


    Die Ergebnisanzeige ist ebenso individuell angepasst wie die eigentliche Suchfunktion. Die Suche fragt einfach fest definierte Tabellen ab (JFactory DBO) und stellt diese in einer Liste (HTML Tabelle) dar. Hierfür werden anhand der gefundenen Produkt-IDs die Produkte (Product Model) geladen und in die HTML Tabelle als TD-Elemente eingefügt. Dies funktioniert auch korrekt. Ich kann bspw. die Produkte per Link öffnen.


    Ab hier das Kuriose verhalten meiner Implementierung:
    Wenn ich von der Detailseite des gesuchten Artikels das Hauptmenü anklicke (Kategorien-Liste), dann gelange ich nicht zu der entsprechenden Kategorie sondern lande auf meiner Hauptseite (die Ursache hierfür ist wahrscheinlich in einem Programmierfehler meinerseits begründet und nicht weiter tragisch).


    Aufgetretener Fehler:
    Nachdem man wie oben beschrieben (nach der Suche) auf der Hauptseite landet, funktioniert mein Javascript nicht mehr (sämtliche Buttons lassen sich nicht mehr klicken).


    Eine kurze Analyse in der Browserkonsole ergab, dass die Variable "sessmin" in der Datei "vmkeepalive.js" undefined ist.


    Im Folgenden "/com_virtuemart/assets/js/vmkeepalive.js" Zeilen 1 bis 8. Der Fehler tritt in Zeile 5 auf:


    Meine Vermutung:
    Da ich die PHP-Dateien für die Suche separat angelegt habe, befürchte ich, dass ich Virtuemart an der Stelle der Darstellung des Suchergebnisses nicht richtig eingebunden habe. Die Vermutung stützt sich darauf, dass ich aus der Suche heraus keinen einzigen Virtuemart-Menü-Link (Kategorie) ansteuern kann. Desweiteren funktionieren die Sprachoverrides auch nicht in meinen separaten Dateien (hier wird immer englisch statt der Shopsprache geladen).
    Da ich aber nicht blind meinen Code spammen möchte, die folgenden Fragen zur Eingrenzung.


    Meine Frage:
    Wann oder viel mehr durch welche Funktion wird "sessMin" initialisiert, bzw. welche Objekte muss ich zuvor laden?
    Die Einbindung des Skripts erfolgt meines Wissens nach durch "/com_virtuemart/helpers/vmjsapi.php".


    Mögliche Lösung aber unsauber:
    Eine mögliche Lösung wäre natürlich das Überschreiben der Funktion und die Erweiterung um den folgenden Code:

    Code
    1. if( typeof sessMin == 'undefined') {
    2. sessMin = 30;
    3. }


    Aber dies wäre nicht im Sinne des Erfinders! So wäre der Wert natürlich nicht mehr konfigurierbar!


    Hat "mein vorgeschlagener Workaround" außer, dass die Konfiguration über das Backend nicht mehr funktioniert, noch weitere technische Auswirkungen?


    Wie wäre die normale Funktion des Keepalives?


    Vielen Dank schon einmal an Euch alle (fürs Lesen oder für Eure Beiträge) und viele Grüße!
    Markus

  • Servus Mschratt,


    Der Workaround sollte funktionieren, mit genannter Einschränkung.


    The VM JavaScript Handler - VirtueMart Documentation


    du kannst auch einfach vmjsapi::keepalive oder so aufrufen. Das schadet nicht, es mehrfach aufzurufen. Aber letztendlich hört sich das böse an, über das template.


    Warum kein schönes Plugin? Oder nen module?