Я заменяю «блок» в PHP из массива:
function replaceBlock($name, $toRep) {
preg_match('/\<\?block_s= '.$name.' \?\>([\s\S]*?)\<\?block_e= '.$name.' \?\>/', $this->tpl, $blockContent);
$arr = [];
foreach ($toRep as $key => $value) {
$arr[] = $this->replaceVar($value['vars'], 'block_v', $blockContent[1]);
}
$this->tpl = preg_replace('/\<\?block_start= '.$name.' \?\>([\s\S]*?)\<\?block_end= '.$name.' \?\>/', implode($arr), $this->tpl);
}
My $name
- это что-то вроде массива 'blockname'
et c.
My $toRep
выглядит так:
Array
(
[0] => Array
(
[var] => value1
)
[1] => Array
(
[var] => value2
)
)
Это мой HTML код:
{block_start testblock}
<div>
<p>{var}</p>
</div>
{block_end testblock}
Когда я сейчас вызываю функцию replaceBlock()
с именем блока testblock
и моим $toRep
массив, я получу это:
<div>
<p>value1</p>
<p>value2</p>
</div>
Это именно то, что я хочу.
Но теперь мой вопрос:
Как я могу заставить эту функцию работать с блоком внутри блока?
Например, у меня теперь есть этот блок:
{block_start testblock}
<div>
<p>{var}</p>
{block_start subblock}
<span>{subvar}</span>
{block_end subblock}
</div>
{block_end testblock}
Но я не знаю, как структурировать мой массив или как заставить мою функцию работать с многоступенчатым массивом, чтобы он заменял блок в блоке.