예제 #1
0
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();
}
예제 #2
0
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();
}
예제 #3
0
 /**
  * @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();');
 }
예제 #4
0
파일: Abstract.php 프로젝트: cargomedia/cm
 /**
  * @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()];
 }