Teilweiser Transfer von Daten zu einem anderen Joomla-Projekt mittels Akeeba Backup
- Details
Abgrenzung
Nachfolgende Beschreibung bezieht sich auf den Einsatz der Komponente Akeeba-Backup im Umfeld von Joomla. Als dieses kleine Wiki entstand, wurde die Durchführung getestet in einer Joomla-Version 2.5.16 und mit Akeeba Backup 3.8.2. Ich gehe davon aus, dass es unverändert auch in späteren Versionen funktionieren wird. Da die Entwickler der Komponente recht rührig sind und Anregungen auch gern umgesetzt werden, kann es sein, dass dieses Vorhaben für spätere Versionen noch mal vereinfacht wird oder gar automatisiert ablaufen könnte. Spätestens dann ist dieser Beitrag überholt.
Ich werde hier nicht auf Einzelheiten eingehen, die zum Grundwissen des Umgangs mit der Komponente Akeeba-Backup gehören. Hierfür findet man gute Anleitungen in der Akeeba-Dokumentation.
Weiterhin nutze ich ausschließlich die Pro-Version von Akeeba. Ob meine Tipps und Anleitungen auch mit der Core-Version umsetzbar sind, weiss ich nicht - habe ich nicht getestet. Wer diese Komponente wie nachfolgend beschrieben intensiv nutzen will, sollte ruhig mal ins Geldsäckel greifen und den Entwicklern mit dem Kauf der Pro-Version eine kleine Zuwendung zukommen lassen. Es lohnt sich.
Weiterhin gehe ich davon aus, dass Quell- und Zielprojekt auf einem Webserver liegen, so dass Sie auf die Backup-Archive kreuzend zugreifen können. Bei mir ist es üblich, dass Akeeba unterhalb des Webspace-Verzeichnisses des Kunden in einem gemeinsamen Order KundeA/Akeeba-Backup/ und dortige Unterordner für die jeweiligen Sub-Projekte des Kunden schreiben (z.B. KundeA/Akeeba-Backup/ProjektA/).
Problembeschreibung / Aufgabenstellung
Mitunter hat man Projekte die aus verschiedenen Gründen teilweise gleiche Daten nutzen. Hier mal zwei praktische Situationen die typisch sind für die Aufgabenstellung:
Situation 1: Für Kunden supporte ich z.B. Projekte bei den in zwei verschiedenen Projekten (andere Domains, andere Templates) teilweise gleiche und teilweise unterschiedliche Daten vorhanden sind. Z.B. wird im Projekt A ein VirtueMart-Shop betrieben, bei dem Produkte für Endverbraucher (B2C) angeboten werden und im Parallelprojekt für B2B-Kunden. Nun möchte der Kunde nicht alle Produkte in beiden Projekten pflegen müssen. Bei 3000 Produkten und fast genauso vielen Kategorie wäre das doppelter Aufwand.
Weiterlesen: Teilweiser Transfer von Daten zu einem anderen Joomla-Projekt mittels Akeeba Backup
Ändern des Tabellen-Präfixes von MySQL-Datenbanken
- Details
Problembeschreibung
Viele CMS wie Joomla, Wordpress, Drupal oder auch andere Framework, Webshops, Foren usw. nutzen für die Benennung Ihrer Datenbank-Tabellen Präfixe. Oft wird der Wunschpräfix schon bei der Installation abgefragt und alle Tabellen entsprechend benannt. In früheren Joomla-Installationen (z.B. bis 2.5) wurde ein Präfix jos_ vorgeschlagen. Wenn man diesen so verwendet, birgt das jedoch ein Sicherheitsrisiko. Jeder potentielle Hacker kenn so schon die Namen der Datenbanktabellen. Verwendet man hingegen eigenen Präfixe für die Tabellen, schafft man höhere Sicherheit. Seit Joomla 3 wird der Präfix genau aus diesem Grund zufällig erzeugt und vorgeschlagen. Wurde dieser Sicherheitsaspekt bei der Installation nicht berücksichtigt sollte man die Umbenennung nachträglich machen - Aber wie?
Außerdem kann es in der Administration und Pflege der Datenbank weitere Gründe für eine Umbenennung der Tabellen-Präfixe geben, z.B. wenn man mal eben vor einem Datenrestore schnell noch die alten Tabellen umbenennen will, ändert man einfach mal den Präfix.
Nun können in einem Projekt schnell man 100 und mehr Tabellen liegen. Diese manuell umzubenennen nervt einfach. Über MySQL und auch PhpMyAdmin oder Adminer gibt es keine Möglichkeiten dies elegant und schnell zu erledigen. Man müsste wirklich Tabelle für Tabelle einzeln umbenennen.
Weiterlesen: Ändern des Tabellen-Präfixes von MySQL-Datenbanken
Limit-Select-List in VM funktionierend konfigurieren
- Details
Bis zur Version 2.0.24 von VirtueMart gibt es immer mal wieder Fehlverhalten bei den Limit-Boxen (Auswahl wie viele Produkte pro Seite angezeigt werden sollen). VirtueMart stellt eine recht umfangreiche Konfigurationsmöglichkeit diesbezüglich zur Verfügung. Deshalb muss man mit etwas Mühe zunächst das Zusammenspiel dieser Parameter verstehen lernen. Aber auch wenn man das geschafft hat, muss man feststellen, dass mache Konstellationen knirschen.
Wichtig zum Verständnis:
- In der Shop-Konfiguration > im Registerreiter Stilvorlagen gibt es mehrere Optionen über die man das Verhalten der Listen global einstellen kann.
- Dann gibt es ähnliche Optionen in jeder Kategorie, welche die globalen Einstellungen außer Kraft setzen und statt dessen diese verwendet werden.
Hier mal eine "fast" funktionierendes Konstellation, die darauf abzielt zu bewirken, dass die schlichtweg die globalen Einstellungen auch tatsächlich in allen Kategorien verwendet wird (diese Einstellungen sind natürlich etwas abhängig von den Einstellungen für in der Kategorie beim Auflisten der Produkte):
Weiterlesen: Limit-Select-List in VM funktionierend konfigurieren
VirtueMart 2: Pagination Limit-Select-Box korrekte Funktion und Konfiguration
- Details
Problembeschreibung / Zielsetzung
In diesem Beitrag geht es um die Einstellungen in VirtueMart 2.x wie viele Produkt pro Kategorieseite angezeigt werden sollen.
Eigentlich denkt man, das sollte kein Problem sein. Praktisch ist es jedoch etwas verwirrend, denn das was konfigurierbar scheint, wirkt sich nicht wie erhofft aus. Ich konnte mit diesem Wert machen was ich wollte, die Anzeig ließ sich nicht ändern. In meinem Template hatte ich auch die Auswahl "LimitBox" abgeschalten, so dass auch hierüber keine Modifikation möglich war, der Shop also zwangsläufig immer mit dem Standardwert arbeiten sollte.
Beschreibung des Verhaltens und einer einfachen Problemlösung
Das nachfolgend beschriebene Verhalten bezieht sich auf die VirtueMart-Versionen bis 2.0.22. Es kann gut sein, dass es in Folgeversionen korrigiert oder geändert sein könnte.
Weiterlesen: VirtueMart 2: Pagination Limit-Select-Box korrekte Funktion und Konfiguration
Konfigurationen und Anpassungen für das VM-Categorie-Menu/-Navigator (de)
- Details
Modul VM2 Caterory-Menu/-Navigator
Dieser Beitrag bezieht sich auf das Modul VM2 Caterory-Menu/-Navigator für VirtueMart welches Sie über unseren Webshop herunterladen können, um Ihren Shop mit diesem leistungsfähigen Categorie-Menü-Modul auszustatten (siehe auch Demo-Projekt).
Der umfangreiche Funktionsumfang ist im Shop-Produkt beschrieben. Hier ist auch beschrieben für wen dieses Modul sinnvoll ist und was es mehr leistet als die VM-Standardlösung.
Nachfolgend werden weiterführende Information gegeben, die evtl. auftretetende Fragen beantworten sollen und z.T. auch über die einfachen gegebenen Konfigurationsmöglichkeiten des Modules hinausgehen.
Weiterlesen: Konfigurationen und Anpassungen für das VM-Categorie-Menu/-Navigator (de)
Mit phpMyAdmin Daten direkt aus Excel importieren
- Details
Zielstellung: Datenimport in eine vorhanden MySQL-Tabelle
Der Import von Excel-Daten ohne Programmieraufwand und mit den i.d.R. vorhanden Webdesigner-Tools wie phpMyAdmin ist möglich, aber doch nicht ganz so unkompliziert wie man denkt. Einer der wichtigen Gründe ist, dass Excel beim Speichern von CSV wenig Konfigurationsmöglichkeiten bietet und auch beim Import durch phpMyAdmin stehen kaum Konfigurationsmöglichkeiten zur Verfügung. Man ist also darauf angewiesen, dass beide Programme das liefern was man sich wünscht und muss dafür dann einfach deren "Spielregeln" einhalten.
Meine Tests habe dabei gezeigt, dass es ziemlich egal zu sein scheint, ob man nun aus dem Excel heraus erst eine CSV-Datei speichert und diese dann importiert, oder gleich direkt auf eine *.xls zugreift. Der Bequemlichkeit wg. nutze ich also gleich die xls-Datei und beziehe mich in meine Erläuterungen darauf.
Das größte Problem besteht darin die Daten in den Strukturen und vor allen Feldtypen zu erhalten wie wir uns unsere MySQL-Tabelle wünschen. Bei Import versucht phpMyAdmin möglichst intelligent zu entscheiden welcher Feldtyp und mit welcher Formatierung für die Daten geeignet ist. Das kann schon mal schief gehen und wg. der fehlenden Einflussnahmemöglichkeit müssen wir alternative Wege finden. Kritisch sind gerade mal Felder mit Decimalwerten oder auf PLZ, die gerne zum Integer umgewandelt werden, obwohl sie eigentlich besser als Zeichenkette (varchar) behandelt werden sollten (wg. evtl. führender Vornullen bei deutschen PLZ).
Weiterlesen: Mit phpMyAdmin Daten direkt aus Excel importieren
Aus dem Internet-Explorer heraus einen Link mit FireFox öffnen
- Details
Problembeschreibung
Für einen Kunden habe ich eine Intranet-Seite erstellt, über die er diverse Webfunktionen aber auch webrelevante Inhouse-Programme starten kann - quasi eine grafisch gestaltete gut strukturierte Weboberfläche. Diese Intranet-Plattform wurde für den Internet-Explorer optimiert. Der Grund sind nicht irgenwelche Darstellungsanforderungen sondern einfach die Tatsache, dass der Internet-Explorer releativ relaxed mit dem Aufruf lokaler Programme umgeht, etwas was unter z.B. dem FireFox aus Sicherheitsansprüchen nicht erlaubt ist.
Bisher funktionierte das so ganz hervorragend, bis zu dem Tag, wo Google der Meinung war, dass seine Analytics und Adword-Administrationsweboberfläche keine Unterstützung für den Internet-Explorer mehr anbietet. D.h. einen Linkaufruf im IE zur Google-Administration quittiert Google mit dem Hinweis doch einen kompatiblen d.h. Chrome oder FireFox zu benutzen. Nun stand ich vor dem Problem, dass dieser Link so für den Kunden nicht mehr nutzbar war. Daraus resultierte die Aufgabenstellung für eine Workaround.
Weiterlesen: Aus dem Internet-Explorer heraus einen Link mit FireFox öffnen
Wenn Erfolgsmeldungen in VirtueMart verschwinden
- Details
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).
Weiterlesen: Wenn Erfolgsmeldungen in VirtueMart verschwinden
Suchen und ersetzen von URL-kodierten Sonderzeichen in MySQL-Datenbankfeldern
- Details
Problembeschreibung
Es kann schon mal durch unsaubere Scripte passieren, dass über GET-Requests in die Datenbank Formularinhalte in Felder eingetragen werden, bei denen die Sonderzeichen url-encodiert sind. So stünde dann dort statt des Leerzeichens %20.
Wenn man seine Tabelleninhalte nun von diesen Dingen befreiten möchte, z.B. per MySQL-Update-Anweisung, dann tritt ein Problem auf: Man will nach %20 suchen. Das geht aber nicht so einfach weil das %-Zeichen in MySQL als Wildcard verwendet wird. Man muss es also escapen. Die übliche Escape-Syntax wie z.B. in PHP durch "\" geht nicht.
Lösung
Das gute an der Lösung ist, man kann jedes beliebige Zeichen in MySQL als Escape-Zeichen definieren - mit dem Parameter ESCAPE.
Ein kompletter Query kann dann z.B. so aussehen:
Weiterlesen: Suchen und ersetzen von URL-kodierten Sonderzeichen in MySQL-Datenbankfeldern
Android USB-PC-Verbindung funktioniert nicht (MTP-Treiber)
Problembeschreibung MTP-USB-Geräte Verbindung nicht möglich
english version of the article
Sie wollen Daten austauschen/synchronisieren zwischen Ihrem Windows-PC und Ihrem Smartphone mit Android und müssen feststellen, dass der Verbindungsaufbau nicht möglich ist, weil der USB-Treiber offensichtlich nicht korrekt installiert wird.
Prinzipiell ist es schon so, Smartphone per USB an den Rechner anschließen und es werden sofort, wenn noch nicht erfolgt, die Gerätetreiber geladen und die Massenspeicher des Smartphones auf dem Rechner geladen, bzw. als Massenspeicher bereitgestellt.
Auf meinem Samsung Galaxy Note GT-N7100 hatte ich konkret den Fall, dass ich bereits mehrfach das Gerät erfolgreich am Rechner anschließen konnte und plötzlich von Heute auf Morgen dies nicht mehr funktionierte. In Foren gab es diverse Hinweise, wie Treiber neu installieren, Kabel tauschen und USB-Buchse reinigen, Handy komplett ausschalten und nach 3 Minuten wieder booten, den USB-Debugmodus aktivieren etc. Keiner dieser Tipps half.
Weiterlesen: Android USB-PC-Verbindung funktioniert nicht (MTP-Treiber)
Korrekte numerische Sortierung von Datensätzen aus komplexen String-Feldern
- Details
Problembeschreibung/Zielstellung
Mitunter kommt es vor, dass man in einer MySQL-Tabelle varchar()-Datenfelder hat in denen Informationen stehen an die man herankommen möchte, z.B. um gezielt eine korrekte numerische Sortierung zu erreichen.
So können z.B. in Artikelnummern oder Matchcodes an irgend einer Stelle eine Information zu einem Produktdurchmesse kodiert sein. Nehme wir mal als Beispiel ein DIN-Normteil. Eine Artikelnummer oder ein Matchcode könnte z.B. so aussehen: DIN9861 0,5 71 D-HSS. An zweiter Stelle sehen wir hier unseren Durchmesser, an 3. Stelle eine Längenangabe.
Das Problem stellt sich jetzt in zwei Stufen da: Zum einen müssen wir die Stellen separieren an denen unsere Dimensionsagaben stehen, dann müssen diese von einem String in einen numerischen Wert umgewandelt werden, damit die darauf basierende Sortierung korrekt numerisch und eben nicht alphanumerisch erfolgt.
Weiterlesen: Korrekte numerische Sortierung von Datensätzen aus komplexen String-Feldern
Spamschutz mit BreezingForms unter Joomla 2.5 ... 3.x
- Details
Zielsetzung
Mit BreezingForms im EasyMode/QuickMode erstellte Formulare (z.B. Kontaktformular) lassen sich mit wenigen einfachen Mitteln gegen Spambots halbwegs schützen. Der Schutz ist nicht hundertprozentig, aber doch immerhin so gut, dass man gut 95% Spam abblockt. Wie viele andere vertrete auch ich die Auffassung, dass das Prinzip der alten einfachen Captcha-Grafiken nicht zuverlässig genug ist, um dafür in Kauf zu nehmen die User mit den komplizierten Gekritzel der Grafiken zu belästigen. Leider gilt durch mittlerweile KI-unterstützte Allgorithmen auch die reCAPTCHA-Grafik von Google nicht mehr als zuverlässig. Weiterhin hat die reCAPTCHA-Technik von Google einen großen Nachteil: Sie steht im Konflikt mit der europäischen Datenschutzgrundverordnung. Der Grund ist einfach folgender. Schon beim Aufruf einer Seite mit einem Formular in dem dieser Spamschutz integriert ist, wird die Grafik und diverse Scripte von Google-Server geladen. So eine extern geladene Ressource hat immer den Effekt, dass beim Laden von diesen Fremdservern an diesen die aktuelle IP-Adresse des Seitennutzer übermittelt werden muss. Da das im Falle des Google-Servers i.d.R. auf amerikanischen Servern passiert, ist hier immer die Frage nicht hundertprozentig beanwortet, was mit diese personenbezogenen Daten in Fragen Speicherung und Analyse passiert - trotz aller Zusicherung von Google.
Es gibt auch weitere gute Technologie wie HoneyPot und Akismet. Leider sind diese immer mit einem Account verbunden und auch hierbei werden Daten zu externen Server übertragen - und dazu mal eben die kompletten Formularinhalte. Vorteil: zumindest werden die Daten erst beim Absenden des Formulars zwecks Prüfung versendet, so dass man vorher eine Chance hatte den Nutzer DSGVO-konform darüber aufzuklären. Aber bei gewerblichen genutzten Websites sind die genannten Accounts auch kostenpflichtig.
Deshalb greife ich in der Umsetzung auf die Kombination von 2 Schutzmechanismen zurück, die sich bewehrt haben.
Diese Anleitung basiert auf den Einsatz von Joomla 1.5.26 bis 3.8.10 und BreezingForms 1.9 im EasyMode oder QuickMode, kann aber sicher auch auf spätere Versionen adäquat angewendet werden.
Als Schutzmethoden kommen kombiniert zum Einsatz:
- der Zeitfensterschutz
- eine einfache Honey-Pot-Lösung
- und ein Bad-Words-Check
Weiterlesen: Spamschutz mit BreezingForms unter Joomla 2.5... 3.x
Reihenfolge in der Joomla Scripte im Header lädt beeinflussen
- Details
Problembeschreibung
Wer selbst Joomla-Erweiterungen programmiert, wird immer mal wieder auch Scripte (css, oder JavaScript) in den Header laden wollen. Das erfolgt üblich über folgende Scriptzeilen:
$document = JFactory::getDocument();
$document->addScript($this->baseurl . "/components/com_meineerweiterung/assets/js/meinscript.js");
Da hierbei auch häufig ein Overriding von aufeinander aufbauenen Scripten stattfindet ist die Reihenfolge in der die Scripte geladen werden entscheidend. Werden Scripte in der Reihenfolge falsch geladen, stellt sich nicht das erwartete Ergebnis ein, oder es kommt zu Konflikten. Ein typisches Beispiel für derartige Konflikte resultieren immer mal wieder aus der Reihenfolge in der Mootools und jQuery-Bibliotheken geladen werden.
Nun hat man manchmal den Eindruck gar nicht nachvollziehen zu können, in welcher Reihenfolge die Script überhaupt von Joomla geladen werden. Ich hatte schon Situationen erlebt, wo nach einem Update einer Komponente im Vergleich zur Vorversion plötzlich Scripte in andere Reihenfolge geladen wurden. Durch Joomla wird die Reihenfolge des Aufrufs im Header in der Weise festgelegt, wie die Erweiterungen, die diese Scripte laden abgearbeitet werden. Auch das kann in jedem Projekt anders sein. Hier sollte man also zur Sicherheit nichts dem Selbstlauf überlassen.
Weiterlesen: Reihenfolge in der Joomla Scripte im Header lädt beeinflussen
- Virtuemart 2: Verfügbarkeit von Produkten anzeigen/verwalten
- Akeeba Backup per Cronjob starten
- Tipps im Zus.hg. mit LESS im Gantry-Template für Joomla
- LESS-CSS ohne Compilierung nutzen, während der Entwicklung
- Submit per Enter vor Formularvalidierung verhindern
- Joomla 2.5/3.0: Modulinhalte innerhalb eines Beitrages einblenden
- Breezing Form: Validierungsscript valuenotempty() auf Leerzeicheneingaben prüfen
- JCE Profiländerungen lassen sich nicht speichern
- Aktualisierung von Modul-Inhalten per Ajax in Joomla 2.5
- Pathway / Breadcrumbs in VirtueMart 1.1.x
- Mehrsprachigkeit von VM 2 Custom-Fields
- FireFox-Formulare - Fehlverhalten durch automatisches Vorausfüllen
- Internas zu Rabatt-Rechenregeln in VirtueMart 2 - Erweiterung herstellerabhängiger Rabatt
- Die Views-Scripte von VirtueMart 2
- Joomla 1.5.x CSS Dateien nach Modifikationen zwingend aktuell laden
- Mit MySQL einen nächst kleineren Wert finden
- jos_session-Tabelle wird extrem groß
- 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
- Virtuemart 2: Nutzerfelder mit Bestandskontrolle
Seite 6 von 14