Lieber Sven Rautenberg,
danke für Deinen Denkanstoß!
Mein persönlicher Favorit ist, wie zu Beginn grandios ein "Template" für das Select-Feld definiert wird, und am Ende mit einem recht opulenten regulären Ausdruck die erzeugte Optionsliste hineingequetscht wird. WTF?
Das "grandiose" Template ist in wirklichkeit ein vollständiges HTML-Dokument, welches für die Einstellungen-Seite aus einer HTML-Datei geladen wird. Im obigen Beispiel wurde das Dokument auf das <select>-Element verkürzt.
Meine Lösung nutzt nun SimpleXML, um diese lästige verschachtelte Stringerzeugung etwas besser zu strukturieren. Ob das Konstrukt letzten Endes besser lesbar ist (also der PHP-Code, nicht der erzeugte HTML-Code) ist eine andere Frage.
$template = file_get_contents('template-settings-menue.html');
$timezone_list = simplexml_load_string('<?xml version="1.0" encoding="UTF-8"?><select name="timezone"></select>');
$og = null;
foreach (DateTimeZone::listIdentifiers() as $v) {
if (preg_match('~^(America|Antartica|Arctic|Asia|Atlantic|Europe|Indian|Pacific)/(.*)$~', $v, $e)) {
if ($og === null || $og['label'] != $e[1]) {
$og = $timezone_list->addChild('optgroup');
$og->addAttribute('label', $e[1]);
}
$o = $og->addChild('option', $e[2]);
$o->addAttribute('value', $e[0]);
}
}
$timezone_list = preg_replace('~(?is)^[^\r\n]*[\r\n]*~', '', $timezone_list->asXML());
$template = preg_replace(
'~(?is)<select name="timezone".*?</select>~',
$timezone_list,
$template
);
Liebe Grüße,
Felix Riesterer.
--
ie:% br:> fl:| va:) ls:[ fo:) rl:| n4:? de:> ss:| ch:? js:) mo:} zu:)
ie:% br:> fl:| va:) ls:[ fo:) rl:| n4:? de:> ss:| ch:? js:) mo:} zu:)