2 namespace TYPO3\CMS\Backend\View;
46 $this->initializeDataProviderCollection();
54 protected function initializeDataProviderCollection()
58 BackendLayout\DataProviderCollection::class
63 \TYPO3\CMS\Backend\View\BackendLayout\DefaultDataProvider::class
66 if (!empty(
$GLOBALS[
'TYPO3_CONF_VARS'][
'SC_OPTIONS'][
'BackendLayoutDataProvider'])) {
67 $dataProviders = (array)
$GLOBALS[
'TYPO3_CONF_VARS'][
'SC_OPTIONS'][
'BackendLayoutDataProvider'];
68 foreach ($dataProviders as $identifier => $className) {
101 $pageId = $this->
determinePageId($parameters[
'table'], $parameters[
'row']);
107 ->setData($parameters[
'row'])
108 ->setTableName($parameters[
'table'])
109 ->setFieldName($parameters[
'field'])
110 ->setPageTsConfig($pageTsConfig);
113 foreach ($backendLayoutCollections as $backendLayoutCollection) {
114 $combinedIdentifierPrefix =
'';
115 if ($backendLayoutCollection->getIdentifier() !==
'default') {
116 $combinedIdentifierPrefix = $backendLayoutCollection->getIdentifier() .
'__';
119 foreach ($backendLayoutCollection->getAll() as $backendLayout) {
120 $combinedIdentifier = $combinedIdentifierPrefix . $backendLayout->getIdentifier();
122 if (in_array($combinedIdentifier, $identifiersToBeExcluded,
true)) {
126 $parameters[
'items'][] = array(
129 $backendLayout->getIconPath(),
146 if (strpos($data[
'uid'],
'NEW') === 0) {
149 if ($data[
'pid'] < 0) {
151 'pid', $tableName,
'uid=' . abs($data[
'pid'])
153 if ($existingElement !== null) {
154 $pageId = $existingElement[
'pid'];
157 $pageId = $data[
'pid'];
159 }
elseif ($tableName ===
'pages') {
160 $pageId = $data[
'uid'];
162 $pageId = $data[
'pid'];
176 if (!isset($this->selectedCombinedIdentifier[$pageId])) {
177 $page = $this->
getPage($pageId);
178 $this->selectedCombinedIdentifier[$pageId] = (string)$page[
'backend_layout'];
180 if ($this->selectedCombinedIdentifier[$pageId] ===
'-1') {
182 $this->selectedCombinedIdentifier[$pageId] =
false;
183 }
elseif ($this->selectedCombinedIdentifier[$pageId] ===
'' || $this->selectedCombinedIdentifier[$pageId] ===
'0') {
188 array_shift($rootLine);
189 array_pop($rootLine);
190 foreach ($rootLine as $rootLinePage) {
191 $this->selectedCombinedIdentifier[$pageId] = (string)$rootLinePage[
'backend_layout_next_level'];
192 if ($this->selectedCombinedIdentifier[$pageId] ===
'-1') {
194 $this->selectedCombinedIdentifier[$pageId] =
false;
196 }
elseif ($this->selectedCombinedIdentifier[$pageId] !==
'' && $this->selectedCombinedIdentifier[$pageId] !==
'0') {
204 return $this->selectedCombinedIdentifier[$pageId];
215 $identifiersToBeExcluded = array();
225 return $identifiersToBeExcluded;
238 $pageId = $this->
determinePageId($parameters[
'table'], $parameters[
'row']);
240 if ($pageId !== null) {
254 $layout = $this->getSelectedBackendLayout($pageId);
255 if ($layout && $layout[
'__items']) {
256 $items = $layout[
'__items'];
270 $tcaConfig =
$GLOBALS[
'TCA'][
'tt_content'][
'columns'][
'colPos'][
'config'];
271 $tcaItems = $tcaConfig[
'items'];
272 $tcaItems = $this->
addItems($tcaItems, $tsConfig[
'properties'][
'addItems.']);
273 if (isset($tcaConfig[
'itemsProcFunc']) && $tcaConfig[
'itemsProcFunc']) {
277 foreach ($tcaItems as $key => $item) {
278 if ($item[1] == $removeId) {
279 unset($tcaItems[$key]);
299 $languageService = static::getLanguageService();
300 if (is_array($iArray)) {
301 foreach ($iArray as $value => $label) {
304 if (is_array($label)) {
308 if (isset($iArray[$value .
'.']) && $iArray[$value .
'.'][
'icon']) {
309 $icon = $iArray[$value .
'.'][
'icon'];
313 $items[] = array($languageService->sL($label), $value, $icon);
325 public function getSelectedBackendLayout($pageId)
327 if (isset($this->selectedBackendLayout[$pageId])) {
328 return $this->selectedBackendLayout[$pageId];
330 $backendLayoutData = null;
340 if (is_null($backendLayout)) {
345 if (!empty($backendLayout)) {
349 $conditionMatcher =
GeneralUtility::makeInstance(\TYPO3\CMS\Backend\Configuration\TypoScript\ConditionMatching\ConditionMatcher::class);
350 $parser->parse($parser->checkIncludeLines($backendLayout->getConfiguration()), $conditionMatcher);
352 $backendLayoutData = array();
353 $backendLayoutData[
'config'] = $backendLayout->getConfiguration();
354 $backendLayoutData[
'__config'] = $parser->setup;
355 $backendLayoutData[
'__items'] = array();
356 $backendLayoutData[
'__colPosList'] = array();
359 if (!empty($backendLayoutData[
'__config'][
'backend_layout.'][
'rows.'])) {
360 foreach ($backendLayoutData[
'__config'][
'backend_layout.'][
'rows.'] as $row) {
361 if (!empty($row[
'columns.'])) {
362 foreach ($row[
'columns.'] as $column) {
363 $backendLayoutData[
'__items'][] = array(
368 $backendLayoutData[
'__colPosList'][] = $column[
'colPos'];
374 $this->selectedBackendLayout[$pageId] = $backendLayoutData;
377 return $backendLayoutData;
396 name = LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:colPos.I.0
400 name = LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:colPos.I.1
404 name = LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:colPos.I.2
408 name = LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:colPos.I.3
427 'uid, pid, backend_layout',
429 'uid=' . (
int)$pageId