MySQL: Vergleich von Datensätzen die es in eine Resultat gibt aber nicht im anderen
- Details
Zielstellung
Häufig gibt es die Situation, und sei es nur zur Datenanalyse oder Fehlersuche, dass man die Datensätze in einer MySQL-Tabelle finden möchte, die es in einem Abfrageresultat gibt, aber nicht in dem anderen.
Z.B.: Sie wollen alle Produkt-Ids/Artikelnummern von Produkten finden, die es in einer Artikelgruppe gibt aber nicht in der anderen.
Umsetzung / Lösung per MySQL
Für die Lösung sind 3 Bausteine notw.
- Damit alle DS mit einer einzigen Abfrage aufgelistet werden, die es in der einen Artikelgruppe nicht gibt bzw. in der anderen nicht gibt, führen wir zwei Teilabfragen durch, die dann mit UNION zusammengeführt werden und als eine gemeinsame Ergebnisliste ausgegeben werden. Hier könnten weitere Teilergebnislisten angefügt werden z.B. für weiter Artikelgruppen.
- Innerhalb dieser Teilabfragen für jede Artikelgruppe erstellen wir zunächst eine Trefferliste über alle gefundenen DS die entweder der einen oder anderen ArtGrp angehören. Dazu nutzen wir zwei Teilabfrage, die mit UNION ALL zusammengefügt werden. Dann reduzieren wir diese Treffer auf je max. 1 DS pro artnr durch Verwendung von GROUP BY artnr. Das ist unsere Gesamtmenge.
- An diese gruppierte Gesamttrefferliste fügen wir nun per LEFT JOIN die Datensätze der zu prüfenden ArtikelGruppe an. Wir suchen als die Vergleichs-Teilmenge. Dort wo es keinen Treffer gibt, wird das Feld artnr mit NULL <null> geschrieben. Genau nach diesem NULL fragen wir dann ab und lassen uns per artnr IS NULL als Trefferliste alle Datensätze zeigen, die keine ArtNr aus dem LEFT JOIN bekommen haben.
Hier mal ein Codebeispiel, die Umsetzung beispielsweise erfolgen kann:
Weiterlesen: MySQL: Vergleich von Datensätzen die es in eine Resultat gibt aber nicht im anderen
Limit Standard und Schrittweite für VM 1.1.x ändern
- Details
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.
Weiterlesen: Limit Standard und Schrittweite für VM 1.1.x ändern
Zielseite nach Joomla-Login ändern (redirect)
- Details
Problembeschreibung
Standardmäßig springt Joomla nach einem Benutzerlogin auf die Seite für die Profilverwaltung. Wenn das nicht die gewünschte Zielseite ist, dann läßt sich das in Joomla ändern.
Nachfolgende Lösung betrifft speziell die Version 3 von Joomla, trifft aber auf frühere Versionen adäquat zu, vermutl. auch auch spätere.
Redirect-Seite nach Anmeldung ändern
Es gibt verschiedene Möglichkeiten ein Login-Formular in Joomla anzubieten.
- Zum einen kann ein Login über ein Menüeintrag/-element eingebunden werden. In diesem Fall ist das Loginformular der Hauptseiteninhalt, also ein Komponenten-Inhalt.
- Zum anderen kann auch über ein Login-Modul, welches an jeder beliebigen Modulposition und Seite veröffentlicht werden kann, ein Anmeldedialog erreicht werden.
Je nach dem welche der beiden Varianten Sie für Ihre Seiten nutzen, muss die Konfiguration der Zielseite entweder unter dem Menüeintrag für die Loginseite oder im Login-Modul erfolgen. Hier gibt es in jedem der beiden Fälle eine Feld Anmeldumleitung.
Migration von Joomla 2.5.x zu 3.x
- Details
Zielstellung
In einer kurzen Anleitung soll beschrieben werden, wie man ein Joomla-2.5.x-Projekt zu Joomla 3.x migriert oder upgradet, was dabei zu beachten ist, und wie evtl. Stolperfallen umgangen werden können.
Grundwissen
Zunächst ist wichtig zu wissen, dass man eigentlich erstmals von einer Migration gar nicht reden kann. Denn üblicherweise ist eine Migration sehr viel aufwändiger und nicht mit einfachen Installationen erledigt. Meist sind spezielle Nacharbeiten notw. Jedoch haben uns die Joomla-Entwickler diese Migration so leicht gemacht, dass man eigentlich von einem Upgrade sprechen kann. Wer sein Joomla-Projekt schon bisher immer regelmäßig per Updates aktuell gehalten hat, kennt die Arbeit mit dem Joomla-Installer. Genau der kann auch für das Upgrade auf 3.x verwendet werden.
Prüfung der USt-IdNr. (EU-VAT-ID) in Joomla/VirtueMart per VIES-Server (SOAP)
- Details
Zielstellung
Für gewerbliche Kunden innerhalb der EU (vorsteuerabzugsberechtigt) ist es erforderlich auf den Rechnungen die Umsatzsteuer-Identifikationsnummer (USt-IdNr.) anzugeben. Diese muss geprüft sein. Dafür gibt es unter http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl eine SOAP-Dienst an den die EU-VAT-ID übergeben werden kann. Man erhält einen Validitationsstatus als Ergebnis. Wer die Spezifikation erfahren will kann einfach auf diesen Link klicken und erhält diese als beschreibendes XML-Schema.
Die meisten Shop-Script, so auch in VM machen per JavaScript eine Plausibilitätsprüfung, ob die Eingabe für das gewählte Land dem typischen Muster der VAT-ID entspricht. Besser ist es natürlich direkt die Existenz der Eingabe-VAT über den VIES-Server zu prüfen. Mit dem nachfolgenden Script habe ich das mal für ein Projekt, noch unter VM 1.1.x laufend umgesetzt.
Prüfscript
Das Script Es enthält zwei Klassen
vatLiveCheck() macht eine einfache Prüfung über die SAOP-Methode checkVat(). Hier wird die VAT aufgesplittet in den Länderkode und die VAT-Nummer und als Parameter übergeben. Es wird das Prüfegebnis valid ausgewertet und evtl. Fehler.
Weiterlesen: Prüfung der USt-IdNr. (EU-VAT-ID) in Joomla/VirtueMart per VIES-Server (SOAP)
Kleine Sammlung von nützlichen MySQL-Befehlen
- Details
Diese kleine Liste zeigt einige MySQL-Befehle die auf Kommandozeile eigegeben werden können.
Aufgabe | Kommando Beispiel |
Anzeigen der Tabellenstruktur |
DESCRIBE tabelle; |
löschen einer Spalte |
ALTER TABLE tabelle DROP COLUMN spalte; |
Einfügen einer Spalte |
ALTER TABLE tabelle ADD spalte tinyint(4) NULL; |
Ändern von Spalteneigenschaften |
ALTER TABLE tabelle MODIFY spalte NOT NULL; |
VirtueMart-Menü oder VirtueMart-Menüelement im Joomla-Backendmenü nicht vorhanden
- Details
Wenn nach einem Update oder einer Installation von VirtueMart das VirtueMart-Menü im Backend nicht vorhanden ist, liegt das häufig daran, dass in der Datentabelle für die Menü-Einträge (Verwaltet in der Tabelle #_menu) die Componenten-Id component_id bei der Erzeugung der Einträge nicht korrekt gesetzt wurde. Dann sollte man in der Tabelle #_extensions schauen, welche ID die Komponente VirtueMart erhalten hat - i.d.R. wird dass eine ID > 10000 sein. Mit dieser ID führt man dann folgende SQL-Anweisung z.B. in phpMyAdmin aus:
UPDATE `#_menu` SET `component_id` = '10000' WHERE `component_id` = 10036;
Der Grund warum es vermutlich bei der Installation von VM zu diesem Fehler kommt, ist dass vor der Installation schon ein Virtuemart-Plugin für die Erweiterung xMap gibt. Beim Versuch die Komponenten-ID für VM zu ermitteln, findet der VM-Installer irrtümlich die ID dieses Plugins und verwendet dann diese fälschlich.
Weiterlesen: VirtueMart-Menü oder VirtueMart-Menüelement im Joomla-Backendmenü nicht vorhanden
Gantry Template-Overrides erzeugen
- Details
Zielstellung - Regelkonformes Override von Joomla-Templates
Seit Gantry in der Version 4.1 ist das Handling von Templates-Overrides erweitert worden und deshalb noch mal etwas komplexer geworden. Der Grund für die Erweiterung ist, dass man nun für die verschiedenen Joomla-Versionen unterschiedliche Templates ablegen kann. Damit sind Projekt z.B. noch einfacher migrierbar.
Das Verwirrende ist, dass es nun noch mehr Positionen im Joomla-Projekt-Pfad gibt an denen Template-Dateien liegen und man nur schwer sieht für welche Collection sich Joomla beim Durchsuchen der möglichen Plätze entscheidet. Deshalb hier kurz eine Beschreibung was sich abspielt und welche Auswirkungen dies hat, wenn man eigenen Template-Overrides erstellen möchte ohne dabei Core-Scripte zu modifizieren.
Ich setze voraus, dass Gantry als Template-Framework eingesetzt wird und z.B. eine auf Gantry basierendes eigenes Template eingesetzt wird. Das eigene Template kann auch ein fremdbezogenes Template auf Gantry-Basis sein, wie z.B. die von RocketTheme.
Grundlegendes zum Verständnis und Override-Pfad-Kollektion
Alle Joomla-Original-Templates liegen in den jeweiligen Komponenten-Verzeichnissen. Am Beispiel der Content-Kategorie-Templates blog.php und blog-item_php wäre das z.B. dieser Pfad: components/com_content/view/templ/category/.
Mit RokCandy im Joomla-Gantry-Template eine Modulposition mit Cover-Background-Image füllen
- Details
Zielstellung - Responsive Background-Grafik als Cover
Es gibt Templates, so z.B. Osmosis von RocketTheme, die arbeiten sehr intensiv mit Modulen als Content. Dabei werden im Grid-Layout von Gantry auch gern Grafiken als Hintergundbilder für Module verwendet. Wenn man konsequent responsiv gestaltet, ist das mit den Grafikhintergründen mitunter problematisch, denn die Module können im Grid-Layout je nach Bildschirmauflösung / Gerät sehr unterschiedliche Seitenverhältnisse haben. Trotzdem sollen die Grafiken modulfüllend und sinnvoll platziert angezeigt werden. Sinnvoll heißt, dass das Motiv der Grafik nicht durch schlechten Schnitt verunstaltet wird.
Zweckmäßig ist also hier mit der background-size - Angabe cover zu arbeiten und das Bild durch background-position vertikal und horizontal einzufügen. Sollte sich das Seitenverhältnis des Modulblocks z.B. von horizontal zu vertikal ändern, muss evtl. zusätzlich die Platzierung angepasst werden. Es ist also notwendig auf diese Responsive Darstellung dynamisch zu reagieren, was allein durch css-Style nicht erreicht werden kann, sondern durch JavaScript dynamisch unterstützt werden muss.
Aufbau und Pflege Mehrsprachiges Projekt unter Joomla 2.5/3.x mit jDiction
- Details
Einrichten der Sprachen unter Joomla
Installation weiterer Sprachen unter Joomla:
- Hauptmenü > Erweiterungen > Sprachen: Hier rechts oben den Button [Sprachen installieren] klicken, und aus der erscheinenden Liste die Wunschsprachen auswählen und über den [Installieren]-Button oben rechts hinzufügen.
- Hauptmenü > Erweiterungen > Sprachen: über den Registerreiter Inhalt die Content-Sprachen aktivieren, veröffentlichen und konfigurieren. Wichtig: In der Liste müssen die absofort zu verwendenden Sprachen aktiviert (veröffentlicht) sein (gründes Häkchen). I.d.R. ist die Zugriffsebene für die Sprachen nicht gesetzt. Das lässt sich nur bewirken, wenn man die jeweilige Sprache anklickt und im Sprach-Dialog "Inhaltssprache bearbeiten" wenigstens einmal speichert. Dann wird als Zugriffsebene public (öffentlich) übernommen, oder eben eine andere falls gewünscht einstellen.
- Wichtig: In genau diesem gleichen Dialog werden für die Seite die verschiedenen Meta-Beschreibungen und Meta-Keywords hinterlegt. Diesem sollten für die Suchmaschinen hier sauber gepflegt werden!
- Damit Joomla korrekt die Mehrsprachigkeit unterstützt, muss das Joomla-System-Spach-Plugin aktiviert werden: Hauptmenü > Erweiterungen > Plugins: Filter "Sprachen", Auswahl in der Liste "System - Sprachenfilter" und aktivieren. Hier kann eingestellt werden, ob für die Sprachauswahl die Browsereinstellung genutzt werden soll, oder die Seiteneinstellung. I.d.R. verwendet man die Browsereinstellung wenn man dem Userwunsch entsprechen will. Manchmal kann man aber auch erzwingen wollen, dass das Projekt/die Seite die Sprache vorgibt/erzwingt. Weitere Einstellmöglichkeiten in diesem Plugin sind zu beachten.
- Mitunter braucht man spezielle Sprachkürzel (Tags) z.B. wenn man für Kanadisch-Französische Seiten under Deutsch-Österreichische oder Deutsch-Schweizerische Seiten Inhalte anbieten muss. Dann muss dem System z.B. fr-CA, de-AT, de-CH bekannt gemacht werden. Das kann man im System-Plugin "Sprachenkürzel" eintragen. Das Sprachkürzel-Plugin zu aktivieren, macht aber nur Sinn, wenn man überhaupt einen davon umdefinieren will, was außer bei o.g. Ausnahmen kaum der Fall sein sollte.
Weiterlesen: Aufbau und Pflege Mehrsprachiges Projekt unter Joomla 2.5/3.x mit jDiction
Datei- und Verzeichnismonitoring von Webprojekten zur Erkennung von Fremdmodifikationen und Seiten-Kompromitierungen
- Details
Einleitung
Gründe und Ursachen für Seitenkompromitierungen
OpenSource-Software wie Joomla haben viele Vorteile, aber auch einige wenige Nachteile. Einer dieser Nachteile ist, dass die offenen Quellscripte auch durch Hacker analysiert werden können, um so Schwachstellen im Code zu erkennen, die evtl. wenig erfahrene Programmierer im Code zugelassen haben. Diese Schwachstellen können dann gezielt durch Hacker genutzt werden, um sich unerlaubt Zugriff auf Ihr Projekt zu verschaffen. Ziel dieser Kompromitierung Ihrer Webseite ist dann häufig, die Modifikation von Projektdateien oder das Einspeisen eigener Dateien. Manchmal passiert das sehr versteckt, manchmal sehr offensichtlich in dem Ihre Seite quasi übernommen wird und mit neuen Inhalten erscheint. Das ist sehr kritisch z.B. aus folgenden Gründen:
- Diese neuen Fremdinhalte können Rechtsverstöße darstellen, z.B. in dem rechtsradikale Propaganda veröffentlicht wird oder der Download von Daten angeboten wird z.B. pädophiler Natur o.a. Als Eigentümer dieser Seite haften Sie dann umfänglich für diese Veröffentlichungen.
- Nicht zu selten werden auch Malware oder Viren über kompromitierte Seite in den Umlauf gebracht. Damit können Sie den Rechner der Besucher Ihrer Seiten schädigen und auch Ihrem Image oder das Ihres Webangebotes.
- Letzt genannt - ohne damit vollständig zu sein, erkennen auch Suchmaschinen wie Google kompromitierte Seiten und sperren diese für die Suche. Das ist bitter für Sie, weil es eine evtl. schon gute langwierig aufgebaute Platzierung in den Trefferlisten (Pagerank) zunichte macht. Es ist aufwendig dafür zu sorgen, dass die Suchmaschinen diese Indizierung wieder rausnehmen.
VirtueMart auch offline administrieren
- Details
Problembeschreibung
Hin und wieder hat man die Situation, dass man ein Joomla-Projekt komplett offline entwickeln möchte, was ich eigentlich prinzipiell mache. Wenn man dann gerade keine Online-Verbindung hat, weil z.B. das LTE-Netz mal keine Daten liefert, hat man ein Problem in Joomla zu administrieren. Komponenten von Joomla, wie z.B. VirtueMart 2 benötigen im Backend jQuery und laden diese JavaScript-Bibliothek bei google. Wenn diese nun also nicht geladen werden kann, dann läßt sich VirtueMart nicht administrieren.
Problemlösung
Das Problem kann also nur gelöst werden, wenn man die jQuery-Bibliotheken lokal lädt. Während man für das Frontend dies ganz einfach konfigurieren kann, gibt es dies fürs Backend nicht - das will sich immer, hart kodiert bei google bedienen.
Webseiten-Inhalte per Mausklick in Zwischenablage kopieren
- Details
Praxisfälle
Fall 1: Quelltextkopie
Wer programiert kenn diese Funktion. Oft werden auf Seiten Quelltexte abgebildet, die man nicht abtippeln will, der typische Programmierer ist faul und will's kopiern. Wenn diese Quelltext der besseren Lesbarkeit syntaktisch formatiert sind (Syntax-Highlighting), dann ist das mit dem Kopiern wieder nicht so einfach. Deshalb haben diese Quelltext-Container oft eine Kopieren-Button, der den Plain-Text mit einem Mausklick in die Zwischenablage übergibt.
Fall 2: Artikelnummern
Für ein Kundenprojekt stand folgende Aufgabe: Weil der Webshop besser strukturiert ist als die interne Warenwirtschaft, arbeiten die Mitarbeiter viel mit dem Webshop um z.B. Produkte zu suchen und zu kalkulieren. Aus den Anzeigelisten wollen diese dann einfach Informationen per Zwischenablage in Ihre Angebotserstellung übernehmen. Hierfür soll ein Klick auf das Produkt genügen, um die Übergabe zu ermöglichen. Diese Funktion wurde z.B. Joomla-Shop VirtueMart implementiert.
Problembeschreibung
Seite dem letzten Jahr (ca. 2013) hat es sich bei den Browserherstellern durchgesetzt, die Copy-to-Clipboard-Funktionen gänzlich zu sperren. Früher war es durch setzen von Sicherheitseinstellungen in den Browser zumindest noch möglich das automatische Kopieren von Inhalten der Website über Script-Funktionen zuzulassen.
Weiterlesen: Webseiten-Inhalte per Mausklick in Zwischenablage kopieren
- Teilweiser Transfer von Daten zu einem anderen Joomla-Projekt mittels Akeeba Backup
- Ändern des Tabellen-Präfixes von MySQL-Datenbanken
- Limit-Select-List in VM funktionierend konfigurieren
- VirtueMart 2: Pagination Limit-Select-Box korrekte Funktion und Konfiguration
- Konfigurationen und Anpassungen für das VM-Categorie-Menu/-Navigator (de)
- Mit phpMyAdmin Daten direkt aus Excel importieren
- Aus dem Internet-Explorer heraus einen Link mit FireFox öffnen
- Wenn Erfolgsmeldungen in VirtueMart verschwinden
- Suchen und ersetzen von URL-kodierten Sonderzeichen in MySQL-Datenbankfeldern
- Android USB-PC-Verbindung funktioniert nicht (MTP-Treiber)
- Korrekte numerische Sortierung von Datensätzen aus komplexen String-Feldern
- Spamschutz mit BreezingForms unter Joomla 2.5 ... 3.x
- 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
Seite 5 von 14