/** * Generate the content of the popup. * * @param Item $item The metamodel item. * @param RenderSetting $settings The given metamodel settings. * * @return null|string */ protected function getPopupContent(Item $item, RenderSetting $settings = null) { if (!$this->model->addPopup) { return null; } if ($this->model->addPopup === 'attribute') { $popupAttribute = $this->getAttribute('popupAttribute', $item); $format = $this->getOutputFormat($settings, 'text'); $parsed = $item->parseAttribute($popupAttribute->getColName(), $format, $settings); if (isset($parsed[$format])) { return $parsed[$format]; } return $parsed['text']; } $value = $item->parseValue($this->getOutputFormat($settings), $settings); if ($settings) { $template = new Template($settings->get('template')); $template->view = $settings; } else { $template = new Template('metamodel_full'); } // Metamodels always expects an list of items. Instead of requiring customized templates, // we pretend of having multiple items. $template->details = $this->getDetailsCaption($item->getMetaModel()); $template->items = new Items(array($item)); $template->data = array($value); $template->caller = $this; return $template->parse($this->getOutputFormat($settings, 'html5')); }
/** * Render the list view. * * @param bool $blnNoNativeParsing Flag determining if the parsing shall be done internal or if the template will * handle the parsing on it's own. * * @param object $objCaller The object calling us, might be a Module or ContentElement or anything else. * * @return string */ public function render($blnNoNativeParsing, $objCaller) { $this->objTemplate->noItemsMsg = $this->getNoItemsCaption(); $this->objTemplate->details = $this->getDetailsCaption(); $this->prepare(); $strOutputFormat = $this->getOutputFormat(); if ($this->objItems->getCount() && !$blnNoNativeParsing) { $this->objTemplate->data = $this->objItems->parseAll($strOutputFormat, $this->objView); } else { $this->objTemplate->data = array(); } $this->setTitleAndDescription(); $this->objTemplate->caller = $objCaller; $this->objTemplate->items = $this->objItems; $this->objTemplate->filterParams = $this->arrParam; return $this->objTemplate->parse($strOutputFormat); }
/** * Render the current item using the specified render setting. * * @param ModelToLabelEvent $event The event. * * @return void */ public static function render(ModelToLabelEvent $event) { $environment = $event->getEnvironment(); /** @var IMetaModelDataDefinition $definition */ $definition = $environment->getDataDefinition(); /** @var Contao2BackendViewDefinitionInterface $viewSection */ $viewSection = $definition->getDefinition(Contao2BackendViewDefinitionInterface::NAME); $listing = $viewSection->getListingConfig(); /** @var Model $model */ $model = $event->getModel(); if (!$model instanceof Model) { return; } $nativeItem = $model->getItem(); $metaModel = $nativeItem->getMetaModel(); $renderSetting = $metaModel->getServiceContainer()->getRenderSettingFactory()->createCollection($metaModel, $definition->getMetaModelDefinition()->getActiveRenderSetting()); if (!$renderSetting) { return; } $data = array($nativeItem->parseValue('html5', $renderSetting)); if ($listing->getShowColumns()) { $event->setArgs($data[0]['html5']); return; } $template = new Template($renderSetting->get('template')); $renderSetting = self::removeInvariantAttributes($nativeItem, $renderSetting); $template->setData(array('settings' => $renderSetting, 'items' => new Items(array($nativeItem)), 'view' => $renderSetting, 'data' => $data)); $event->setArgs(array($template->parse('html5'))); }