bassebhu skrev:
Ska det in nån global till create_function?
Så kan man göra, men det är inte rätt! Undvik globals som pesten, åtminstone för saker som inte ska vara globala egentligen. Föreställ dig t ex att du anropar funktionen rekursivt i en framtida version...
bassebhu skrev:
Är det möjligt att få det så att man skulle kunna skriva t.ex.:
$structure = '<dt>{strtoupper($title)}</dt>
<dd>{$datetime}</dd>
<dd>{$content}</dd>';
och den känner av om man har lagt något runt variablerna? t.ex. strtoupper eller en egen funktion eller nåt annat. Så att man kan behandla dem som vanliga variabler i princip.
Så kan man göra, men det är inte rätt! En betydligt bättre metod är att sätta text-transform: uppercase; i CSS för elementen ifråga.
Fast jag lade till en sådan funktion ändå. Du måste definiera alla tillåtna funktioner i förväg. Du kan självklart ange både egna och PHP's funktioner. Syntaxen i din mall blir lite annorlunda, {strtoupper$title} istället för {strtoupper($title)} men det får du stå ut med. (...eller skriva om regexen själv §e )
$structure = '<dt>{strtoupper$title}</dt>
<dd>{$datetime}</dd>
<dd>{$content}</dd>
<dd>{someinvalidtransform$content}</dd>
<dd>{$someothershit}</dd>';
// De två sista raderna i mönstret är ogiltiga data i testsyfte.
$structure_allowed_items=Array('title', 'datetime', 'content');
echo getarchive('nyheter', $structure, $structure_allowed_items);
function parse_structure_item($m0, $m1, $m2, $structure, $structure_allowed_items, $row) {
$structure_allowed_transforms=Array('strtoupper' => strtoupper);
if (in_array($m2, $structure_allowed_items)){
if (in_array($m1, $structure_allowed_transforms)){
// The item and transform are valid. Replace the variable, transform the item and return the result.
$transform = $structure_allowed_transforms[$m1];
return htmlspecialchars($transform($row[$m2]));
}else if(!$m1){
// The variable is valid. Replace the variable and return the result.
return htmlspecialchars($row[$m2]);
}
}
return $m0; // The string and/or transformation function is invalid. Return the string unmodified
}
function getarchive ($parent, $structure, $structure_allowed_items) {
// $sql = "SELECT * FROM archive WHERE parent = '".$parent."'";
// $result = mysql_query($sql);
// Testdata
$row = Array('title' => 'Jungel-Jim', 'datetime' => '06-07/96', 'content' => 'Parsuitel Orbitelum');
$data = NULL;
// while($row = mysql_fetch_array($result)) {
$datastr = preg_replace('/\{([a-z0-1_]+)?\$([a-z0-1_]+)\}/ie',
'parse_structure_item(\'\0\', \'\1\', \'\2\', $structure, $structure_allowed_items, $row);',
$structure);
$data .= $datastr;
// }
return $data;
}