cObj->checkIf($conf['if.'])) { return ''; } $frontendController = $this->getFrontendController(); $theValue = ''; $originalRec = $frontendController->currentRecord; // If the currentRecord is set, we register, that this record has invoked this function. // It's should not be allowed to do this again then!! if ($originalRec) { ++$frontendController->recordRegister[$originalRec]; } $conf['table'] = isset($conf['table.']) ? trim($this->cObj->stdWrap($conf['table'], $conf['table.'])) : trim($conf['table']); $conf['select.'] = !empty($conf['select.']) ? $conf['select.'] : []; $renderObjName = $conf['renderObj'] ?: '<' . $conf['table']; $renderObjKey = $conf['renderObj'] ? 'renderObj' : ''; $renderObjConf = $conf['renderObj.']; $slide = isset($conf['slide.']) ? (int)$this->cObj->stdWrap($conf['slide'], $conf['slide.']) : (int)$conf['slide']; if (!$slide) { $slide = 0; } $slideCollect = isset($conf['slide.']['collect.']) ? (int)$this->cObj->stdWrap($conf['slide.']['collect'], $conf['slide.']['collect.']) : (int)$conf['slide.']['collect']; if (!$slideCollect) { $slideCollect = 0; } $slideCollectReverse = isset($conf['slide.']['collectReverse.']) ? (int)$this->cObj->stdWrap($conf['slide.']['collectReverse'], $conf['slide.']['collectReverse.']) : (int)$conf['slide.']['collectReverse']; $slideCollectReverse = (bool)$slideCollectReverse; $slideCollectFuzzy = isset($conf['slide.']['collectFuzzy.']) ? (bool)$this->cObj->stdWrap($conf['slide.']['collectFuzzy'], $conf['slide.']['collectFuzzy.']) : (bool)$conf['slide.']['collectFuzzy']; if (!$slideCollect) { $slideCollectFuzzy = true; } $again = false; $tmpValue = ''; do { $records = $this->cObj->getRecords($conf['table'], $conf['select.']); $cobjValue = ''; if (!empty($records)) { $this->cObj->currentRecordTotal = count($records); $this->getTimeTracker()->setTSlogMessage('NUMROWS: ' . count($records)); /** @var ContentObjectRenderer $cObj */ $cObj = GeneralUtility::makeInstance(ContentObjectRenderer::class); $cObj->setParent($this->cObj->data, $this->cObj->currentRecord); $this->cObj->currentRecordNumber = 0; foreach ($records as $row) { // Call hook for possible manipulation of database row for cObj->data foreach ($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tslib/class.tslib_content_content.php']['modifyDBRow'] ?? [] as $className) { $_procObj = GeneralUtility::makeInstance($className); $_procObj->modifyDBRow($row, $conf['table']); } if (!$frontendController->recordRegister[$conf['table'] . ':' . $row['uid']]) { $this->cObj->currentRecordNumber++; $cObj->parentRecordNumber = $this->cObj->currentRecordNumber; $frontendController->currentRecord = $conf['table'] . ':' . $row['uid']; $this->cObj->lastChanged($row['tstamp']); $cObj->start($row, $conf['table']); $tmpValue = $cObj->cObjGetSingle($renderObjName, $renderObjConf, $renderObjKey); $cobjValue .= $tmpValue; } } } if ($slideCollectReverse) { $theValue = $cobjValue . $theValue; } else { $theValue .= $cobjValue; } if ($slideCollect > 0) { $slideCollect--; } if ($slide) { if ($slide > 0) { $slide--; } $conf['select.']['pidInList'] = $this->cObj->getSlidePids($conf['select.']['pidInList'], $conf['select.']['pidInList.']); if (isset($conf['select.']['pidInList.'])) { unset($conf['select.']['pidInList.']); } $again = (string)$conf['select.']['pidInList'] !== ''; } } while ($again && $slide && ((string)$tmpValue === '' && $slideCollectFuzzy || $slideCollect)); $wrap = isset($conf['wrap.']) ? $this->cObj->stdWrap($conf['wrap'], $conf['wrap.']) : $conf['wrap']; if ($wrap) { $theValue = $this->cObj->wrap($theValue, $wrap); } if (isset($conf['stdWrap.'])) { $theValue = $this->cObj->stdWrap($theValue, $conf['stdWrap.']); } // Restore $frontendController->currentRecord = $originalRec; if ($originalRec) { --$frontendController->recordRegister[$originalRec]; } return $theValue; } /** * Returns the frontend controller * * @return TypoScriptFrontendController */ protected function getFrontendController() { return $GLOBALS['TSFE']; } /** * Returns Time Tracker * * @return TimeTracker */ protected function getTimeTracker() { return GeneralUtility::makeInstance(TimeTracker::class); } }