Davs,
Jeg har et problem med en funktion som jeg i noget tid har siddet og arbejdet på. Det den gør er at udtrække noget information ud af en "variable" og derefter loope et bestemt stykke text/html fra en extern fil. Variablen er bygget således op at det består af et tredimensionelt array. Eksempel: $this->block['blocknavn'][gange der skal loopes][reference der skal udskiftes] = værdien for udskiftelsen (håber det var forståeligt). Selve delen med at selve blokken bliver gentaget er der intet problem med, men der bliver kun lavet et replacement.
Koden til funktionen ser således ud:
protected function HandleBlocks($data)
{
// we set some basic vars
$block_delimiters = array('start' => "<!-- START BLOCK [BLOCKNAME] -->",
'end' => "<!-- END BLOCK [BLOCKNAME] -->");
$handled_blocks = NULL;
while(list($blockname,) = each($this->block))
{
$block_del = str_replace('[BLOCKNAME]', $blockname, $block_delimiters);
$block_del_desc = array('block_start_pos' => strpos($data, $block_del['start']) + strlen($block_del['start']),
'block_end_pos' => strpos($data, $block_del['end']));
$block_length = $block_del_desc['block_end_pos'] - $block_del_desc['block_start_pos'];
$str = substr($data, $block_del_desc['block_start_pos'], $block_length);
$block_iteration = count($this->block[$blockname]);
$edit_str = $str;
for($i = 1; $i < $block_iteration; $i++)
{
while(list($blockvar_key, $blockvar_value) = each($this->block[$blockname][$i]))
{
if(preg_match("(\\{(" . $blockvar_key . ")\\})", $edit_str, $match))
{
$edit_str = str_replace($match[0], $blockvar_value, $edit_str);
}
}
$handled_blocks .= ltrim($edit_str);
}
$return_data = str_replace($block_del['start'] . $str . $block_del['end'], $handled_blocks, $data);
}
return $return_data;
}
Eksempel:
jeg har en fil:
<!-- START BLOCK start -->
<table border="1">
<tr>
<td colspan="2">{titel}</td>
</tr>
<tr>
<td>{nyhed}</td>
<td>{poster}</td>
</tr>
</table>
<!-- END BLOCK start -->
Jeg sætter to blok-gentagelser og ovenstående kode bliver gentaget to gange. Lad os sige at første gange resultatet bliver udskrevet lad os sige at variablen er: $this->block['start'][1]['titel'] = 'test';
så vil {titel} i begge blokke bliver udskiftet med test.
Indtil videre vil jeg tro at det har noget med de sidste to loops at gøre og evt. noget med replacement opbyggelsen at gøre.