Know How für VirtueMart 1.1.x

Bewertung: 3 / 5

Stern aktivStern aktivStern aktivStern inaktivStern inaktiv

Problembeschreibung

In VirtueMart gibt es unter den Browse-Pages die Möglichkeit über Pull-Down-Listen die Anzahl der zu zeigenden Produkte pro Seite einzustellen. Das ist die Konfigurationsmöglichkeit, die dem Seitenbesucher angebot wird. Wenn man diese Pulldownliste und das Standardverhalten verändern möchte, kann das kompliziert werden. Dafür gibt es verschiedene Gründe:

  • Die Einstellungen sind nicht durchweg konfigurierbar, sondern teilweise hart in Scripten kodiert.
  • Die Werte kommen nicht nur aus der Komponente VirtueMart, sondern VM bezieht diese teilweise aus globalen Joomla-Parametern.

Bewertung: 4 / 5

Stern aktivStern aktivStern aktivStern aktivStern inaktiv

Problembeschreibung

Mitunter passiert es, dass wenn Produkte in den Warenkorb gelegt werden in der Meldungsbox von VirtueMart für den Erfolg (oder auch Mißerfolg) die Box ohne einen Meldungstext ausgegeben wird. Erstmals war mir dieser Effekt bei VM 1.0.x aufgefallen bei einem Projekt welches ich per XAMPP local betrieb um dort zu entwickeln. Etwas genauer beschrieben: Die beim Klick auf den Warenkorb wird eine Meldungsbox (fancybox / facebox; mooprompt) eingeblendet. In diese Box wird der Success-Text der per Ajax empfangen wird eingespielt. Er meldet ob das Produkt zum Warenkorb hinzugefügt wurde oder nur die Menge erhöht wurde oder eben auch mal Fehlermeldungen. Diese Meldung blieb sporadisch aus.

 

Grundlagenwissen und Ursache für diese Erscheinung

Alle Meldungen die VirtueMart an den Browser zurückgeben will, werden zunächst in einem Array-Stack gesammelt ($vmLogger). Dafür gibt es entspr. Classenscripte zu finden unter administrator/components/com_virtuemart/classes/Log/ die das Handling dafür übernehmen und entspr. Objekte bereitstellten mit Ihren Methoden $vmLogger->tip, ~->notice, ~->debug, ~->error, ~->warning (die verschiedenen möglichen Errorlevel). Ebenfalls kann hierüber gesteuert werden wohin eine Ausgabe geloggt werden soll (Datei, E-Mail, Display, neu auch gesammelt über composite).

Bewertung: 1 / 5

Stern aktivStern inaktivStern inaktivStern inaktivStern inaktiv

Wissenswertes zum Thema

Virtuemart nutzt zwei unterschiedliche Wege für die Anzeige des Pathways.

  • für die Browsepages nutzt es den regulären Weg, so wie er vom Joomla-Framework vorgesehen ist. Über das Objekt $mainframe mit seiner Methode appendPathWay() lassen sich dem Mainframe Pfad-Element übergeben/anhängen. Alle diese Elemente werden in einem Array gesammelt. Das Modul mod_breadcrumbs verwendet dieses Pfad-Array um daraus dann den Pathway zu erzeugen und an Modulposition auszugeben. Die Konfiguration der Anzeige dieses Pathway erfolgt folglich auch über das Modul / J!-Main-Template-Modulposition und dann projektweit. Will man also die Anzeige für diesen pathway ändern, muss man ins Modultemplate-Script modules/mod_breadcrumbs/tmpl/default.php.
  • Aus unerklärlichen, vermutl. rudimentären Gründen, wird das auf den Produktdetailseiten (flypages) nicht so gehandhabt. Zusätzlich zum Modul-Breadcrumbs kann man hier eine weitere Pfadanzeige veranlassen. Für die Flypage-Templates unter /product_details/ gibt es im Templateverzeichnis /common/ eine pathway.tpl.php, welche auf diesen Seiten die Pathway-Ausgabe formatiert. Die Konfiguration der Anzeige erfolgt hier über die VM-Backend-Konfiguration auf den Flypage-Einstellungen. Hier ist das An- und Abschalten möglich. Das Aussehen wird über das Template pathway.tpl.php gesteuert. Sinn macht das allerdings nicht, weil man dann mitunter die Pfadanzeige doppelt hat, einma über das Modul an Modulposition und zusätzlich innerhalb des Flypage-Inhaltes für das Produkt.

Bewertung: 4 / 5

Stern aktivStern aktivStern aktivStern aktivStern inaktiv

Zielsetzung und Problembeschreibung

Zunächst einmal die Beschreibung, was passiert soll: Wenn der Nutzer auf den Link „Warenkorb löschen" im Mini-Cart-Modul klickt, dann wird die aktuelle Seite auf der sich der User gerade befindet verlassen um die Warenkorb-Löschen-Seiten anzuzeigen. Nach Bestätigung der Löschabsicht erfolgt das Leeren des Warenkorbes und der User soll dann wieder zurück auf seine ursprüngliche Seite geleitet werden, von wo aus der im Modul den Warenkorb-Löschen-Link betätigt hatte.

Prinzipiell könnte man die Löschaktion auch über eine Ajax-Funktion ausführen und die Bestätigungsabfrage und ggf. Erfolgsmeldung in einem modalen Dialog anzeigen, dann könnte man sich die Rücksprungaktivitäten sparen. In unserem Fall soll dies abe über eine separate Seiten erfolgen. Das wiederum ist dann aber nicht so einfach, weil der Server die Information verarbeiten muss, von wo der User ursprünglich kam.

Hierbei gibt es weiterhin eine Besonderheit zu berücksichtigen. Solange wir komplette Seiten aufrufen, ist dem Server auch immer über die REQUEST_URI die Ursprungsadresse bekannt, so dass auch bei Anzeige des Warenkorb-Moduls die Rücklinkinfos abgefragt und weitergegeben werden können. Anders wenn der Warenkorb per Ajax aktualisiert wird, z.B. wenn ein Produkt zum Warenkorb per Ajax-Request hinzugefügt wird.

Bewertung: 2 / 5

Stern aktivStern aktivStern inaktivStern inaktivStern inaktiv

Problembeschreibung

Leider gibt es keine direkte und komfortable Möglichkeit PDF-Dokumente direkt zu Kategorienbeschreibungen hinzuzufügen. Die Komponente "Attachements" arbeitet nicht mit Virtuemart zusammen. Über den Registerreiter "Bilder" in der Kategorie-Administration lassen sich nur für VM bekannte Bildformate einbinden. PDFs werden zwar hochgeladen, aber es wird versucht aus ihnen eine Thumbnail zu erzeugen. Die Datei landet dann ohne erweiterung im VM-Category-Bilderverzeichnis und in der Datenbank. Hier wären Eingrifft notw. Diese Aussage bezieht sich auf alle getesteten VM Versionen bis einschließlich 1.1.9.

Bewertung: 4 / 5

Stern aktivStern aktivStern aktivStern aktivStern inaktiv

Problembeschreibung / Zielsetzung

Eigentlich recht flexibel ist die Möglichkeit benutzerdefinierte Felder für die Benutzerregistrierung in VirtueMart 1.x einzurichten. Unter anderem können auch Felder als sogenannte Mutlicheckbox-Gruppen angelegt werden, d.h. Eine Gruppe von Checkboxen, die intern als Information in einem gemeinsamen DB-Tabellenfeld geschrieben und verwaltet werden. Eine kleine Sache, die hierbei allerdings von den Entwicklern nicht vorgesehen wurde, ist die Möglichkeit ggf. einzelne Felder davon schon beim Aufruf des Registrierungsformulars als gesetzt vorauszufüllen.

Mit nachfolgendem Workaround soll dieses umgesetzt werden, wobei hier keine dynamisch/flexible Lösung geboten wird, sondern nur ein schnell intergrierte Lösung an einem ganz konkreten Fall - also hart kodiert.

 

Bewertung: 3 / 5

Stern aktivStern aktivStern aktivStern inaktivStern inaktiv

Problembeschreibung

Wer an sein Joomla-Site-Template bestimmte Ansprüche hegt, kommt mitunter nicht drum herum über z-index die Layerinhalte nach Notwendigkeiten zu schichten. Damit bekommt VM aber Probleme, denn die Meldungsbox, das ein Produkt in den Warenkorb hinzugefügt wurde, kann dann mitunter von anderen Seitenelement teilweise oder gar vollständig überdeckt sein. Dieser Workaround zeigt, wie man das Problem beseitigt.

 

Grundlagen und prinzipielle Fehlerbehebung

Zunächst sollte man wissen, das die von VM erzeugte Meldung in einem modalen DIV-Bereich eingeblendet wird. Virtuemart verwendet dazu die mootools.js-Bibliothek welche eingebunden wird durch moopromt.js. In Virtuemart muss das overlaying in der Administration eingeschalten sein, damit das moopromt-Script hierfür verwendet wird. Diese Verfahrensweise mit dem modalen Meldungsdialog ist benutzerfreundlicher, weil dann nicht mit jedem hinzugefügten Artikel die Warenkorbseite aufgerufen wird. Statt dessen erfolgt die Befüllung per Ajax, der user erhält die Meldung und bleibt aber auf der Seite, die er vorher aufgerufen hatte.

Bewertung: 1 / 5

Stern aktivStern inaktivStern inaktivStern inaktivStern inaktiv

Problembeschreibung

Immer mehr Provider stellen Ihre Mail-Server um, so dass ein Spam-Mißbrauchsloch geschlossen wird. Häufig werden Mail-Server als Relayserver mitbraucht. Hierbei nutzt ein Mailabsender eine Absenderadresse die nicht dem Domainbereich des Mail-Servers entspricht. Das wird nicht immer nur im Bösen getan, manchmal sind das auch ganz reguläre praktische Beweggründe. Bsp. Wenn man mit seinem Webshop Bestellmails an den Shopbetreiber und Kunden automatisch herausschickt, nutzt man einen SMPT-Account auf dem Host. Als Absender regulär würde dann z.B. stehen Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein!. Diese Adresse soll aber nur vom Webserver verwendet werden. Gerne wird auf derlei Mails geantwortet. Aber an diese Adresse will man keine Mails empfangen. Man selbst müßte beim Beantworten immer erst die Kundenadresse heraussuchen und statt dessen als Anwortadresse eintragen. Das ist mühselig und geht regelmäßig schief. Deshalb wäre es bequemer wenn als Absender nicht diese Webserver-Adresse stünde, sondern die Adresse des Kunden, der die Bestellung aufgibt. Das entspräche aber genau dem Spam-Missbrauchs-Modell wie oben beschrieben. Fast alle Provider unterdrücken mittlerweile diese Verfahrensweise.

Bewertung: 1 / 5

Stern aktivStern inaktivStern inaktivStern inaktivStern inaktiv

Problembeschreibung / Fehler

Es ist schon eigenartig mit Virtuemart. Auch dieser hier beschriebene Fehler existiert seit mehreren Versionen, einschließlich der Version 1.1.9. Worum geht's:

Auf den Produkt-Detailseiten (Flypages) wird ein Link angeboten zum Versenden einer "Weiterempfehlen-Mail" (recommend-mail). Wird das Formular ausgefüllt, und abgesendet, wird die Mail auch korrekt versendet - nur im Text fehlt der Link zur HomePage - erst recht  zum Produkt das ich empfehlen will. Wem nützt eine solche Mail???
Nun ich vermute, der Grund warum dieser Bug seit einigen Versionen von VM noch nicht behoben ist, ist der, dass hierüber noch ein Disput geführt wird, ob es wohl besser wäre dieses Feature über das Joomla-Mainframe zu realisieren, oder durch VM selbst. Ziel sollte schon sein, dass VM möglichst viele J!-Werkzeuge verwendet ... Aber das kann noch dauern und deshalb wollen wir den Fehler wenigstens vorübergehend beheben:

Bewertung: 2 / 5

Stern aktivStern aktivStern inaktivStern inaktivStern inaktiv

Zielstellung

Wenn man einen Dateianhang (z.B. PDF oder XML) an eine Virtuemart-Bestellmail anhängen will, wird das mit den VM-Boardmitteln zunächst nicht gleich gehen. Man muss Vm-Scripte erweitern damit das gelingt. Nachfolgend sind die notw. Modifikationen beschrieben.

 

Umsetzung im Detail

Verantwortlich für den Mailversandt ist das Classes-Script ps_checkout.php. Hier suchen wir die Zeile die mit $shopper_mail = vmMail( ... beginnt.

Die Verfahrensweise ist quasie ähnlich wie mit den $EmbeddedImages. Es muss ein Array aufgebaut werden, welches die Datei-Daten handhabt. Also geben wir vor dieser genannten Zeile folgende Sequenz ein:

Bewertung: 2 / 5

Stern aktivStern aktivStern inaktivStern inaktivStern inaktiv

Fehlerbeschreibung

Schon in früheren Versionen mind. 1.1.3 und aktuell einschließlich Version 1.1.9 tritt bei VirtueMart nach wie vor ein Fehler auf, sobald man über die Produkt-Page-Navigation (vorheriges / nächstes Produkt) oberhalb der Produktdetailanzeige klickt. Der Fehler äußert sich in drei Symptomen:

  1. Auffällig ist besonders, dass im Shopmenü die vorher gewählte, nun aktuelle Kategorie plözlich nicht mehr als aktiv angezeigt wird - abhängig von Menütyp (muss also bei reinen JavaScriptMenüs nicht auftreten - ich nutze eine Art Mod-Mainmenü für die Kategorien).
  2. Wenn man z.B. einer Kategorie eine eigenen oder von der Standard flypage abweichende Flypage zugewiesen hat, wird diese plötzlich nicht mehr verwendet, das Design wechselt unerwartet und unerwünscht zur Standard-Flypage.
  3. Arbeitet man mit Child-Artikeln wird bei Auswahl eines Childartikels auf der Produktdetailseite plötzlich ebenfalls nicht mehr die korrekte Flypage zu Anzeige verwendet.

Fraglich ist, warum die Entwickler diesen Fehler seit vielen Versionen nicht korrigieren.

Bewertung: 2 / 5

Stern aktivStern aktivStern inaktivStern inaktivStern inaktiv

Zielstellung

Bei der Registrierung im Shop VirtueMart (Relevanz geprüft bis Version 1.1.4) findet die Prüfung des Wunsch-Usernamens immer erst nach dem Absenden des Formulars statt. Das kann mitunter etwas nervig werden, weshalb schon bei der Eingabe des Wunsch-Usernamens eine Prüfung stattfinden soll, ob dieser noch verfügbar ist. Gleichzeit soll auch eine Anzeige erfolgen, die Auskunft gibt über die Anzahl der notw. Zeichen die noch einzugeben sind. Im konkreten Fall 3.

Umsetzung im Detail

Um in Echtzeit die Eingabeereignisse abzufragen soll die jQuery-Bibliothek verwendet werden, was allerdings nicht zwingend notw. wäre, es könnte auch über getElementById() gearbeitet werden. Die Prüfung selbst findet selbstverständlich per Ajax-Funktion statt. Hierfür ist also ein JavaScript erforderlich, welches in das Registrierungsformular dem Wunschbenutzerfeld folgend integriert wird. Da die Statusausgaben neben dem Eingabefeld und noch weiter rechts neben dem ToolTip-Icon platziert werden soll, ist es sinnvoll im Script ps_userfield.php, welches für die Ausgabe des Formulars verantwortlich ist, diese im Umfeld der ToolTip-Ausgabe zu platzieren.

Bewertung: 4 / 5

Stern aktivStern aktivStern aktivStern aktivStern inaktiv

Problembeschreibung

Bei einem Kundenprojekt zeigte sich in VirtueMart im Bereich Produktpflege beim Versuch Kategorien zuzuweisen eine abnormes Verhalten dieses Formularelementes. Üblicherweise wird man hier im VM-Backoffice für die Kategoriezuweisung eine einfach Multiselektliste vorfinden. Erst wenn man sehr viele Kategorien hat, was verständlicherweise nur bei weniges Shops überhaupt zutrifft, ändert sich der Typ dieses Formularelementes. Statt o.g. Multiselektliste wird es nun zu einem intelligenten Suchfeld. Der Grund warum diese von den Entwicklern so gehandhabt wird ist klar. Die Suche nach Katerorien soll im Backoffice schneller gehen. Bei vielen Kategorien, wäre die Multiselektliste einfach zu umfangreich und damit langsam.