Sie erinnern sich: In dieser Reihe geht es darum, Inserate in unseren Blog einzufügen und diese zu steuern. Nun können wir den Absatz oder besser den Index des Array-Elements in einer Variablen speichern. Wenn das Inserat oben positioniert werden soll, ist es das erste Element und wenn es unten positioniert werden soll, ist es das letzte Array-Element.
Wenn wir uns an den count-Befehl erinnern, wissen wir, dass er die Anzahl der Elemente eines Array ermittelt. Nun müssen wir eins abziehen, um den höchsten Index in $cntPara zu erhalten. Wir haben aber auch gelernt, dass wir dem nie vertrauen dürfen, da sich ja Löcher im Index befinden könnten und daher der letzte Index nicht dem berechneten Wert entspricht. In diesem Fall ist es aber anders: Denn wir haben das Index automatisch mit explode erstellt und es noch nicht verändert. Daher können wir ausnahmsweise so vorgehen.
Um den mittleren Absatz herauszufinden, benötigt man nur ein wenig Mathematik. Wir ermitteln zuerst den höchsten Index und dividieren ihn danach durch zwei. Damit haben wir genau die Hälfte der Elemente, also den Index, der genau in der Mitte des Arrays liegt. Das kann aber in fünfzig Prozent der Fälle eine Fließkommazahl sein, nämlich dann, wenn wir eine ungerade Zahl als höchsten Index haben. Daher müssen wir das Resultat mit dem Befehl intval in eine ganze Zahl umwandeln, um es als Indexzahl benutzen zu können.
Befehl: intval
Syntax: intval($var, $base)
Parameter:
$var (obligatorisch)
Ein Wert oder eine Variable, die zu einer Ganzzahl (integer) konvertiert werden soll.
$base (optional)
Die Basis bzw. das Zahlensystem, das als Basis für die Konvertierung benutzt werden soll als Ganzzahl (beispielsweise 10 für das Dezimalsystem oder 16 für das Hexadezimalsystem). Wird der Parameter weggelassen, so wird 10 als Basis verwendet.
Erklärung: Ermittelt die Ganzzahl von
$var.
Nun folgt eine Schönheitsoperation für unser Layout. Da wir die Breite des Inhalts oder besser des Artikels in unserem Stylesheet mit einem fixen Wert versehen haben, mussten wir dies auch in den Stilen im Array am Anfang unseres Filters tun. Jetzt kann es aber passieren, dass manche Beiträge in einer schmalen Version mit zwei Seitenleisten (auf der Startseite) oder in einer breiten Version mit einer Seitenleiste (in der Einzelansicht) angezeigt werden. Die Stile im Array sind aber für die breite Version ausgelegt. Daher ersetzen wir den absoluten Wert in diesen Stilen ganz einfach durch den passenden Wert für die schmale Version. Danach können wir das gesamte Inserat, also den Text und die passenden HTML-Tags mit dem style-Attribut in einer Variablen $txtInserat für die spätere Verwendung speichern.
Ganzen Artikel lesen...
...
//Falls nicht Einzelansicht den Stil anpassen
if (!is_single()) {
$styInserat[$posInserat] = str_replace("545px", "370px", $styInserat[$posInserat]);
}
//Inserat mit Stil versehen
$txtInserat = "".$txtInserat."";
...
Hier haben wir einen Trick verwendet: Da wir in der Variablen $posInserat die Position des Inserats gespeichert haben und diese genauso lautet wie der Schlüssel der Elemente im Array für die Stile, können wir diese Variable einfach als Schlüssel verwenden. Das erspart uns die Programmierung von weiteren Entscheidungen, die die Performance des Filters negativ beeinflussen würden.
Wir nutzen auch noch eine weitere Eigenart des Befehls str_replace: Falls nämlich der Suchstring nicht gefunden wird, gibt der Befehl den ursprünglichen Text wieder zurück. Auch das erspart uns die Programmierung einer Entscheidung, ob eine breite oder schmale Ansicht angefordert wurde und ob der Stil überhaupt verändert werden muss.
Nun können wir das Inserat in den passenden Absatz einfügen. Am Besten ist es diesen am Anfang zu platzieren, denn damit lässt er sich in HTML leichter positionieren. Danach löschen wir den Inhalt von $content, da wir in dieser Variablen den neuen Inhalt mit dem enthaltenen Inserat ablegen werden.
Es ist eine gute Praxis, nicht immer wieder neue Variablen anzulegen, denn diese verbrauchen am Webserver Speicherplatz. Wir müssen immer daran denken, das PHP-Programme am Server und nicht beim Anwender ausgeführt werden. Wenn unser Blog nun tausend Zugriffe innerhalb kürzester Zeit hat, und die Startseite zehn Artikel darstellt, würde unser Filter 10.000mal aufgerufen werden. Damit würde auch jede Variable 10.000mal im Speicher abgelegt werden und diesen verbrauchen.
Danach nutzen wir eine foreach-Schleife, um den Content wieder zusammenzustellen. Gleichzeitig fügen wir wieder die fehlenden p-Tags um jeden Absatz ein.
...
//Inserat in passenden Absatz einfuegen
$cntPara[$posPara] = $txtInserat.$cntPara[$posPara];
//bestehenden Content entfernen
$content = "";
//Absaetze mit Inserat zum Content zusammenbauen
foreach($cntPara as $Paragraph) {
$content .= "
".$Paragraph."
";
} //Ende foreach
} //Ende pruefen auf $valInserat und Ansicht
...
Innerhalb der Schleife nutzen wir eine neue Schreibweise, um Berechnungen durchzuführen. Wenn man eine Zuweisung zu einer Variablen durchführt und gleichzeitig eine einfache Rechnung ausführen will, kann man für diese Operation eine verkürzte Schreibweise verwenden.
Wenn wir zum Beispiel zur Variablen $summe den Wert 10 addieren wollen, können wir es wie folgt schreiben:
$summe = $summe + 10;
Es gibt aber auch die kurze Schreibweise, die so aussieht.
$summe += 10;
Wir lassen also den Variablennamen, der gleich der Zuweisungsvariablen sein muss, weg, und schreiben das Rechenzeichen vor den Zuweisungsoperator. Damit sparen wir uns ein paar Zeichen zum Eingeben und es ist einfacher und schneller zum Lesen. Diese Verkürzung funktioniert bei der Addition, der Subtraktion, der Division, der Multiplikation und auch bei der Verkettung von Zeichenketten, wie wir sie oben benutzt haben.

Dieser Textabschnitt ist dem Buch “PHP für WordPress – Themes und Templates selbst entwickeln” von Clemens Gull entnommen, das im Franzis-Verlag erschienen ist. Sie können es
hier direkt bestellen.

Clemens Gull
Lernen Sie die ganze Vielfalt vom Franzis Buch- und Softwareverlag kennen