protected function parsePositions()
{
// init array to store parsed positions data
$positions = array();
// fetch variables from main template
$mainVariables = $this->tpl->getAssignedVariables();
// loop all positions
foreach ($this->record['positions'] as $position => $blocks) {
// loop all blocks in this position
foreach ($blocks as $i => $block) {
// check for extras that need to be reparsed
if (isset($block['extra'])) {
$block['extra']->execute();
// fetch extra-specific variables
if (isset($positions[$position][$i]['variables'])) {
$extraVariables = $positions[$position][$i]['variables'];
} else {
$extraVariables = $block['extra']->getTemplate()->getAssignedVariables();
}
// assign all main variables
$block['extra']->getTemplate()->assignArray($mainVariables);
// overwrite with all specific variables
$block['extra']->getTemplate()->assignArray($extraVariables);
// parse extra
$positions[$position][$i] = array('variables' => $block['extra']->getTemplate()->getAssignedVariables(), 'blockIsEditor' => false, 'html' => $block['extra']->getContent());
// Maintain backwards compatibility
$positions[$position][$i]['blockIsHTML'] = $positions[$position][$i]['blockIsEditor'];
} else {
$positions[$position][$i] = $block;
if (array_key_exists('blockContent', $block)) {
$positions[$position][$i]['html'] = $block['blockContent'];
}
}
}
// assign position to template
$this->tpl->assign('position' . \SpoonFilter::ucfirst($position), $positions[$position]);
}
$this->tpl->assign('positions', $positions);
}