PlayersGarden: String kann auch noch anders aussehen.

Beitrag lesen

Wie wäre es mit einer erschöpfenden Definition von dem was reingehen kann und von dem was rauskommen soll?

Grundsätzlich könnte der gesamte HTML Code einer Webpage da durchlaufen.

Für das Sprach-Template-System ist ein String wie folgender vorgesehen:

{LG:FOO_BAR|foo|bar}

LG: <- sagt aus, dass er in der DB suchen soll
FOO_BAR <- ist der Identikator für den Sprachbaustein
foo und bar sind Elemente, die in den Sprachbaustein eingesetzt werden.

Beispiel des Sprachbaustein:

Du hast %1 von %2 Foobars.

Dann ist %1 = foo und %2 = bar.

  
/**  
 * This function creates a string consisting of where-clauses of all placeholders found in the string  
 *  
 * @param string $string  
 *  
 * @return string  
 */  
private function _getWhereSqlString($string) {  
	$pattern = '/\{LG:(?<identifier>[\w]+)([\|[A-Za-z0-9]+]*)\}/';  
	$count = preg_match_all($pattern, $string, $matches, PREG_SET_ORDER);  
	var_dump('<pre>', $match, '</pre>');  
	$where = '';  
	if ($count > 0) {  
		$count_where = 0;  
		foreach ($matches as $match) {  
			if ($count_where == 0) { $where .= 'WHERE '; }  
							else { $where .= ' OR '; }  
			$where .= 'lg_identifier = \''.$match['identifier'].'\'';  
			$count_where++;  
		}  
	}  
	return $where;  
}  

Natürlich wird in der Funktion noch keiner der %n Phrasen gespeichert, darum kümmer ich mich dann, wenn ich eine Lösung zum Herausfiltern der Bausteine '|foo' oder '|bar' hab.
Zuerst will ich in dem Array $match die '|bar' einzeln haben. Natürlich am liebsten ohne '|'.
Bei dem Beispiel oben entsteht ein multidimensionales Array wo einmal 'FOO_BAR' als value mit dem Key 'identifier' gespeichert wird und ein value wo '|foo|bar' gespeichert wird - mit einem numerischen Key.

  
array(6) {  
  [0]=>  
  array(4) {  
    [0]=>  
    string(26) "{LG:TEASER_TEXT_1|FOO|BAR}"  
    ["identifier"]=>  
    string(13) "TEASER_TEXT_1"  
    [1]=>  
    string(13) "TEASER_TEXT_1"  
    [2]=>  
    string(8) "|FOO|BAR"  
  }  
}