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
- Details
Zu diesem Sachverhalt hier ein paar gesammelte Erkenntnisse
Hierbei geht es darum den Kunden anzuzeigen, wie schnell ein Produkt gelieferte werden kann. Das hängt üblicherweise vom Bestand ab und wird prinzipiell unterschieden in Produkte die lagerhaltig sind, also sofort verfügbar, und solchen die wenn der Bestand null ist, erst geordert und dann geliefert werden können. Die Lieferzeit im zweiten Fall ist dann i.d.R. abhängig vom liefernden Hersteller. Detailierte Informationen dazu weiter unten.
Weiterlesen: Virtuemart 2: Verfügbarkeit von Produkten anzeigen/verwalten
Akeeba Backup per Cronjob starten
- Details
Problembeschreibung
Wer mit Akeebe-Backup für Joomla arbeitet, wird sicher auch seine Backuperstellung automatisiert nach Zeitplan starten wollen. Hierzu muss das Backup durch ein Ereignis getriggert werden.
Der übliche Weg das Backup zu starten ist es ein Cronjob zu konfigurieren. Leider ist das nicht auf jedem virtuellem Server möglich, abhängig vom Hostingpaket welches man bei seinem Hostingprovider gebucht hat. In früheren Versionen von Akeeba-Backup und JoomlaPack gab es deshalb als Alternative ein Plugin Akeeba Backup Lazy Scheduling. Dieses Plugin war ein Quasi-Ersatz für die besseren Cronjobs und funktioniert in der Form, dass das Plugin immer auch aufgerufen wird, wenn ein User irgendeine Seite des Projektes aufrief und prüfte dann ein konfiguriertes Zeitfenster und die eingestellte Häufigkeit ab, um dann ggf. das Backup zu start. Man kann sich vorstellen, dass man durch diesen Test permanent eine kleine Grundlast mitschleift.
In den neueren Versionen ist das Plugin nicht mehr verfügbar, oder nur noch als Dummi-Plugin um anzuzeigen, dass es nicht mehr genutzt werden kann.
Aber das Einrichten eines Cronjobs ist trotzdem etwas schwierig, vorausgesetzt der Hostingprovider lässt es überhaupt zu. Denn hier müssen die Rechte berücksichtigt werden und auch die Art- und Weise wie Php auf dem Server ausgeführt wird.
Tipps im Zus.hg. mit LESS im Gantry-Template für Joomla
- Details
Wichtig Links zur Gantry-Dokumentation
LESS CSS | Auf dieser Seite steht beschrieben, wie LESS prinzipiell funktioniert, das Compilen, diverse konzeptionelle und syntaktische Prinzipien, wie die Einbindung im Gantry-Template erfolgt usw. |
Adding a Custom Stylesheet | Auch dieser Text beschreibt wie mit Custom-Style die Gantry-Styles überschrieben werden können. Interessant ist hier die Verwendung von Browser-Weichen |
Einbinden einer eigenen CSS-Datei ins Template - ohne LESS
Um eine eigene CSS-Datei im Gantry-Template einzubinden, muss lediglich im Gantry-Template-Verzeichnis und hier im Unterverzeichnis ~/css/ eine Scriptdatei mit dem Name gantry-custom.css abgelegt werden. Der Dateiname ergibt sich aus dem Namen für das Template also gantry plus dem Zusatz custom. Diese Variante erzeugt eine CSS-Datei, die dann so unkomprimiert zusätzlich ins Template geladen wird.
Weiterlesen: Tipps im Zus.hg. mit LESS im Gantry-Template für Joomla
LESS-CSS ohne Compilierung nutzen, während der Entwicklung
- Details
LESS-CSS ohne Compilierung nutzen
Less wurde entwickelt um das Konstrukt von CSS-Scripten schlank und übersichtlich zu halten und durch die Verwendung komprimierter CSS-Dateien die Performance von Projekten zu steigern. Zu diesem Ziel werden die LESS-Dateien kompiliert und gecacht. Während der Entwicklung ist das allerdings mitunter etwas schwierig. Wer im Browser dann seine CSS-Eigenschaften versucht zu analysieren (z.B. per Chrome-Webdeveloper oder FireBug) erhält rückwärts wenig verwertbare Informationen. Die Fehlersuche gestaltet sich dann mitunter etwas schwierig. Für diesen Fall ist es sinnvoll die LESS-Dateien wie bisher wie CSS-Scripte verwenden zu können, unkomprimiert.
Das wiederum ist nicht so einfach, weil die Browser LESS nicht verstehen, so als waren es CSS-Dateien, denn LESS wird erst durch das Kompilieren zu CSS. Mit den Funktionen, Variablen, Verschachtelungen und spezifischen Syntax können Browser nichts anfangen. Deshalb sind zwei Dinge notwendig
- Wir müssen die LESS-Datei direkt laden, so als wäre Sie CSS-Dateien
- Wir müssen daraus im Browser verständliches CSS machen.
Von den LESS-Entwicklern wurde dazu eine Client-seitige Nutzung implementiert und in diesem Text dokumentiert.
Nachfolgend soll kurz beschrieben werden wie die Umsetzung für diesen Fall erfolgen kann
Weiterlesen: LESS-CSS ohne Compilierung nutzen, während der Entwicklung
Submit per Enter vor Formularvalidierung verhindern
- Details
Problembeschreibung
Formular verhalten sich in Browsern i.d.R. so, dass beim Drücken von Enter das Formular abgesendet wird. Das kann mitunter aber nachteilig sein, z.B. dann wenn der Nutzer notwendige Eingaben noch nicht vollständig ausgefüllt hat.
Oder ein anderer denkbarer Fall: In einem Warenkorb-Shop, soll wird mit Verpackungseinheite gearbeitet. Ein Script soll dabei prüfen, ob bei der Eingabe von Wunschstückzahlen diese Verpackungseinheiten eingehalten sind, also dafür sorgen, dass die Menge immer ein Vielfaches der Verpackungseinheit ist. Dazu gibt der Nutzer also die Menge in eine input-Feld ein. Beim Verlassen des Feldes, oder eben auch beim Klicken auf den Warenkorb-Button, erfolgt die Prüfung und ggf. Korrektur der Wunschmenge. Jedoch wird diese an den Warenkorb gebundene Prüfung umgangen wenn nach Eingabe im Feld durch den Nutzer einfach Enter gedrückt wird. Das Formular wird dann üblicherweise abgesendet.
Aufgabenstellung
Unser Ziel besteht nun also darin, das Absenden zu verhindern, wenn Enter gedrückt wird und die Werte nicht unsere Validierungskriterien entspricht. Ein onBlur-Ereignis führt die Wertprüfung im Eingabefeld durch, im Bsp. ist das die Funktion showSelAmountBox(), welche mit einem kleinen Dialog dem Nutzer mgl. Wunschmenge vorschlägt und dann korrekt ins Input-Feld überträgt. Das Absenden erfolgt wie üblich über ein Warenkorb-Icon als input-Tag vom Typ submit (<input type="submit" />).
Weiterlesen: Submit per Enter vor Formularvalidierung verhindern
Joomla 2.5/3.0: Modulinhalte innerhalb eines Beitrages einblenden
- Details
Problembeschreibung / Aufgabenstellung
An einem konkreten Beispiel soll verdeutlicht werden, wie man spezielle Inhaltsschnippsel innerhalb von Joomla-Beiträgen platzieren kann. Ein in der Praxis denkbarer Fall wäre mitten in Joomla Beiträgen einfach Google-Adsense-Anzeigen einzublenden, ohne dieses jedes mal komplett als Scriptschnippsel einfügen zu müssen. Wir wollen also diesen Adsense-JavaScript-Schnippsel einmal ablegen und dann beliebig oft und einfach einbinden können. Das alles soll möglich sein, ausschließlich mit Joomla Board-Mitteln.
Lösung
Im Prinzip ist es ganz einfach, wenn man um die Möglichkeiten weiss, die Joomla uns für solche Zwecken schon liefert. Es ist nicht notwendig nach Komponenten zu suchen mit denen man Adsense-Anzeigen plazieren kann oder dafür gar Geld auszugeben.
Was wir brauchen und Joomla uns auch bereitstellt:
- Ein Plugin, welches uns Module in den Content einbindet. Genau das haben wir und nennt sich unter Joomla Inhalt - Modulpositionen laden, wie immer zu finden in der Liste der Plugins. Dahinter arbeitet das Plugin plugins/content/loadmodule.
- Weiterhin brauchen wir ein Module mit dem wir einfache Inhalte veröffentlichen können. Auch das gibt es. Wir finden das Modul in der Modulliste unter dem Namen Eigene Inhalte (Leeres Modul). D.h. wir haben hier ein Modul welches zunächst einmal nichts macht, es ist leer, eben solange bis wir dort einen Inhalt einpflegen.
Diese beiden Bausteine lösen unser Problem.
Weiterlesen: 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
- Anpassungen von sh404SEF für PHP5.3
- Unix-Timestamp in MySQL-Tabellen als Datum anzeigen
- Vorausgewählte Multicheckbox-Felder in der VirtueMart-Benutzerregistrierung
- Kategorie-Vorschaubilder in ihren Höhen vereinheitlichen und vertikal zentrieren
- 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
Seite 6 von 14