Die Views-Scripte von VirtueMart 2
- Details
Korrekte Initialisierung von VM im Shop-Frontend
Es ist ganz wichtig, dass VirtueMart 2 korrekt initialisiert und somit in das Joomla-Framework eingebunden wird. Leider ist das mit einer einfachen Installation von VirtueMart nicht gleich gegeben. VirtueMart ansich funktioniert dann zwar grundsäztlich, aber es gibt diverse Feature, speziell von anderen Joomla-Erweiterungen (z.B. Sitemaps, div. Module, Suchfunktionen usw.), die erst dann korrekt funktionieren. Bei der Initialisierung geht es im Kern darum, dass Joomla-Erweiterungen in der Lage sind VirtueMart zu finden, so dass deren Produkte und Kategorien gelesen werden können. Das geht zum einen nur dadurch, dass Virtuemart im Hauptmenü eingebunden ist und zum anderen dieser Menüeintrag vom richtigen Typ ist.
Konkret sieht es so aus, dass wir im Mainmenu eine Virtuemart-Komponenten-Eintrag einbinden der auf den Type Kategorie-Layout verweist. Ich möchte nicht beschwören, dass der Menüeintrag auch in ein anderes Menü erfolgen kann, aber ich bin mir sicher, dass es exakt dieser Menütyp sein muss. In der Typ-Auswahlliste steht er bezeichnet als Kategorie Layout. In der Liste der Menüeinträge eines Menü steht in der Spalte Menütyp dann VirtueMart » Kategorie Layout. Es sollte die unterste Shop-Kategorieebenen gewählt werden.
Bedeutung diverser VirtueMart 2 Template-Scripte
Nachfolgend eine Aufstellung der Views-Scripte von VirtueMart 2. Diese Scripte befinden sind alle in Unterverzeichnissen von components/com_virtuemart/views/. In den dortigen Unterverzeichnissen gibt es dann immer ein Verzeichnis /tmpl/ und den darin befindlichen üblicherweise default.php und/oder default_teiltemplate.php heißenden Scripten. Jedes dieser Scripte ist verantwortlich für die Darstellung eines Shopbereiches oder einer einzelnen Shopfunktion. Gegliedert sind diese zusätzlich für die Shopbereiche in Unterverzeichnisse.
Entspr. des MVC-Models, welches in Joomla! und VM 2 umgesetzt ist, sind das die Viewbestandteile der Komponente und unterstützen damit auch konsequent das Template-Overriding von J!. D.h., jedes hier vorhandenen Scripte kann zusammen mit seinem Unterpfad in das Verzeichnis templates/Ihr-Template/html/com_virtuemarte/ kopiert werden. Dort kann es nach eigenen Wünschen und Bedürfnissen modifiziert werden, ohne Angst haben zu müssen, dass ein späteres VM-Update diese Templatescritpe überschreibt. Nebenbei: Man könnte das Oberriding von Joomla auch ignorieren und statt dessen kann man für einige default.php-Scripte auch anders benannte Scripte im gleichen Verzeichnis ablegen. In der Shop-Konfiguration könnte man dann statt der default-Style diese anderes benannten Style-Scripte zuweisen. Das ist jedoch nicht ganz konsequent und die Struktur des Template-Overridings ist transparenter.
Joomla 1.5.x CSS Dateien nach Modifikationen zwingend aktuell laden
- Details
Problembeschreibung / Zielstellung
Jedem Webmaster ist dieses leidliche Problem bekannt und es betrifft in J!1.5 auch Joomla-Projekte: Sie haben Modifikationen an einer wichtigen CSS-Datei vorgenommen aber auf den Browsern erscheinen diese Änderungen erst nach einem hart erzwungenem Reload per Strg.+F5. Mit Recht befürchten Sie nun, dass evtl. Ihr Layout auf Userrechnern nicht die gewünschte Änderungen anzeigen oder die Darstellung sogar gestört ist.
Den meisten Webmastern ist nun auch die Methode bekannt an die zu ladenden CSS-Datei einfach einen Parameter anzuhängen z.B. in der Form /templates/css/template.css?v=101. Über die hochzählbare Versionsnummer kann ich nun mit jeder Änderung auch die Version und damit den URI ändern und erzwinge damit, dass diese CSS neu geladen wird. So weit so gut, aber wie sage ich das Joomla.
Weiterlesen: Joomla 1.5.x CSS Dateien nach Modifikationen zwingend aktuell laden
Mit MySQL einen nächst kleineren Wert finden
- Details
Problembeschreibung / Aufgabenstellung
Angenommen Sie haben haben eine Tabelle in der Sie Rohre mit unterschiedlichem Durchmesser verwalten und wollen nun per Datenbankabfrage das Rohr finden, welches von einem Abfragedurchmesser aus gesehen den nächst kleineren Durchmesser hat. Einfach nur eine kleiner-Abfrage verbunden mit Limit 1 wäre sehr unzuverlässig und denkbar sowieso nur bei sortierten Daten.
Lösung
Dazu braucht man keine aufwändigen Query-Konstrukte bauen, oder gar einer Trefferliste mit Datensätzen von kleineren Durchmesser mit z.B. php das Array durchlaufen und nach dem kleinsten suchen. Das geht schon allein mit MySQL-Boardmitteln durch z.B. folgenden Abfrage:
SELECT * FORM tabelle WHERE rohrdurchmesser < abfragedurchmesser ORDER BY rohrdurchmesser DESC LIMIT 1;
jos_session-Tabelle wird extrem groß
- Details
Problembeschreibung
Wer sich mal die Mühe macht und unter Joomla 1.5.xx sich die Tabelle jos_session anschaut, wird evtl. feststellen dass diese extreme Größen annehmen kann. Bei einer dieser Kontrollen per phpMyAdmin sah ich in einem meiner Projekte, dass diese 1,6GB(!) groß geworden ist.
Bei weiterer Analyse zeigte sich:
- Es waren nur knapp 700 Einträge in der Tabelle
- und alle Einträge nur max 1 Stunde alt.
Also von daher war der eigentliche Tabelleninhalt vollkommen okay. Dadurch wurde mir klar, dass die Tabelle vermutlich mit gelöschten Datensätzen zugemüllt ist und dies offensichtlich kein ernst zu nehmendes Joomla-Problem ist.
Rücksprung zur Ausgangsseite nach Warenkorb-Löschen in VirtueMart 1.1.x
- Details
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.
Weiterlesen: Rücksprung zur Ausgangsseite nach Warenkorb-Löschen in VirtueMart 1.1.x
Virtuemart 2: Nutzerfelder ohne Warenkorb-Attribut / Produktvarianten / mit Warenkorb-Attribut / Child-Produkte
- Details
Anwendungsmöglichkeit / Beschreibung
Angenommen Sie haben Produktgruppen, die typischerweise immer den gleichen Strukturaufbau haben sollen. Zu jedem dieser Strukturdaten sollen Informationen erfasst und angezeigt werden. Beispielsweise haben Sie verkaufen Audio-CD's. Diese haben ja i.d.R. ihren festen, nicht "konfigurierbaren" Preis. Aber die Informationen die zu jeder CD bereitgestellt werden sind immer die gleiche: Album, Interpret/Gruppe, Erscheinungsjahr, Label, Genre etc. Bei diesen beschreibenden Attributen wird dem Seitenbesucher im Produkt kein Auswahl angeboten. Jedoch wäre es denkbar, dass er alle Alben eines bestimmten Interpreten suchen will, oder eines bestimmten Genres. Dafür wäre strukturierte Daten noch obigen Schema notwenig.
Wer schon mit VM 1.x gearbeitet hat, wird dies bekannt vorkommen von den dortigen Produkttypen.
Erstellen und Anwenden von Produktvarianten ohne Warenkorb-Attribute
Prinzipiell gibt es zwei sich wiederholende Schritte. Sie müssen so viele Attribute anlegen wie Sie brauchen. Dann weisen Sie den Produkten dies Attribute zu und befüllen diese mit den konkreten Inhalten.
Virtuemart 2: Nutzerfelder mit Bestandskontrolle
- Details
Anwendungsmöglichkeit / Beschreibung
Bei diesen Produkten geht es um die Typische Beziehung von Produkte und Artikeln, oder, wem diese Benennung aus VM 1.x noch bekannt ist, um Parent-Produkte und Child-Produkte.
Auch hier ein Beispiel anhand dessen erkennbar ist, mit welcher Absicht man diese Produktattributisierung einsetzen sollte:
Sie wollen Schrauben verkaufen. Typische Merkmale der Schrauben sind die Verwendungsart (Holz, Metall, Kunststoff), die Kopfform (Senk-, Halbrund-, Linsen-), die Bit- oder Stecköffnung (Schlitz-, Kreuz-, Torx-, Innensechskant-), evtl. der Güte (Normal, Niro ...) oder der Gewindeart (Normal, fein, ...). Darüber definieren wir i.d.R. das Produkt "Schraube", auch weil wohl üblich ein Bild und eine gemeinsame Beschreibung genügt, um eine so klassifizierte Schraube optimal zu charakterisieren. Anders ist es aber mit der Länge und der Gewindegröße einer Schraube. Auch hierin unterscheiden sich Schrauben, aber es bleibt für uns ein Produkt. Im Baumarkt liegen quasi alle Schrauben mit o.g. Merkmalen in einem Regalbereich, aber getrennt in Schachteln nach iher jeweiligen Größe. Wir untergliedern also das Produkt Schraube noch einmal, weil wir für jede dieser Schraubengrößen nicht nur separate Preise haben, sondern ggf. separate Bestände, Gewichte, Verpackungseinheiten etc. Die sich so ergebenden Artikel sind in der Regel so auch in unserem Warenmanagementsystem geführt - eben mit eigenen Beständen für den Ein-/Verkauf etc. In unserem Shop ist die Schraubenart dann unser Parentprodukt (Regalbereich) und die Schachtel getrennt nach Größe unsere Artikel.
Weiterlesen: Virtuemart 2: Nutzerfelder mit Bestandskontrolle
Anpassungen von sh404SEF für PHP5.3
- Details
Problembeschreibung
Mit Umstellung von Webservern von der PHP-Version 5.2.x auf 5.3.x gelten einige Befehle als veraltet (deprecated). Wurden Komponenten von den Herstellen diesbezüglich nicht weitergepflegt wird es bei dem einen oder anderen Projekt zunächst zu Warnmeldungen kommen und später zur Funktionsverweigerung.
Wenn es nur Warnungen sind, kann man das Problem vorübergehend unterbinden, wenn man die Ausgabe von Warnungen für den Webserver abstellt (display_errors = off). Damit ist das Problem aber nur in die Zukunft verschoben, aber man gewinnt Zeit um die Projektumstellung in Ruhe zu realisieren - entweder in dem Komponenten selbst angepasst werden oder indem man das Joomla auf z.B. 2.5.x migriert inkl. der neuen Komponenten.
Eine diese Komponenten ist z.B. sh404SEF für Joomla 1.5.x. Hier wird z.B. häufig der veraltete Befehle eregi() zum String-Ersetzen verwendet, was durch die jetzt gültige funktion preg_match() ersetzt werden muss.
Unix-Timestamp in MySQL-Tabellen als Datum anzeigen
- Details
Problembeschreibung
Häufig wird in MySQL-Tabellen in Datensätzen auch Datum und Uhrzeit gespeichert, z.B. vom Erstellungs- oder Änderungszeitpunkt. Das erfolgt häufig als Integerzahl im Unix-Timestamp-Format und ist dann bei Tabellenanzeigen für Menschen schwer lesebar. Deshalb möchte man mitunter diesen UNIX-Timestamp gerne in eine normale Schreibweise von Datum und Uhrzeit angezeigt haben.
Hier die Lösung
... am Beispiel einer User-Tabelle, wo wie das Anmeldedatum umgewandelt haben wollen.
SELECT *, FROM_UNIXTIME(time) as realtime FROM `session` ORDER BY `time` DESC LIMIT 30
Mit nachfolgender Lösung werden alle DS in einer MySQL-Tabelle gefunden, bei der das modified_on-Datum darauf verweist, dass der DS zuletzt vor 30 Tagen bearbeitet wurde:
select *, modified_on, timestampdiff(DAY, modified_on, now()) as diffdays from j2ms_virtuemart_categories c left join j2ms_users u on c.modified_by = u.id WHERE timestampdiff(DAY, modified_on, now()) < 30 ORDER BY timestampdiff(DAY, modified_on, now()) ASC limit 0, 100
Man kann die Datum/Zeit-Ausgabe auch gezielt formatieren in dem ein Formatstring übergeben wird:
FROM_UNIXTIME(`timestamp_column`, '%Y-%m-%d %H:%i:%s')
Vorausgewählte Multicheckbox-Felder in der VirtueMart-Benutzerregistrierung
- Details
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.
Weiterlesen: Vorausgewählte Multicheckbox-Felder in der VirtueMart-Benutzerregistrierung
Kategorie-Vorschaubilder in ihren Höhen vereinheitlichen und vertikal zentrieren
- Details
Zielsetzung / Problembeschreibung
Häufig hat man z.B. in Webshops auf Kategorie- oder Produktauswahlseiten diese als Tableau mit Vorschaubildern angezeigt. Hierbei reiht sich Vorschaubild an Vorschaubild jeweils in kleinen Blöcken. Bei einem tabellenfreien und in der Breite flexiblen Layout läßt man diese Vorschaubildblöcke einfach floaten.
Hierbei will man der schönen Optik wg. gerne zwei Dinge erreichen:
- die Container für die Vorschaubilder sollen alle gleich groß sein
- und die Bilder darin auch bei unterschiedlicher physikalischen Größe untereinander vertikal zentriert ausgerichtet sein.
Wer sich schon mal mit einer solchen Aufgabenstellung befasst hat, wird erfahren haben, dass dies per HTML und CSS so nicht möglich ist. Neuerdings findet man in Foren dazu eine Lösung die mit display:table, display:table-cell und vertikal-align:middle als Styleanweisungen arbeitet. Jedoch hat diese Formatierung als Tabellenzellen den Nachteil, dass Bilder die physikalisch größer abgelegt wurden als im Layout vorgesehen mit 100% angezeigt werden und dann einfach über den Tabellenrand hinausragen.
Wer sich jetzt fragt, warum ich dann nicht einfach die Bilder in der Breite korrekt skaliert auf den Server schiebe, der kennt meine Kunden nicht. Die sind dazu nicht in der Lage und erwarten einfach dass es trotzdem schick aussieht.
Weiterlesen: Kategorie-Vorschaubilder in ihren Höhen vereinheitlichen und vertikal zentrieren
Modulposition eines veröffentlichen Moduls im Template-Script ermitteln
- Details
Aufgabenstellung
Mitunter kann es in einem Joomla-Template notwendig sein, ein Modul unterschiedlich darzustellen, je nach dem an welcher Modulposition es ausgegeben wird. Beispiel ein Warenkorb in der Modulposition "left" würde vertikal aufgebaut werden und alle Bestellpositionen enthalten. Würde der Warenkorb z.B. in der Toggelbar am unteren Browserrand angezeigt werden, müßte der Aufbau gänzlich anders erfolgen. Das kann nicht immer nur über Styles erreicht werden, sondern mitunter muss das Modul-Templatescript die Ausgabe komplett anders ansteuern. Hierfür muss man aber Im Templatescript zunächst erfahren können, an welcher Position das Modul nun gerade veröffentlich ist. Nachfolgend die ganz einfache Lösung (zutreffend für Joomla 1.5.x):
Weiterlesen: Modulposition eines veröffentlichen Moduls im Template-Script ermitteln
Verwendung von reply-to als Lösung für Mail-Relay-Server-Problem in VirtueMart 1.x
- Details
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
Weiterlesen: Verwendung von reply-to als Lösung für Mail-Relay-Server-Problem in VirtueMart 1.x
- Dateianhänge an VirtueMart-Bestellmails
- Floating-Problem bei jQuery.SyncHeight
- Vorschaubildgröße in VirtueMart 2 nachträglich anpassen
- htaccess unter Win 7 / xampp umbenennen und nutzen
- XAMPP PHP-Warnmeldungen in Joomla
- Ändern der Anzeigedaten in SobiPro
- Wie erstellt man eigene VM-Layouts
- Leere Produkt-Detailseiten in VirtueMart 2.x
- Das SEF-System unter Joomla 2.5
- Die SEF-Adressen-Generierung in VirtueMart 2.x
- Edimax PS-1210MFN Probleme beim Installieren/Einrichten
- Mehrwertsteuer-Anzeige in VirtueMart 2.x
- SEF für VirtueMart 2.0.x korrekt unter J!2.5.x einrichten
- SobiPro - Templates anpassen
- JQuery doppelt geladen unter Joomla 2.5
- BreezingForms-Kontaktformular mit Virtuemart-Kontaktdaten vorausfüllen
- JoomFish und Akkeba-Backup - Plugin-Reihenfolgen-Konflikt
- Migration von Phoca-Gallery von J!1.5 zu J!2.5
- Migration von Joomla von Version 1.5.x zu J!2.5.x
- Modulpositionen im JYAML 4.0
Seite 8 von 14