protected function tokenAreaToCode($token) { //$token_props = var_export($token->get_all_props(),1); $token_props_parts = array(); $local_templates = self::getAreaLocalTemplates($token); $parsed_props = array(); foreach ($token->getAllProps() as $tp => $tpval) { $c_part = "'" . $tp . "' => "; if ($tp === 'suit') { $res_suit = Suitable::compileAreaSuitProp($tpval, $local_templates, $this->template_set_name); $c_val = "'" . $res_suit . "'"; } elseif (preg_match("~^`.+`\$~s", $tpval)) { $c_val = trim($tpval, '`'); } elseif (preg_match('~\\$~', $tpval)) { $c_val = $this->parseExpression($tpval); } else { $c_val = "'" . addslashes($tpval) . "'"; } $parsed_props[$tp] = $c_val; $token_props_parts[] = $c_part . $c_val; } $token_props = 'array(' . join(", ", $token_props_parts) . ')'; $res = ''; $res = '<?php $context->push(array("area_infoblocks" => fx::page()->getAreaInfoblocks(' . $parsed_props['id'] . ")));\n?>"; $render_called = false; foreach ($token->getChildren() as $child_num => $child) { if ($child->name == 'template') { $child->setProp('area', $token->getProp('id')); if (!$render_called) { if ($child_num > 0) { $res = "<?php\n" . 'if ($_is_admin) {' . "\n" . 'echo self::renderArea(' . $token_props . ', $context, \'marker\');' . "\n" . '}' . "\n?>\n" . $res . '<?php echo self::renderArea(' . $token_props . ', $context, \'data\');?>'; } else { $res .= '<?php echo self::renderArea(' . $token_props . ', $context);?>'; } $render_called = true; } $this->registerTemplate($child); } else { $res .= $this->getTokenCode($child, $token); } } if (!$render_called) { $res = '<?php echo self::renderArea(' . $token_props . ', $context);?>' . $res; } $res .= "<?php \$context->pop();\n?>"; return $res; }