Ich habe seit ca. zwei Jahrzehnten mal wieder so richtig Lust, was mit meiner Zenza Bronica ETR-S zu fotografieren; auch wenn ich noch nicht weiß, was ich mit den Negativen machen soll: Mittelformat-Scanner sind schon arg teuer.
Unsere Tulpen machen Fortschritte
Da es für den Garten noch zu kalt ist, gedeihen diese Tulpen bei uns im Wohnzimmer. Mal schauen, ob sie blühen werden.
Ein neues Plugin: Schnittstellen definieren (Ⅱ)
ILeo_Sitemap_Page
Bei den Daten der einzelnen Seiten habe ich wie besprochen auf die Elemente „changefreq“ und „priority“ verzichtet. Dafür können so viele Bilder wie gewünscht hinzugefügt werden.
/*
Deklariert Methoden und Konstanten für einen
Seiteneintrag der sitemap.xml
Author: Hermann J. Leopold
Email: hermann.leopold@leopoldnet.de
Date: 2017-02-01
/*
interface ILeo_Sitemap_Page
{
// Symbol des Url-Elements:
const csUrlSymbol = "url";
// Symbol für das Location-Elements
const csLocationSymbol = "loc";
// Symbol für das Zuletzt-geändert-Element
const csLastModSymbol = "lastmod";
// Hinzufügen der Bilder
// Was ein Bild ausmacht, wird in der
// ILeo_Sitemap_Image festgelegt.
function addImage(ILeo_Sitemap_Image $oImage);
// URL der Seite angeben.
function setLocation($sUrl);
// Datum der letzten Änderung angeben.
function setLastMod($sLastMod);
}
ILeo_Sitemap_Image
Die wichtigste Neuerung zum alten Plugin sitzt hier. Für jedes Bild können mehrere Texte hinterlegt werden. Die Möglichkeit, einen Link zur Lizenz zu hinterlegen habe ich behalten; wer weiß, ob es noch für was gut sein kann.
/*
Deklariert Methoden und Konstanten für einen
Bildeintrag in die sitemap.xml
Author: Hermann J. Leopold
Email: hermann.leopold@leopoldnet.de
Date: 2017-02-02
/*
interface ILeo_Sitemap_Image
{
// Symbol des Image-Elements
const csImageSymbol = "image:image";
// Symbol des Location-Elements
const csLocSymbol = "image:loc";
// Symbol des Untertitel-Elements
const csCaptionSymbol = "image:caption";
// Symbol des Aufnahmeort-Elements
const csGeoLoaction = "image:geo_location";
// Symbol des Titel-Elements
const csTitle = "image:title";
// Symbol des Lizens-Elements
const csLicense = "<image:license>";
// Ich wechsle hier von Loc auf Url,
// um Verwechslungen zu vermeiden.
function setUrl($sUrl);
// Angabe des Untertitels
function setCaption($sCaption);
// Angabe des Aufnahmeorts
function setGeoLocation($sGeoLocation);
// Angabe des Bildtitels
function setTitle($sTitle);
// Angabe der Lizens-Elements
function setLicense($sLicense);
}
Jetzt wird es Zeit für Konkretes.
Die letzten Blüten des flammenden Käthchens
Die letzten Blüten des flammenden Käthchens – und noch immer schön! 😃
Die Ranunkel verblüht
Ranunkel klingt nicht schön. „Gestern war ich beim Arzt, meine Ranunkeln entfernen lassen.“ „Bevorzugt im frischem Aas legt das Ranunkel bis zu 1000 Eier.“
Bestenfalls könnte es sich um Salat handeln. „Und dazu reichen wir frischen Ranunkel mit Öl und Essig.“ „Oh ja!“
Doch tatsächlich sind Ranunkeln sehr dekorative Blumen, so wie diese eine war, bevor sie verblühte.
Ein neues Plugin: Schnittstellen definieren (Ⅰ)
Ich mag Schnittstellen. Schnittstellen (engl. Interfaces) sind ein Instrument objektorientierter Programmierung und sollen – salopp gesagt – sicherstellen, dass verschiedene Programmteile verlässlich zusammen arbeiten können.
Dies spielt besonders dann eine Rolle, wenn Erweiterungen oder ähnliches später und/oder von anderen erstellt werden sollen.
Schnittstellen wären auch eine Möglichkeit für WordPress gewesen, jedoch wurde darauf verzichtet; wohl auch, da PHP keine reine objektorientierte Programmiersprache ist. Auch werden die meisten bei der Entwicklung eines Plugins darauf verzichten, ich jedoch nicht.
Mir gefällt, dass ich auf diese Weise Ideen und Anforderungen in Code festschreiben kann, ohne bereits ins Detail gehen zu müssen; und es entstehen Arbeitsanweisungen für die konkreten Klassen.
Folgende Schnittstellen sind mir in den Sinn gekommen:
ILeo_Sitemap_Xml
/*
Deklariert Methoden und Konstanten für eine XML-Datei
Author: Hermann J. Leopold
Email: hermann.leopold@leopoldnet.de
Date: 2017-01-30
/*
interface ILeo_Sitemap_Xml
{
// Ich mag die Idee, dass ein ständig gleich benötigtes Zeichen einmal festgelegt wird.
const csTagAuf = "<";
// Hier kann festgelegt werden, ob es nach einem XML-Tag einen Zeichenumbruch geben soll.
// const csTagZu = ">";
const csTagZu = ">\n";
// Das Wichtigste: Das XML-Dokument als String
function toString();
}
Datei: ILeo_Sitemap_Xml.php
Natürlich wird so eine XML-Datei nicht annährend vollständig beschrieben, doch für das Plugin reicht es. Da sich Inhalt und Attribute der Elemente unterscheiden, brauche ich dafür keine Methoden vorschreiben. Das Festlegen der spitzen Klammern als Konstanten ist nicht Humor, sondern es bringt Vorteile:
- Einmal festeglegt, kann man sie nur noch vergessen, aber nicht verwechseln. Da es auch nur eine Methode geben wird, in der die Klammern verwendet werden, sind die Tags stets richtig (oder stets falsch).
- Bei der schließenden Klammer kann festgelegt werden, ob es Zeilenumbrüche geben soll. Diese machen zwar das XML-Dokument lesbarer, aber auch größer.
ILeo_Sitemap
/*
Deklariert Methoden und Konstanten für eine sitemap.xml
Author: Hermann J. Leopold
Email: hermann.leopold@leopoldnet.de
Date: 2017-01-30
Verzeiht mein Denglish..
/*
interface ILeo_Sitemap
{
// Symbolname des Wurzelelements
const csRootSymbol = "urlset";
// Der übliche Dateiname, sollte er nicht ersetzt werden.
const csDefaultName = "sitemap.xml";
// Legt den Namen der Datei fest; bsp.: sitemap.xml
function setSitemapName($sName);
// Gibt die Url der Website an; bsp.: leopoldnet.de
// Wichtig, da die Verweise meist relativ sind, aber absolut sein müssen.
function setSiteUrl($sUrl);
// Der Pfad zum Speichern wird auch benötigt.
function setPath($sPath);
// Das Wichtigste: Seiten der sitemap hinzufügen.
// Was eine Seite ausmacht, wird in der ILeo_Sitemap_Page festgelegt.
function addPage(ILeo_Sitemap_Page $oPage);
}
Datei: ILeo_Sitemap.php
Der Name der Datei ist nicht festgelegt; somit wäre es möglich, für verschiedene Suchmaschinen unterschiedliche Sitemaps zu erstellen. Auch der Speicherpfad ist (im Rahmen des Möglichen) wählbar; es muss nicht das Wurzelverzeichnis sein.
Wichtig ist das hinzufügen der Seiten. Die dafür vorgesehene Methode ‚addPage()‘ erwartet einen Parameter vom (noch) unbekannten Typ ILeo_Sitemap_Page
. Alles, was eine Seite (aka Page) ausmacht, wird in der nächsten Schnittstelle deklariert.
Ein Gang im Park
Du hattest nur eine Aufgabe!
Du hattest nur eine Aufgabe: Blühen bis zum Wochenende! Und du hast versagt. Blöde Bume.
Daher habe ich mir auch gar nicht erst die Mühe mit Stativ gemacht und geblitzt. So!
Ein neues Sitemap-Plugin muss her!
Eine Möglichkeit, einer Suchmaschine alle Seiten mitzuteilen, ist die Bereitstellung einer Datei namens sitemap.xml. Diese Datei wird von WordPress nicht automatisch erstellt; doch es gibt Plugins, die den Job erledigen. Da mir vor vielen Jahren keines gut gefiel, hatte ich ein eigenes geschrieben.
Der übliche Aufbau einer sitemap.xml:
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>http://www.example.com/</loc>
<lastmod>2005-01-01</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
</urlset>
Beispiel von sitemaps.org
Unterhalb von <url> ist nur das "loc"-Element Pflicht, und im alten Plugin hatte ich auf die optionalen Elemente verzichtet.
"changefreq" ist bei einem Blog sinnlos; auch glaube ich nicht, dass sich irgendeine Suchmaschine davon beeinflussen lässt.
"priority" ist schon berüchtigt für den Schindluder, der damit getrieben wurde. Daher denke ich nicht, dass sich Suchmaschinen dafür interessieren.
"lastmod" hingegen lässt sich ermitteln und könnte nützlich sein. Ich setze es mit auf die Todo-Liste.
Somit sieht die bisherige sitemap.xml reichlich langweilig aus:
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>http://leopoldnet.de/</loc>
</url>
<url>
<loc>http://leopoldnet.de/impressum</loc>
</url>
<url>
<loc>http://leopoldnet.de/start-meiner-website-als-blog</loc>
</url>
<url>
<loc>http://leopoldnet.de/freezing-leafs</loc>
</url>
<!-- und so weiter -->
Die sitemap.xml von leopoldnet.de vom 28.01.2017
Und noch etwas fehlt: Die Übersichtsseiten der Schlagwörter und Kategorien – auf die Todo-Liste damit.
Die Bildererweiterung von Google
Google hat die sitemap.xml um Bildinformationen erweitert; da dies auf sitemaps.org nicht beschrieben wird, könnte es eine Eigeninitiative gewesen sein. Die Bilder müssen einer Seite zugewiesen werden; pro Seite sind 1000 Bilder erlaubt. Im Beispiel sähe es so aus:
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:image="http://www.google.com/schemas/sitemap-image/1.1">
<url>
<loc>http://ihrebeispielurl.de/beispiel.html</loc>
<image:image>
<image:loc>http://ihrebeispielurl.de/bild.jpg</image:loc>
</image:image>
<image:image>
<image:loc>http://ihrebeispielurl.de/foto.jpg</image:loc>
</image:image>
</url>
</urlset>
Beispiel von support.google.com
Sieht auch nicht besser aus, doch hier gibt es spannende, optionale Elemente:
<image:caption>
Dieses Element sieht Google für den Untertitel vor; WordPress wiederum hat ein Feld "Alternativtext". Auch ist das Feld "Beschriftung" denkbar.
<image:geo_location>
Anders als ich dachte, sind hier keine Koordinaten gewünscht, sondern der Ort als Klartext; zum Beispiel "Bremen, Deutschland". Leider stellt WordPress für Medien kein entsprechendes Feld zur Verfügung, die Information könnte ich unter "Beschreibung" einfügen, wobei eine Art Auszeichnung nötig wäre: loc{Bremen, Deutschland} oder so.
<image:title>
Hierfür scheint das Feld "Titel" wie geschaffen.
<image:license>
Sicher interessant, aber derzeit für mich nicht.
Ganz klar: Hier lassen sich deutlich mehr Informationen über die Sitemap übermitteln.
Die Todo-Liste
- "lastmod" hinzufügen
- Schlagwörter und Kategorien berücksichtigen
- Bilder mit Beschreibungen hinzufügen
Dann mache ich mich mal an die Arbeit
An der Lesum
Nach der Tiere-ohne-Kamera-Pleite bin ich versuchsweise mit dem 1:2,8/180mm losgezogen, um zu prüfen, ob sich so einfach Bilder damit im grauen Januar schießen lassen. Und nein, einfach ist es nicht.
Beim Fokussieren ist das Objektiv laut und erschreckt zumindest Meisen, und auf Dauer ist es doch recht schwer. Im Prinzip sollte es aber gehen.