/** * Retrieves markup/code of databrowser to be embedded in view. * * @return string markup/code of databrowser */ public function getCode() { // get items to render in databrowser try { $this->processInput(); $items = $this->getItems(); } catch (\RuntimeException $e) { return markup::paragraph(markup::emphasize(_L('Failed to query datasource for listing items.'))); } // render table including related pager widget if (count($items)) { // fetch form to use optionally $form = $this->getForm(); $volatiles = _A(config::get('databrowser.volatiles', array()))->elements; $available = input::listNames(); foreach ($volatiles as $volatile) { if (in_array($volatile, $available)) { $form->setHidden($volatile, input::vget($volatile)); } } // split items into raw data and additionally delivered data per row $rows = $extras = array(); foreach ($items as $key => $row) { $rows[$key] = $row; unset($rows[$key]['|extra']); $extras[$key] = $row['|extra']; } // use local callback to wrap custom cell formatter for enriching // with additional data per row $browser = $this; $cellFormatter = function ($value, $name, $item, $id) use($browser, $extras) { return $browser->formatCell($value, $name, $item, $id, $extras[$id]); }; // render table view $id = $form ? null : $this->datasource->name(); $table = html::arrayToTable($rows, $id, $cellFormatter, array(&$this, 'formatHeader'), '', '', $this->className); $code = $this->pager . $table; // wrap rendered table view in form if ($form && !$this->callerForm) { $code = (string) $form->addContent($code); } // return code of rendered databrowser return $code; } $text = $this->emptyText ? $this->emptyText : _L('There is no data to be listed here ...'); return markup::paragraph(markup::emphasize($text), trim($this->className . ' empty-text')); }