Liebe Besucher,

herzlich Willkommen!

Dies ist eine simple Web-Visitenkarte mit etwas Bootstrap-CSS und Grunt/npm, schnell in PHPStorm eingerichtet.

Mit PHP arbeite ich seit mehr als 20 Jahren und kam im Laufe dieser Zeit mit so gut wie allen damit verbundenen Frameworks, SDKs/Apps in Kontakt. Mein Kundenkreis umfasst Medien-Agenturen, Fondshäuser und Online-Shops.

Was passierte

Wetterdaten via open-meteo.com

Auf einer Event-Seite waren Wettervorhersagen je nach Veranstaltungsort gewünscht.
Diese sollten frei gestaltet werden können und nicht auf externen Javascript-Code beruhen.

Auf Basis von PHP-Weather konnte eine entsprechende PHP-Klasse umgesetzt werden.

Glossar und Sprachen ES/FR/IT via DeepL

Verwaltung von Glossars und Erweiterung um drei Sprachen für schweiss-shop.de.

Automatisches Translator-Skript über gesamte Datenbank hinweg.

Realisierung einer Informationsseite für eine Landesapothekenkammer

Umsetzung eines eigenes Layouts und zusätzliche Funktionen.

Basierend auf PHP-CMS einer Agentur.

DeepL API, zweite Umsetzung

Für schweiss-shop.de wurde eine komplette DeepL-Integration realisiert.

Der Shop ist aktuell deutsch/englisch für 160.000 Artikel und die gesamte UI.

Content Security Policy

Eine größere Website wünschte die Integration einer Content Security Policy.

Erforderlich waren Umsetzungen von style-Angaben in HTML und exakte Definition der verschiedenen Parameter.

DeepL API

Für goabase.net wurde eine Anbindung zur DeepL API im Backend integriert.

Das ermöglicht die direkte Übersetzung von Seitentexten, FAQ, News etc. in den von DeepL angebotenen Zielsprachen.

PayPal v1 auf v2 updaten

Auf Schweiss-Shop.de - einer individuelle Shop-Lösung - läuft seit Januar 2018 PayPal v1, auch als "PayPalPlus" bekannt. Die dort eingesetzte Lösung ist eine von mir geschriebene PHP-Klasse, die das benötigte JSON für eine Kaufabwicklung bildet und mit der PayPal-API via cURL kommuniziert. Es galt nun, die PayPal-Kaufabwicklung auf Version 2 zu aktualisieren.

PayPal v1 und v2 unterscheiden sich nicht nur deutlich in ihrer Datenstruktur und einigen cURL-Parametern, sondern auch in ihrem Workflow. So war bei der Entwicklung zu entscheiden, ob nun ein fertiges SDK eingesetzt wird oder die eigene PHP-Klasse für v1 auf v2 upgedatet werden könnte. Der Vorteil einer SDK ist nicht nur fertiger PHP-Code, sondern auch der Komfort fertiger JSON-Objekte. Andererseits ist SDK-eigenes Vokabular zu lernen, sind noch Helper-Methoden zu coden und die Fehlersuche z.T. aufwendiger - insbesondere, wenn es dann Shop-spezifisch wird.

Die bestehende Klasse auf Version 2 zu aktualisieren war der effizientere Weg. Im Prinzip war nur das JSON und ein paar cURL-Parameter umzustellen. Dann kann diese Klasse mit dem neuen PayPal-JavaScript-SDK verknüpft werden, um die Daten von Server zu Server zu übertragen (und nicht über den jeweiligen Browser/Client). Der neue Workflow musste noch an den Shop gekoppelt werden, dann war der Release Candidate fertig.

Newsletter von Bounces säubern

Ein Newsletter erzeugt zwischen 0,5% bis 1% ungültige Empfänger, je nach Sendefrequenz und Pflege der Adressen. Mithilfe eines Scripts geschieht das nun automatisch vor dem Versand.

MySQL-Optimierung

Eine bestehende Datenbank aus 300 Tabellen und 50GB Datenvolumen war optimal auf einem 32GB RAM Server einzurichten. Die individuelle Beobachtung über mehrere Wochen und eine Analyse mit Hilfsmitteln wie mysqltuner.pl wurde dabei durchgeführt. Optimierungen in der MySQL-Konfiguration, den Indices und einigen SQL-Statements wurden durchgeführt. Das Ergebnis war eine höhere Performance, u.a. durch 7fach weniger temporäre Tabellen.

Kontrast / Schriftgrößen in Less und Sass

Für eine Website, basierend auf CSS/Less, und eine weitere, basierend auf CSS/Sass, wurden Features benötigt, um per Klick zwischen den Normalfarben und Schwarz/Weiß zu wechseln, sowie die Schriftgrößen nach Belieben zu ändern.

Cookie-Banner coden

Für zwei Websites eines mittelgroßen Landesverbandes waren Cookie-Banner zu programmieren, die Google-Dienste erlaubten und bei Bestätigung auf entsprechenden Seiten diese direkt nachluden. Desweiteren sind sie gegen Banner-Add-Ons immun, die diese automatisch bestätigen.

Gambio-Shop Import

Ein Schmuck-Shop benötigte für die CSV-Preisliste eines Großhändlers mit 13.000 Datensätzen einen individuellen Import. Dabei wurden sowohl Einzelartikel als auch Artikel mit Varianten (z.B. Ringe in verschiedenen Größen) übertragen. Das programmierte Tool ist durch Konfigurationsparameter individuell an verschiedene CSV-Formate anpassbar.

10.000 PHP-PDFs archivieren

In einem mittelgroßem Schulungsbetrieb wird seit 2010 FPDF eingesetzt, um dynamisch Rechnugen und Zahlungserinnerungen als PDF zu generieren.

Aufgabe war, alle seitdem erstellten Rechnungen/Zahlungserinnerungen erneut zu erzeugen und diese als PDF-Datei abzulegen. Dazu sollte bei jeder Änderung der Rechnungsadresse eine neue Version der Rechnung und eine Storno-PDF generiert werden, was ein internes Historien-System nötig machte.

JSON-LD - eine simple Syntax für Informationen aller Art

Strikt hierarchisch aufgebaut, lassen sich Daten abbilden, die sich in einer relationalen Datenbank über mehrere Tabellen verteilen würden.

Die standardisierte und auf RFD basierende Syntax und Struktur erlaubt einen für uns Menschen leichter lesbaren Austausch zwischen den Systemen.

Welche Daten zusammengefasst werden, hängt allein von ihrer Verfügbarkeit (und den Möglichkeiten des Codes, sowie dem Verständnis von JSON-LD) ab, wobei für viele Elemente weitere Pflichtfelder notwendig sind - bei einem Preis z.B. die Währung.

Suchmaschinen wie Google können Inhalte besser indizieren, wenn sie in korrektem JSON-LD vorliegen, während besser indizierte Seiten wiederum besser dargestellt werden können.

Inspirierende Beispiele und Vorlagen finden sich viele, wobei m.E. die von Jay Holtslander herausstechen.

Example Product
  {
    "@context": "http://schema.org",
    "@type": "Product",
    "@id": "https://www.schweiss-shop.de/111AHD0031",
    "brand": {
      "@type": "Organization",
      "name": "Fronius",
      "url": "https://www.schweiss-shop.de/fronius/"
    },
    "manufacturer": {
      "@type": "Organization",
      "name": "Fronius"
    },
    "name": "Fronius Schwei\u00dfhelm Vizor 4000 Plus - ein neues Seherlebnis im Hellzustand",
    "disambiguatingDescription": "Fronius Schwei\u00dfhelm Vizor 4000 Plus - ein neues Seherlebnis im Hellzustand - Bestellen Sie jetzt zu einem hevorragenden Preis-/Leistungs-Verh\u00e4ltnis!",
    "description": "Eine besondere Neuheit bei diesem Modell ist die bis zu 4-mal hellere Sicht im Hellzustand und im Schleifmodus. Das ist Weltrekord! der Vizor 4000 Plus definiert die Sichtverh\u00e4ltnisse f\u00fcr Schweisser neu. ",
    "sku": "111AHD0031",
    "identifier": "111AHD0031",
    "mpn": "42,0510,0230",
    "gtin": "9007947247780",
    "logo": "https://www.schweiss-shop.de/pics/firmen_logos/fronius_international_logo.png",
    "url": "https://www.schweiss-shop.de/fronius/fronius-schweisshelm-vizor-4000-plus-ein-neues-seherlebnis-im-hellzustand/111AHD0031",
    "image": {
      "@type": "ImageObject",
      "thumbnailUrl": "https://www.schweiss-shop.de/images/111AHD0025S.jpg",
      "url": "https://www.schweiss-shop.de/images/111AHD0026B.jpg",
      "width": 1200,
      "height": 1200
    },
    "offers": {
      "@context": "http://schema.org",
      "@type": "Offer",
      "category": "Zubeh\u00f6r > Arbeitsschutz > Automatikhelm Diverse",
      "priceCurrency": "EUR",
      "price": 415.31,
      "priceValidUntil": "2021-07-15",
      "availability": "https://schema.org/InStock",
      "itemCondition": "https://schema.org/NewCondition",
      "url": "https://www.schweiss-shop.de/fronius/fronius-schweisshelm-vizor-4000-plus-ein-neues-seherlebnis-im-hellzustand/111AHD0031",
      "seller": {
        "@type": "Organization",
        "name": "Schweiss Shop",
        "url": "https://www.schweiss-shop.de"
        }
      }
  }
Sitemaps.xml - simpel und effizient

Die Aufgabe der Sitemap ist, die Seiten sicher an Google und andere Bots zu liefern.
Nach unsereren Erfahrungen hat sich dabei diese Struktur als die effizienteste erwiesen:

  • "sitemap.xml" als index, die auf diese weiteren hinweist. Dort findet sich das <lastmod> für die folgenden:
  • "sitemap_index.xml" mit den Menupunkten bzw. Haupt-Links
  • "sitemap_themeA.xml" mit dem jeweiligen Thema, z.B. Produkte, Hersteller, Hersteller, Reports, News usw.
  • "sitemap_themeB_50000.xml" zusätzlich mit Zahl als Kennzeichen, wenn es mehr als 50.000 sind
  • "sitemap_themeB_100000.xml" zweite Datei mit den weiteren Seiten zum gleichen Thema
PageSpeed

Es standen PHP/HTML/JS-Arbeiten an einem Kunden-Shop u.a. mit Swiper an, der sich dadurch beim Google PageSpeed um 8 Punkte auf 94 verbesserte.

ERP

Der Task ERP-Schnittstelle zur (original) AS/400 basiert auf einer Zend 1-Erweiterung, die entsprechend anzupassen war.

Frameworks

Und nachdem ich zuerst auf meiner Maschine ein Symfony-System erstellt hatte, um das als künftige Basis zu verwenden, habe ich mich dann später doch für Laravel entschieden, zumal ich bereits eine kleine Vue-App geschrieben hatte. Besser gleich damit weitermachen... ;)

Root-Server

Bei Hetzner wird von mir ein Root-Server betrieben, der neben PHP, Apache und MySQL auch memcached, Redis, Postfix, Dovecot, restic, fail2ban, rkhunter, logwatch, goaccess usw. umfasst. Für die Mails wurde DKIM/DMARC und ein IMAP-Server eingerichtet, was eine entsprechende "zone file" nötig machte.

Wer Bedarf hat, kann mich gerne buchen, weitere Infos und Kontaktdaten finden sich unten.

Hobbys

Habe ich auch ;)

Backgammon und seit neuestem wieder Schach!