function smarty_function_component(array $params, Smarty_Internal_Template $template) { /** @var CM_Frontend_Render $render */ $render = $template->smarty->getTemplateVars('render'); $component = null; if (isset($params['name'])) { $name = $params['name']; unset($params['name']); if (0 === strpos($name, '*_')) { $name = $render->getClassnameByPartialClassname(mb_substr($name, 2)); } $component = CM_Component_Abstract::factory($name, $params); } if (isset($params['view'])) { $view = $params['view']; unset($params['view']); if (!$view instanceof CM_Component_Abstract) { throw new CM_Exception('Unexpected component instance'); } $component = $view; } if (!$component) { throw new CM_Exception('Missing component, either pass `name` or `view`.'); } $renderAdapter = CM_RenderAdapter_Component::factory($render, $component); return $renderAdapter->fetch(); }
function smarty_function_component(array $params, Smarty_Internal_Template $template) { /** @var CM_Frontend_Render $render */ $render = $template->smarty->getTemplateVars('render'); if (empty($params['name'])) { trigger_error('Param `name` missing.'); } $classname = null; $name = $params['name']; unset($params['name']); if (0 === strpos($name, '*_')) { $name = $render->getClassnameByPartialClassname(mb_substr($name, 2)); } $component = CM_Component_Abstract::factory($name, $params); $renderAdapter = CM_RenderAdapter_Component::factory($render, $component); return $renderAdapter->fetch(); }
/** * @param array|null $additionalParams */ public function reloadComponent(array $additionalParams = null) { $componentInfo = $this->_getViewInfo('CM_Component_Abstract'); $componentId = $componentInfo['id']; $componentClassName = $componentInfo['className']; $componentParams = CM_Params::factory($componentInfo['params']); if ($additionalParams) { foreach ($additionalParams as $key => $value) { $componentParams->set($key, $value); } } $component = CM_Component_Abstract::factory($componentClassName, $componentParams); $renderAdapter = CM_RenderAdapter_Component::factory($this->getRender(), $component); $html = $renderAdapter->fetch(); $frontend = $this->getRender()->getGlobalResponse(); $autoId = $frontend->getTreeRoot()->getValue()->getAutoId(); $componentReferenceOld = 'cm.views["' . $componentId . '"]'; $componentReferenceNew = 'cm.views["' . $autoId . '"]'; $frontend->getOnloadHeaderJs()->append('cm.window.appendHidden(' . json_encode($html) . ');'); $frontend->getOnloadPrepareJs()->append($componentReferenceOld . '.getParent().registerChild(' . $componentReferenceNew . ');'); $frontend->getOnloadPrepareJs()->append($componentReferenceOld . '.replaceWithHtml(' . $componentReferenceNew . '.$el);'); $frontend->getOnloadReadyJs()->append('cm.views["' . $autoId . '"]._ready();'); }
/** * @param CM_Component_Abstract $component * @return array */ protected function _getComponentRendering(CM_Component_Abstract $component) { $render = $this->createRender(); $renderAdapter = CM_RenderAdapter_Component::factory($render, $component); $html = $renderAdapter->fetch(); $globalResponse = $render->getGlobalResponse(); return ['js' => $globalResponse->getJs(), 'html' => $html, 'autoId' => $globalResponse->getTreeRoot()->getValue()->getAutoId()]; }