public function resolve(MarkupContainer $container, ComponentTag &$tag) { if ($tag instanceof PiconTag && $tag->getName() == 'head') { return new HeaderContainer(self::HEADER_ID); } else { if ($tag instanceof PiconTag && $tag->isHeaderTag()) { if ($container instanceof WebPage) { //@todo this block is UNTESTED $header = new HeaderContainer('header' . $container->getPage()->getAutoIndex()); $inner = new TransparentMarkupContainer('picon_header'); $inner->setRenderBodyOnly(true); $header->add($inner); return $header; } elseif ($container instanceof HeaderContainer) { $header = new TransparentMarkupContainer('picon_header'); $header->setRenderBodyOnly(true); return $header; } throw new \RuntimeException('<picon:head> tag was in an invalid location. It must be outside of <picon:extend> and <picon:panel>'); } } return null; }
protected function onComponentTagBody(ComponentTag $tag) { $this->getResponse()->write('<head>'); parent::onComponentTagBody($tag); $page = $this->getPage(); $headerResponse = new HeaderResponse($this->getResponse()); PiconApplication::get()->getComponentRenderHeadListener()->onHeadRendering($this, $headerResponse); $page->renderHead($headerResponse); $self = $this; $callback = function (Component &$component) use($headerResponse, $self) { $component->renderHeadContainer($self, $headerResponse); return Component::VISITOR_CONTINUE_TRAVERSAL; }; $page->visitChildren(Component::getIdentifier(), $callback); $this->getResponse()->write('</head>'); }