Startseiten-Produkt-Slider und Boxen in JTL in beliebiger Reihenfolge und Postion
- Details
Problembeschreibung
Immerhin hat der JTL-Shop schon diverse CMS-typische Funktionen, mit denen es auch möglich ist an Seitenpositionen ergänzende Informationen als Blöcke anzuzeigen. Diese Blöcke werden in JTL "Boxen" genannt. Dazu gibt es ein Set an Startseitenboxen die templateabhängig (z.B. wie bei EVO) als Produktslider präsentiert werden. Damit werden z.B. solche Funktionen angezeigt wie: "Neueste Produkte", "Beliebtesten Produkte", "Top-Produkte", "Aktionsprodukte" etc. Weiterhin gibt es viele andere Boxen und u.a. auch frei gestaltbare "Custom-Boxen", die beliebig mit Text oder HTML-Inhalten befüllt werden können.
Leider ist es im Template EVO (4.0.6) so, dass für die Startseitenboxen und Custom-Boxen festgelegte und eingeschränkte Ausgabepositionen und Funktionen gibt. In meinen betreuten Projekten zeigte sich hier eine gewisse Unflexibiliät, was die auftraggeberseitig gewünschte Anordnung der Boxen betraf. Da sollte schon mal die Box X mit ihrem Inhalt oberhalb des Seitenhauptinhaltes, aber zwischen den Top-Produkten und den Neuesten Produkten stehen und eine weitere Box unterhalb des Contents, wo dann auch weitere der o.g. Produktslider erscheinen sollten. Also eine beliebige, vermischte und ober- und unterhalb des Seitenhauptinhaltes angegeordnete Anzeige. Das ist mit EVO von hausaus nicht möglich. Nachfolgend beschreibe ich eine Scriptlösung, mit der man dieses Manko beheben kann.
Weiterlesen: Startseiten-Produkt-Slider und Boxen in JTL in beliebiger Reihenfolge und Postion
Vereinheitlichen der Kollation in Datenbanken
- Details
Problembeschreibung
Wer komplexe CMS nutzt, wie Joomla oder Wordpress, wird, wenn er sich mal seine Datenbanken genauer anschaut, mitunter festellen, dass durchaus nicht alle Tabelle die gleiche Kollation verwenden. Selten stellt das ein Problem da, aber unter bestimmten Bedingungen z.B. "gejointe" SQL-Abfragen kann das dann doch mal zu einer Fehlermeldung führen und eine Seite lahmlegen. Solche Fehlermeldungen könnten folgenden Wortlaut haben:
1267 Illegal mix of collations (utf8mb4_general_ci,COERCIBLE) and (utf8_general_ci,IMPLICIT) for operation 'like'
Was die Kollation bedeutet und welche man wan verwendet, will ich hier nicht ausführen, weil es dazu reichlich Erklärseiten im Internet gibt. Nur kurz: Die Kollation spielt eine Rolle bei der Sortierung von Treffern. Speziell für Sprachen mit Sonderzeichen wird damit eine Regelwerk und eine zugehöriger interner Allgorithmus festgelegt, über den Treffer sortiert werden - z.B. wie ein "ä" zu berücksichtigen ist. Üblicherweise sollte man für CMS die COLLATION utf8_unicode_ci verwenden.
Hier mal ein Link, wo es schön erklärt wird: https://www.pixelfriese.de/unterschied-zwischen-utf8_general_ci-und-utf8_unicode_ci/
Sollten Sie z.B. oben aufgeführte Fehlermeldung erhalten, dann müssen Sie natürlich handeln und z.B. über phpMyAdmin die Kollation von Tabellen ändern und vereinheitlichen. Betrifft es nur wenige Tabellen, ist das mit einzelnen SQL-Befehlen in der Form ALTER TABLE `praefix_action_logs` COLLATE utf8_unicode_ci; schnell erledigt. Sind aber viele Erweiterungen in Ihrem CMS installiert worden oder das Projekt ggf. schon mehrfach migriert worden, werden Sie evtl. sehr viele unterschiedliche Kollationen finden. Das wird dann mühseelig, diese einzeln Tabelle für Tabelle zu ändern.
In GRAV Kontaktformular-Erfolgsseite einen Sprunganker mit smoothScroll nutzen
- Details
Problembeschreibung
Wer im CMS GRAV (Gravity) Formulare nutzt, wird feststellen, dass diese die Feedbackmeldung i.d.R. an gleicher Stelle ausgeben, wo vorher das auszufüllende Formular war. Hierbei passiert aber ein Seiten-Reload. Infolge dessen beginnt die Seitenanzeige ganz oben. Wenn aber das Formular, bzw. dessen Success-Meldung sehr weit unten ist, dann sieht der Seitennutzer diese Meldung erst wenn er auf Verdacht mal nach unten scrollt. Natürlich machen das viele Nutzer nicht, sondern fragen sich etwas hilflos, ob das Formular korrekt gesendet hat. Es wäre also notwendig, dass nach dem Absenden und dem Seitenreload gleich automatisch zur Erfolgsmeldung gesprungen wird.
Umsetzung im Datail
Für oben beschriebene Aktion ist das Script user/plugins/gantry5/engines/nucleus/templates/formdata.html.twig verantwortlich. Damit wir dieses GRAV-Core-Script nicht modifizieren müssen, erstellen wir davon eine Override-Kopie im Pfad: user/themes/g5_helium/templates/.
Weiterlesen: In GRAV Kontaktformular-Erfolgsseite einen Sprunganker mit smoothScroll nutzen
yaml Formular Framework - Default mit Zeilenumbruch (newline, break)
- Details
Ein paar YAML Form Framework Lösungen
In diesem nachfolgenden Text habe ich ein paar Problemlösungen zusammengetragen, die mir bei der Arbeit mit YAML-Formularen und der damit erzeugten Feldinhalte untergekommen sind.
Problembeschreibung:
Z.B. in einigen PHP-basierten CMS wie Joomla, Wordpress, Gravity, Drupal, Magnolia wo z.B. durch das Templateframework Gantry 5 u.a. YAML als Formular Framework verwendet wird, ist das Erstellen von Formularen dank dieser Konfigurationssprache recht einfach. Allerdings kann man manchmal auf Probleme stoßen, bei denen eine Lösungsfindung nicht recht einfach ist. Grund dafür ist, dass die Dokumentation der Markup-Language YAML mit ca 80 Seiten ein Schwergewicht ist und sperrig zu lesen. Ein weiterer Grund ist, dass die Google-Suche nicht immer brauchbar zu Lösungen führt.
Hier sollen deshalb ein paar kleine Tipps folgen, die das eine oder andere Problem lösen.
Lösung für das Problem Zeilenumbrüche
Wenn man in YAML z.B. eine Feldtyp textarea.textarea erstellt und diesem Textfeld eine Default-Wert übergeben möchte der mehrzeilig ist, z.B. weil man zeigen will, dass pro Zeile ein Keyword einzutragen ist, dann kann man nicht einfach in den Default-Text mit Enter arbeiten. Enter erzeugt eine neue Zeile und damit beginn in YAML ein neuer Knoten. Das führt zwangsläufig zu einem Fehler. Lösungen gibt es dazu gleich einige in YMAL. Die einfachste ist den Zeilenumbruch mit \n zu codieren. Das alleine wird aber ignoriert. Damit der YMAL-Interpreter das korrekt auswertet, muss der gesamte String in doppelte Gänsefüsschen gesetzt werden! Keine Hochkommas verwenden!
Weiterlesen: yaml Formular Framework - Default mit Zeilenumbruch (newline, break)
Joomla Manifest-XML-Scripte für Module, Komponenten und Plugins - Know-How-Sammlung
- Details
Dies ist eine kleine Sammlung von Know-How, Links und Tricks rund um das Thema der Joomla-Manifest-XML-Scripte zur Installation und Konfiguration von Module, Komponenten, Templates und Plugins oder auch Libraries. Es tangiert ebenfalls die Form-Fields die innerhalb von Joomla für die Konfigurationsformulare zur Verfügung stehen. Leider sind manche Dinge nicht so allumfassend dokumentiert oder es bestimmte Situationen in der Entwicklung eigener Erweiterungen für die man Work-Arounds benötigt.
Wichtige Links mit Dokumentationen
Hier zunächst eine Linklistenzusammenstellung für wichtige Dokumentationen/Manuals zu dem o.g. Themenbereich:
- Liste aller Formularfelder die derzeit gültig oder in Entwicklung sind:
https://docs.joomla.org/Standard_form_field_types/de - Wie man ein eigenen Formularfeld-Type erstellt, also eines welches es in dieser Form so noch nicht gibt, oder eines welches es schon gibt, aber leicht erweiterte Features liefern soll (durch Vererbung und Überschreiben von Methoden)
https://docs.joomla.org/Creating_a_custom_form_field_type/en - allg. Aufbau/Struktur Manifest-Dateien:
https://docs.joomla.org/Manifest_files - Entwicklung eigener MVC-Components am Bsp. Add-a-Map inkl. Beschreibung Manifest-Aufbau: https://docs.joomla.org/J3.x:Developing_an_MVC_Component/Adding_a_Map
- Manifest für eine eigene Joomla-Library: https://www.ostraining.com/blog/how-tos/development/how-to-package-joomla-libraries/
Weiterlesen: Joomla Manifest-XML-Scripte für Module, Komponenten und Plugins - Know-How-Sammlung
BreezingForms Meldungen in den sichtbaren Bereich bringen
- Details
Problembeschreibung
Die Formularkomponente BreezingForms für Joomla meldet an den Seitenbenutzer diverse Informationen, so z.B. wenn Pflichtfelder nicht ausgefüllt wurden, oder das Formular erfolgreich gesendet wurde. Da Webseiten heutzutage wg. der mobilen Geräte häufig sehr lang sind, oder Formulare sehr viele Felder haben können, kann es passieren, dass diese Meldungen, die bei BreezingForms oberhalb des Formulars eingeblendet werden, oder auf einer Feedbackseite ausgegeben werden, nicht im sichtbaren Bereich liegen. Der Seitenbesucher sieht diese Meldungen nicht, und ist verwundert, oder gar genervt darüber, nicht zu erfahren, was jetzt nach dem Klick auf dem Absendebutton genau passiert ist.
Beide oben genannten Grundprobleme - also die Feedbackmeldung nach dem erfolgreichen Senden und die Fehlermeldungen bei Fehleingaben oder nicht gefüllten Feldern, sind jedoch vom Verhalten etwas unterschiedlich.
Weiterlesen: BreezingForms Meldungen in den sichtbaren Bereich bringen
Wenn der ZIP-Upload im Joomla-MediaManager scheitert
- Details
Problembeschreibung ZIP-Upload per MediaManager
Für einen Importfilter innerhalb eine Joomla-Projektes wollte ich dem Kunden über den MediaManager die Möglichkeit zur Verfügung stellen, ZIP-Archive hochzuladen. Dabei zeigte sich ein fast unlösbares Problem. Während z.B. Archive vom Typ GZ oder 7Z unproblematisch hochgeladen werden konnten, gelang das mit unter Windows erstellten ZIP-Archiven einfach nicht. Kontinuierlich erhielt ich beim Uploadversuch die Fehlermeldung:
Fehler
Ursachensuche und gescheiterte Workarounds
Die Ursachensuche gestaltete sich aufwändig. Natürlich hatte ich zunächst vermutet, dass es an den Optionen des MediaManagers liegt. Deshalb hatte ich in die Erlaubten Dateiendungen zip,ZIP, etc. hinzugefügt. Auch in die zu ignorierenden Dateiendungen ZIP,zip einzutragen war keine Lösung. In das Feld Erlaubte Dateitypen (MIME): habe ich dann noch probiert die Liste zu erweitern durch folgende Einträge: application/x-zip,application/x-gzip,application/zip,application/x-7z-compressed,application/x-zip-compressed,application/octed-stream.
Das sind zwar alles Maßnahmen, die nicht unwichtig sind, damit es überhaupt funktionieren kann, aber der Fehler blieb.
Weiterlesen: Wenn der ZIP-Upload im Joomla-MediaManager scheitert
Virtuemart Anpassung Rechnungsinhalte und Layout
- Details
Know-How-Sammlung für die Anpassung des Layoutes und der inhaltlichen Ausgaben von Rechnungen nach eigenen Bedürfnissen in Virtuemart 3.x.
Die Templates
Sämtliche Templates/Vorlagen für die Erstellung der Rechnungen liegen im Ordner components/com_virtuemart/views/invoice/tmpl/. Von hieraus können Scripte hergenommen und als Overrides in das eigene Template-Verzeichnis abgelegt werden, um nicht die Virtuemart-Core-Scripte modifizieren zu müssen, denn hier bestünde bekanntlich immer die Gefahr, dass dort vorgenommene Anpassungen bei nächsten Updates überschrieben werden würden.
Im o.g. Ordner befinden sich 3 Datei-Hauptgruppen von Vorlagen, die jeweils einen unterschiedlichen Präfix haben:
- ohne Präfix sind die Templates die für die PDF-Erzeugungen relevant sind
- der Präfix mail_html erzeugt die html-Mails
- der Präfix raw_html erzeugt die RAW-Texte-Inhalte in der Mail, die man in der Regel kaum zu Gesicht bekommt und deshalb bei Anpassungen gern vergessen werden.
Dann gibt es jeweils diverse Sub-Template wie z.B. order, items, vendor etc. Diese Sub-Templates können jeweils durch Unteraufrufen eingebunden werden. Wenn man sich z.B. im PDF-invoice-Template befindet (invoice.php) kann mit $this->loadTemplate('items') das Templatescript invoice_items.php eingebunden werden. Auf gleiche Weise kann man sich seine eigenen Schnippsel erstellen und inkludieren.
Ab und zu muss man bei der Templatebezeichnung aufpassen, denn diese sind zwischen den o.g. Templategruppen nicht immer identisch. Während z.B. die Produktzeilen beim PDF invoice_items.php heißt, wird bei den HTML-Mails der Dateiname mail_html_pricelist.php verwendet. Nicht ganz konsequent.
Weiterlesen: Virtuemart Anpassung Rechnungsinhalte und Layout
Joomla-Komponenten erzeugen einen Konflikt zwischen MooTools und jQuery (modal.js / SqueezeBox)
- Details
Problembeschreibung
Manche Komponenten in Joomla nutzen MooTools, andere und mittlerweile das Joomla selbst verwenden jQuery. Es kann passieren, dass beide JavaScript-Frameworks geladen werden. Das führt jedoch häufig zu Konflikten, weil beide Frameworks den Kurzbezeichner $ verwenden um angesprochen zu werden. Grundsätzlich ist das in Joomla längst kein Problem mehr, selbst dann wenn man beide Frameworks gleichzeitig nutzen will. Zum einen ist gebräuchlich eine jQuery-Methode namen noConflict() einzubinden und zu nutzen. Zum anderene ist es notwendig diese dazu in der korrekten Reihenfolge zu laden. Dies verhindert Konflikte im gleichen Namensraum.
Aber darum muss sich nicht jede Komponente oder der Webmaster der Seite mehr selbst kümmern. Dafür hat Joomla schon diverse Methoden zur Verfügung gestellt, die das korrekte Handling sicherstellen. Wichtig ist nur, dass die Komponte, die z.B. jQuery verwenden will, zur Sicherheit diese Joomla-Methoden verwendet - zum einen das Einbinden der Frameworks über die Klasse JHtml::_(...) und zum anderen die evtl. notw. Reihenfolge und Konfliktvermeidung JHtml::_('behavior.framework', true);.
Für das Joomla Fancy TagCloud-Module eigene Themes erstellen
- Details
Problembeschreibung
Es gibt zwar für das Joomla-Module Fancy TagCloud viele Konfigurationsmöglichkeiten, aber leider ist darüber nicht alles vollständig konfigurierbar. Im Zuge der Umstellung von Projekten auf DSGVO-Konformität bestand ein Bemühen darin, den Zugriff des Projektes auf externe Ressourcen wir z.B. Fonts vom Google-Font-Server zu verhindern. Fancy TagCloud hat diese Einbindung von Fonts fest in Scripte verankert. Es ist nicht konfigurierbar lokale Fonts zu verwenden. Da die Style-Anweisungen auch aus PHP-Scripten kommen, ist es schwer zu verhindern, dass die Fonts von Fremdservern geladen werden. Die einzig Chance bestand darin das Theme-Script anzupassen in dem diese Fonts von e10f949fcaacdb195442bfb5062d59de-gdprlock geladen werden.
Lösung
Immerhin bietet Fancy TagCloud die Möglichkeit an im Modul wahlweise alternative Themes zu laden. Zwar wird nur ein einziges im Installationspaket mitgeliefert, aber es ist doch recht einfach daraus weitere Themes zu abzuleiten. In diesem eigenen Theme kann man dann seine gewünschten Modifikationen vornehmen ohne Angst haben zu müssen, dass durch ein Update des Modules diese Modifikationen überschrieben werden würden.
Dazu sind zwei Schritte notwendig:
Weiterlesen: Für das Joomla Fancy TagCloud-Module eigene Themes erstellen
Das Formular "Fragen zum Produkt" in Virtuemart um Felder erweitern
- Details
Problembeschreibung
Virtuemart bietet in der Produkt-Detail-Seite einen Button mit einem Link zu einem Formular, über welches der Seitennutzer eine Frage zum Produkt stellen kann. Vielen Shopbetreibern ist dieses Formular mit seinen angebotenen Feldern zu dürftig. Es fehlen ggf. wichtige Felder um mit dem Kunden in Kontakt treten zu können. Nur die E-Mail-Adresse ist einfach zu wenig. Deshalb trat ein Kunde mit der Bitte an mich heran, diese Formular um die Felder Straße-und-Hausnummer, PLZ-Ort, Telefon und Betreff zu erweitern. Zunächst hatte ich befürchtet, dass man dazu Core-Scripte modifizieren müsste. Jedoch stellte sich heraus, dass die Lösung zum einen recht einfach ist, und zum anderen keine Core-Scripte betreffen muss. Alles gelingt durch Erzeugen von Template-Override-Scripten im einen Joomla-Template. Diese Beitrag beschreibt den Weg zur Lösung.
Lösung in drei Schritten
Natürlich wäre es vom sauberen Stil her notwendig, speziell das Abholen der gesendeten Formularinhalte über das Control-Script components/com_virtuemart/views/askquestion/view.html.php zu realisieren. Dort gehört die Request-Abfrage der Feldinhalte und das Bereitstellen der Inhalte für die Mail-Sende-Aktion eigentlich hin. Nur, das ist eben ein Core-Script und nicht über das Overriding eingebunden. Deshalb sollte man eine Modifikation dort vermeiden. Betroffen sind sind schließlich drei PHP-Template-Scripte und und eine paar CSS-Styles, die man in die custom.css einfügen kann.
Weiterlesen: Das Formular "Fragen zum Produkt" in Virtuemart um Felder erweitern
Maßnahmen zur Beschleunigung von Joomla-Projekten
- Details
Eines der Kriterien für eine gutes Suchmaschinenranking und eine positive Nutzererfahrung ist die Geschwindigkeit mit der Seiten geladen werden. Neben dem rein subjektiven Eindruck gibt es auch Webservices, mit denen man objektive Tests durchführen kann. Eine Seite ist z.B. der PageSpeed-Test der Google-Deverloper-Seiten. Hier werden neben einer Bewertung auch Maßnahmen zur Beschleunigung vorgeschlagen.
Für einen Seitenbetreiber eines Joomla-Projektes stellt sich nun also die Frage, wie man die eigene Seite schneller machen kann. Dazu möchte ich nachfolgend ein paar Maßnahmen ausführen.
Weiterlesen: Maßnahmen zur Beschleunigung von Joomla-Projekten
PHP get_class_methods liefert kein Ergebnis obwohl Methoden in der Klasse vorhanden sind
- Details
Problembeschreibung: get_class_methods liefert NULL
Ich hatte letztens in einem PHP-Projekt eine neue Klasse programmiert. Über den PHP-Befehl get_class_methods (s. PHP-Manual) sollte ein anderes Script die Methoden dieser php-class auslesen und in einem Pulldown-Selectfeld zur Auswahl zur Verfügung stellen. Das Ergebnis, was die get_class_methods() lieferte war jedoch immer NULL, es wurden keine Methoden erkannt und als Resultat der Abfrage geliefert. Bei anderen class-Scripten funktionierte dieser PHP-Befehl jedoch zuverlässig.
Die Lösung war sehr versteckt
Nachdem ich diverse Dinge probiert hatte und schon ziemlich verzweifelt war, und den Fehler in allen möglichen und unmöglichen Ursachen vermutete, was die Lösung schließlich sehr einfach aber versteckt: Ich programmiere mit der IDE PhpStorm unter Windows. Beim Neuanlegen von Scripten wurde als der Zeilenumbruch-Standard für Windows CRLF verwendet.
- Verhindern dass ENTER ein Formular absendet - statt dessen Verhalten wie Tabulator-Taste
- Vorgehensweise beim Umbenennen von Bildern in Virtuemart
- Welche Bedeutung hat der Unterstrich bei SASS-Scripten
- Virtuemart: Sprachabhängige Verfügbarkeitsanzeige, fallabhängiges Stylen und weitere Verfügbarkeitsanzeigen
- Fonts in Gantry 5 einbinden, die nicht vom google-Server geladen werden
- Eigene Gantry 5 Style-Formulare anlegen
- Verwendung von CLi in GRAV-Projekten
- Gantry 5 Layouts anpassen
- Erstellung eines Kontaktformulars im CMS GRAV (gravity)
- Update von MySQL z.B. unter XAMPP und auftretende Probleme und Fehlerquellen
- Wo speichert Gantry 5 seine Daten
- Gantry-Klassen richtig verwenden - kleine Tipps
- Überschriften Tags in Joomla 3 (H1, H2, H3 ...)
- E-Mail Cloaking in Gantry-5 Template Particles
- PHP-Server-Monitor (Website-Verfügbarkeitsüberwachung)
- Logo im Seitenkopfbereich verkleinern beim Scrollen nach unten
- Gantry Template - Grid-Blöcke in der Höhe synchronisieren (equal height)
- c54e4e5635912ef26f54b51cd9a13fa6-gdprlock keine Seite erreichbar - Login und Shop-Bezahlung nicht möglich
- FTP-Protokoll oder wget nutzen für Datentransfer von Webserver zu Webserver
- ProjectFork Änderung der Benachrichtigungsmails bei Dokumentenuplaod
Seite 1 von 14