public function main() { $out = ''; $conf = $this->getModule()->getConfigurations(); $file = t3lib_div::getFileAbsFileName($conf->get($this->getConfId() . 'template')); $templateCode = t3lib_div::getURL($file); if (!$templateCode) { return $conf->getLL('msg_template_not_found') . '<br />File: \'' . $file . '\'<br />ConfId: \'' . $this->getConfId() . 'template\''; } $subpart = '###' . strtoupper($this->getFuncId()) . '###'; $template = tx_rnbase_util_Templates::getSubpart($templateCode, $subpart); if (!$template) { return $conf->getLL('msg_subpart_not_found') . ': ' . $subpart; } $start = microtime(TRUE); $memStart = memory_get_usage(); $out .= $this->getContent($template, $conf, $conf->getFormatter(), $this->getModule()->getFormTool()); if (tx_rnbase_util_BaseMarker::containsMarker($out, 'MOD_')) { $markerArr = array(); $memEnd = memory_get_usage(); $markerArr['###MOD_PARSETIME###'] = microtime(TRUE) - $start; $markerArr['###MOD_MEMUSED###'] = $memEnd - $memStart; $markerArr['###MOD_MEMSTART###'] = $memStart; $markerArr['###MOD_MEMEND###'] = $memEnd; $out = tx_rnbase_util_Templates::substituteMarkerArrayCached($out, $markerArr); } return $out; }
function test_containsMarker() { $template = ' <html> Das Spielergebnis: ###MATCH_HOME_NAME### - ###MATCH_GUEST_NAME### ###MATCH_GOALS_HOME_2### : ###MATCH_GOALS_GUEST_2### </html> '; $this->assertTrue(tx_rnbase_util_BaseMarker::containsMarker($template, 'MATCH'), 'Marker MATCH nicht gefunden'); $this->assertTrue(tx_rnbase_util_BaseMarker::containsMarker($template, 'MATCH_HOME'), 'Marker MATCH_HOME nicht gefunden'); $this->assertFalse(tx_rnbase_util_BaseMarker::containsMarker($template, 'MATCH_ERR'), 'Marker MATCH_ERR wurde gefunden'); }
/** * Liefert das passende Template für die aktuelle Seite */ protected function getPageString($currentPage, $pointer, $pageId, &$templates, &$formatter, $pbConfId, $pbMarker) { $rec = array(); $rec['number'] = $currentPage + 1; $pageTemplate = $templates[$pageId]; $pageConfId = $pbConfId . 'page.' . $pageId . '.'; $pageMarker = $pbMarker . '_' . strtoupper($pageId) . '_PAGE_'; $pageMarkerArray = $formatter->getItemMarkerArrayWrapped($rec, $pageConfId, 0, $pageMarker); $pageSubpartArray = array(); if ($this->link) { $this->link->parameters(array($this->pageBrowser->getParamName('pointer') => $currentPage)); $pageWrappedSubpartArray['###' . $pageMarker . 'LINK###'] = explode($this->token, $this->link->makeTag()); $pageMarkerArray['###' . $pageMarker . 'LINKURL###'] = $this->link->makeUrl(); } else { $pageWrappedSubpartArray['###' . $pageMarker . 'LINK###'] = $noLink; $pageMarkerArray['###' . $pageMarker . 'LINKURL###'] = ''; } $out = tx_rnbase_util_BaseMarker::substituteMarkerArrayCached($pageTemplate, $pageMarkerArray, $pageSubpartArray, $pageWrappedSubpartArray); return $out; }
/** * Typoscript USER function for rendering DAM images. * This is a minimal Setup: * <pre> * yourObject.imagecol = USER * yourObject.imagecol { * userFunc=tx_rnbase_util_TSDAM->printImages * refField=imagecol * refTable=tx_yourextkey_tablename * template = EXT:rn_base/res/simplegallery.html * # media is the dam record * media { * # field file contains the complete image path * file = IMAGE * file.file.import.field = file * } * # Optional setting for limit * # limit = 1 * } * </pre> * There are three additional fields in media record: file, file1 and thumbnail containing the complete * image path. * The output is rendered via HTML template with ListBuilder. Have a look at EXT:rn_base/res/simplegallery.html * Possible Typoscript options: * refField: DAM reference field of the media records (defined in TCA and used to locate the record in MM-Table) * refTable: should be the tablename where the DAM record is referenced to * template: Full path to HTML template file. * media: Formatting options of the DAM record. Have a look at tx_dam to find all column names * limit: Limits the number of medias * offset: Start media output with an offset * forcedIdField: force another refernce column (other than UID or _LOCALIZED_UID) * * * @param string $content * @param array $tsConf * @return string */ function printImages($content, $tsConf) { if (!tx_rnbase_util_Extensions::isLoaded('dam')) { return ''; } $conf = $this->createConf($tsConf); $file = $conf->get('template'); $file = $file ? $file : 'EXT:rn_base/res/simplegallery.html'; $subpartName = $conf->get('subpartName'); $subpartName = $subpartName ? $subpartName : '###DAM_IMAGES###'; $templateCode = tx_rnbase_util_Templates::getSubpartFromFile($file, $subpartName); if (!$templateCode) { return '<!-- NO TEMPLATE OR SUBPART ' . $subpartName . ' FOUND -->'; } // Is there a customized language field configured $langField = DEFAULT_LOCAL_FIELD; $locUid = $conf->getCObj()->data[$langField]; // Save original uid if ($conf->get('forcedIdField')) { $langField = $conf->get('forcedIdField'); // Copy localized UID $conf->getCObj()->data[DEFAULT_LOCAL_FIELD] = $conf->getCObj()->data[$langField]; } // Check if there is a valid uid given. $parentUid = intval($conf->getCObj()->data[DEFAULT_LOCAL_FIELD] ? $conf->getCObj()->data[DEFAULT_LOCAL_FIELD] : $conf->getCObj()->data['uid']); if (!$parentUid) { return '<!-- Invalid data record given -->'; } $damPics = $this->fetchFileList($tsConf, $conf->getCObj()); $conf->getCObj()->data[DEFAULT_LOCAL_FIELD] = $locUid; // Reset UID $offset = intval($conf->get('offset')); $limit = intval($conf->get('limit')); if (!$limit && $offset && count($damPics)) { $damPics = array_slice($damPics, $offset); } elseif ($limit && count($damPics)) { $damPics = array_slice($damPics, $offset, $limit); } $damDb = tx_rnbase::makeInstance('tx_dam_db'); $medias = array(); while (list($uid, $baseRecord) = each($damPics)) { $mediaObj = tx_rnbase::makeInstance('tx_rnbase_model_media', $baseRecord['uid']); // Localize data (DAM 1.1.0) if (method_exists($damDb, 'getRecordOverlay')) { $loc = $damDb->getRecordOverlay('tx_dam', $mediaObj->getRecord(), array('sys_language_uid' => $GLOBALS['TSFE']->sys_language_uid)); if ($loc) { $mediaObj->setProperty($loc); } } $mediaObj->setParentuid($parentUid); $medias[] = $mediaObj; } $listBuilder = tx_rnbase::makeInstance('tx_rnbase_util_ListBuilder'); $out = $listBuilder->render($medias, FALSE, $templateCode, 'tx_rnbase_util_MediaMarker', 'media.', 'MEDIA', $conf->getFormatter()); // Now set the identifier $markerArray['###MEDIA_PARENTUID###'] = $parentUid; $out = tx_rnbase_util_BaseMarker::substituteMarkerArrayCached($out, $markerArray); return $out; }
/** * Prints out the module HTML * * @return void */ function printContent() { $this->content .= $this->getDoc()->endPage(); $params = $markerArray = $subpartArray = $wrappedSubpartArray = array(); tx_rnbase::load('tx_rnbase_util_BaseMarker'); tx_rnbase::load('tx_rnbase_util_Templates'); tx_rnbase_util_BaseMarker::callModules($this->content, $markerArray, $subpartArray, $wrappedSubpartArray, $params, $this->getConfigurations()->getFormatter()); $content = tx_rnbase_util_Templates::substituteMarkerArrayCached($this->content, $markerArray, $subpartArray, $wrappedSubpartArray); echo $content; }
/** * Returns a token string. * @return string */ protected static function getToken() { if (!self::$token) { self::$token = md5(microtime()); } return self::$token; }
/** * @param string $template HTML template * @param array $markerArray * @param array $subpartArray * @param array $wrappedSubpartArray * @param tx_rnbase_util_FormatUtil $formatter * @param string $confId * @param string $marker * * @return void */ private function insertMarkersForSorting($template, &$markerArray, &$subpartArray, &$wrappedSubpartArray, &$formatter, $confId) { $confId = $this->getConfId() . $this->sortConfId; $configurations = $formatter->getConfigurations(); $sortFields = $this->getAllowedSortFields(); if (!empty($sortFields)) { tx_rnbase::load('tx_rnbase_util_BaseMarker'); $token = md5(microtime()); $markOrders = array(); foreach ($sortFields as $field) { $isField = $field == $this->getSortBy(); // sortOrder ausgeben $markOrders[$field . '_order'] = $isField ? $this->getSortOrder() : ''; $fieldMarker = $this->markerPrefix . '_' . strtoupper($field) . '_LINK'; $makeLink = tx_rnbase_util_BaseMarker::containsMarker($template, $fieldMarker); $makeUrl = tx_rnbase_util_BaseMarker::containsMarker($template, $fieldMarker . 'URL'); // link generieren if ($makeLink || $makeUrl) { // sortierungslinks ausgeben $params = array('sortBy' => $field, 'sortOrder' => $isField && $this->getSortOrder() == 'asc' ? 'desc' : 'asc'); $link = $configurations->createLink(); $link->label($token); $link->initByTS($configurations, $confId . $this->sortLinkConfId, $params); if ($makeLink) { $wrappedSubpartArray['###' . $fieldMarker . '###'] = explode($token, $link->makeTag()); } if ($makeUrl) { $markerArray['###' . $fieldMarker . 'URL###'] = $link->makeUrl(false); } } } // die sortOrders parsen $markOrders = $formatter->getItemMarkerArrayWrapped($markOrders, $confId, 0, $this->markerPrefix . '_', array_keys($markOrders)); $markerArray = array_merge($markerArray, $markOrders); } }
/** * Typoscript USER function for rendering DAM images. * This is a minimal Setup: * <pre> * yourObject.imagecol = USER * yourObject.imagecol { * userFunc=tx_rnbase_util_TSFAL->printImages * includeLibs = EXT:rn_base/util/class.tx_rnbase_util_TSFAL.php * refField=imagecol * refTable=tx_yourextkey_tablename * template = EXT:rn_base/res/simplegallery.html * # media is the fal reference record * media { * # field file contains the complete image path * file = IMAGE * file.file.import.field = file * } * # Optional setting for limit * # limit = 1 * } * </pre> * There are three additional fields in media record: file, file1 and thumbnail containing the complete * image path. * The output is rendered via HTML template with ListBuilder. Have a look at EXT:rn_base/res/simplegallery.html * Possible Typoscript options: * refField: DAM reference field of the media records (defined in TCA and used to locate the record in MM-Table) * refTable: should be the tablename where the DAM record is referenced to * template: Full path to HTML template file. * media: Formatting options of the DAM record. Have a look at tx_dam to find all column names * limit: Limits the number of medias * offset: Start media output with an offset * forcedIdField: force another reference column (other than UID or _LOCALIZED_UID) * * * @param string $content * @param array $tsConf * @return string */ public function printImages($content, $tsConf) { tx_rnbase::load('tx_rnbase_util_Templates'); $conf = $this->createConf($tsConf); $file = $conf->get('template'); $file = $file ? $file : 'EXT:rn_base/res/simplegallery.html'; $subpartName = $conf->get('subpartName'); $subpartName = $subpartName ? $subpartName : '###DAM_IMAGES###'; $templateCode = tx_rnbase_util_Templates::getSubpartFromFile($file, $subpartName); if (!$templateCode) { return '<!-- NO TEMPLATE OR SUBPART ' . $subpartName . ' FOUND -->'; } // Is there a customized language field configured $langField = DEFAULT_LOCAL_FIELD; $locUid = $conf->getCObj()->data[$langField]; // Save original uid if ($conf->get('forcedIdField')) { $langField = $conf->get('forcedIdField'); // Copy localized UID $conf->getCObj()->data[DEFAULT_LOCAL_FIELD] = $conf->getCObj()->data[$langField]; } // Check if there is a valid uid given. $parentUid = intval($conf->getCObj()->data[DEFAULT_LOCAL_FIELD] ? $conf->getCObj()->data[DEFAULT_LOCAL_FIELD] : $conf->getCObj()->data['uid']); if (!$parentUid) { return '<!-- Invalid data record given -->'; } $medias = self::fetchFilesByTS($conf, $conf->getCObj()); $listBuilder = tx_rnbase::makeInstance('tx_rnbase_util_ListBuilder'); $out = $listBuilder->render($medias, FALSE, $templateCode, 'tx_rnbase_util_MediaMarker', 'media.', 'MEDIA', $conf->getFormatter()); // Now set the identifier $markerArray = array('###MEDIA_PARENTUID###' => $parentUid); $out = tx_rnbase_util_BaseMarker::substituteMarkerArrayCached($out, $markerArray); return $out; }
protected function getOuterMarker($marker, $template) { $outerMarker = $marker; $len = strlen($marker) - 1; if ($marker[$len] == 'Y' && !tx_rnbase_util_BaseMarker::containsMarker($template, $marker . 'S###')) { $outerMarker = substr($marker, 0, $len) . 'IE'; } return $outerMarker; }
/** * Erzeugt Marker für das Module Template, * um die Ausgabe der Export funktionen zu implementieren. * Folgende Marker werden erzeugt: * ###EXPORT_BUTTONS### */ public function parseTemplate($template) { tx_rnbase::load('tx_rnbase_util_BaseMarker'); if (!tx_rnbase_util_BaseMarker::containsMarker($template, 'EXPORT_BUTTONS')) { return $template; } $configuration = $this->getConfigurations(); $confId = $this->getConfId() . 'types.'; $buttons = ''; foreach ($this->getExportTypes() as $type) { $buttons .= $this->renderButton($type); } if (!empty($buttons)) { $buttons = $this->getButtonStyles() . $buttons; } $markerArray = array(); $markerArray['###EXPORT_BUTTONS###'] = $buttons; $out = tx_rnbase_util_Templates::substituteMarkerArrayCached($template, $markerArray); return $out; }
/** * render plugin data and additional flexdata * * @param string $templateCode * @param tx_rnbase_configurations $configurations * @return string */ protected function renderPluginData($templateCode, tx_rnbase_configurations $configurations) { // render only, if there is an controller if (!$this->getController()) { return $templateCode; } // check, if there are plugin markers to render if (!tx_rnbase_util_BaseMarker::containsMarker($templateCode, 'PLUGIN_')) { return $templateCode; } $confId = $this->getController()->getConfId(); $markerArray = array(); // build the data to render $pluginData = array_merge((array) $configurations->getCObj()->data, $configurations->getExploded($confId . 'plugin.flexdata.')); // check for unused columns $ignoreColumns = tx_rnbase_util_BaseMarker::findUnusedCols($pluginData, $templateCode, 'PLUGIN'); // create the marker array with the parsed columns $markerArray = $configurations->getFormatter()->getItemMarkerArrayWrapped($pluginData, $confId . 'plugin.', $ignoreColumns, 'PLUGIN_'); return tx_rnbase_util_BaseMarker::substituteMarkerArrayCached($templateCode, $markerArray); }