/**
  * 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'));
 }
Beispiel #2
0
 /**
  * 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);
 }
Beispiel #3
0
 /**
  * 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')));
 }