AdWz WP-Plugin 18 – Regex & PHP

(AdWz; Auf dem Weg zum) WP-Plugin 18 – Regex & PHP

Im diesen Teil der AdWz-Serie werden die regulären Ausdrücke aus AdWz WP-Plugin 17 – Regex im Plugin mg404rewrite eingesetzt.

mg404_PostProxy

1
2
3
4
5
function mg404_PostProxy($content) {
	$formregex = "/" . get_option('mg404_postproxy_formregex') . "/i";
	$content = preg_replace_callback($formregex,'mg404_FormProcessor',$content);
	return $content;
}

In der für den Ausgabepuffer angemeldeten Funktion (Zeile 1) wird der reguläre Ausdruck (Zeile 2) aus der Konfiguration gelesen und für die Suche aufbereitet. In PHP werden reguläre Ausdrücke am Anfang und Ende durch ein / gekennzeichnet. Das Zeichen i führt diesen Ausdruck unabhängig der Groß- / Kleinschreibung aus.

Die Funktion preg_replace_callback (Zeile 3) meldet für diesen regulären Ausdruck eine Funktion an. Sollte im Ausgabepuffer eine Form mit der Methode Post vorhanden sein, wird die angemeldete Funktion (mg404_FormProcessor) zur Auswertung ausgeführt.

mixed preg_replace_callback  ( mixed $pattern  , callback $callback  , mixed $subject  [, int $limit  [, int &$count  ]] )

Jeder Treffer wird der Funktion übergeben und ausgewertet zurück gegeben. Am Ende wird der modifizierte Ausgabepuffer überschrieben und gesendet.

mg404_FormProcessor

1
2
3
4
5
6
7
8
9
10
11
12
13
function mg404_FormProcessor($match) {
	$formtag = $match[0];
	$urlregex = "/" . get_option('mg404_postproxy_urlregex') . "/i";
	preg_match($urlregex,$formtag,$actionurl);
	$linkregex = "/" . get_option('mg404_postproxy_linkregex') . "/i";
	if (preg_match($linkregex,$actionurl[1]))
		return $formtag;
	$postproxyurl = get_option('siteurl') . "/" . get_option('mg404_postproxy_url');
	$formtag = str_replace($actionurl[1],$postproxyurl,$formtag);
	$formtag .= "<input type='hidden' name='mg404_posturl' value='" . $actionurl[1] . "'/>";
	$formtag .= "<input type='hidden' name='mg404_level' value='" . substr_count(get_option('mg404_postproxy_url'),'/') . "'/>";
	return $formtag;
}

In der für den regulären Ausdruck angemeldeten Funktion (Zeile 1) wird der Treffer als Array übergeben. Mehrere Treffer würden im Array durch Gruppierung (Klammerung) im regulären Ausdruck übergeben, da in diesem Fall nur ein Treffer vorhanden sein kann wird der erste Index (0) in der Variable formtag (Zeile 2) abgelegt. Die URL der Aktion wird extrahiert (Zeile 4) und in actionurl zur weiteren Verarbeitung abgelegt. actionurl wird überprüft (Zeile 6) und bei einem nicht vorhandenen Permalink wird die Funktion vorzeitig ohne Veränderung verlassen (Zeile 7). Im anderen Fall wird das Form-Tag überarbeitet und zusätzlich der ursprünglichen URL der Aktion zurück gegeben (Zeile 9-12).

weiter …

Der Ausgabepuffer wird der Konfiguration entsprechend ausgewertet. Zu guter Letzt muss PostProxy zur Simulation die angefragte URI überschreiben und die Datei index.php von WordPress einbetten. Ein weiteres Skript wird demnächst im nächsten Teil der AdWz-Serie erstellt.

Tags: , , , ,

Hinterlasse eine Antwort