‪TYPO3CMS  10.4
StandardContentPreviewRenderer.php
Go to the documentation of this file.
1 <?php
2 
3 declare(strict_types=1);
4 
5 /*
6  * This file is part of the TYPO3 CMS project.
7  *
8  * It is free software; you can redistribute it and/or modify it under
9  * the terms of the GNU General Public License, either version 2
10  * of the License, or any later version.
11  *
12  * For the full copyright and license information, please read the
13  * LICENSE.txt file that was distributed with this source code.
14  *
15  * The TYPO3 project - inspiring people to share!
16  */
17 
19 
20 use Psr\Log\LoggerAwareInterface;
21 use Psr\Log\LoggerAwareTrait;
36 
50 class ‪StandardContentPreviewRenderer implements ‪PreviewRendererInterface, LoggerAwareInterface
51 {
52  use LoggerAwareTrait;
53 
59  private const ‪MENU_CONTENT_TYPES = [
60  'menu_abstract',
61  'menu_categorized_content',
62  'menu_categorized_pages',
63  'menu_pages',
64  'menu_recently_updated',
65  'menu_related_pages',
66  'menu_section',
67  'menu_section_pages',
68  'menu_sitemap',
69  'menu_sitemap_pages',
70  'menu_subpages',
71  ];
72 
73  public function ‪renderPageModulePreviewHeader(‪GridColumnItem $item): string
74  {
75  $record = $item->‪getRecord();
76  $itemLabels = $item->‪getContext()->getItemLabels();
77 
78  $outHeader = '';
79 
80  if ($record['header']) {
81  $infoArr = [];
82  $this->‪getProcessedValue($item, 'header_position,header_layout,header_link', $infoArr);
83  $hiddenHeaderNote = '';
84  // If header layout is set to 'hidden', display an accordant note:
85  if ($record['header_layout'] == 100) {
86  $hiddenHeaderNote = ' <em>[' . htmlspecialchars($this->‪getLanguageService()->sL('LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:header_layout.I.6')) . ']</em>';
87  }
88  $outHeader = $record['date']
89  ? htmlspecialchars($itemLabels['date'] . ' ' . ‪BackendUtility::date($record['date'])) . '<br />'
90  : '';
91  $outHeader .= '<strong>' . $this->‪linkEditContent($this->‪renderText($record['header']), $record)
92  . $hiddenHeaderNote . '</strong><br />';
93  }
94 
95  return $outHeader;
96  }
97 
99  {
100  $out = '';
101  $record = $item->‪getRecord();
102 
103  $contentTypeLabels = $item->‪getContext()->getContentTypeLabels();
104  $languageService = $this->‪getLanguageService();
105 
106  $drawItem = true;
107  $hookPreviewContent = '';
108  // Hook: Render an own preview of a record
109  if (!empty(‪$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['cms/layout/class.tx_cms_layout.php']['tt_content_drawItem'])) {
111  foreach (‪$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['cms/layout/class.tx_cms_layout.php']['tt_content_drawItem'] ?? [] as $className) {
112  $hookObject = GeneralUtility::makeInstance($className);
113  if (!$hookObject instanceof ‪PageLayoutViewDrawItemHookInterface) {
114  throw new \UnexpectedValueException($className . ' must implement interface ' . PageLayoutViewDrawItemHookInterface::class, 1582574553);
115  }
116  $hookObject->preProcess($pageLayoutView, $drawItem, $previewHeader, $hookPreviewContent, $record);
117  }
118  $item->‪setRecord($record);
119  }
120 
121  if (!$drawItem) {
122  return $hookPreviewContent;
123  }
124  // Check if a Fluid-based preview template was defined for this CType
125  // and render it via Fluid. Possible option:
126  // mod.web_layout.tt_content.preview.media = EXT:site_mysite/Resources/Private/Templates/Preview/Media.html
127  $infoArr = [];
128  $this->‪getProcessedValue($item, 'header_position,header_layout,header_link', $infoArr);
129  $tsConfig = ‪BackendUtility::getPagesTSconfig($record['pid'])['mod.']['web_layout.']['tt_content.']['preview.'] ?? [];
130  if (!empty($tsConfig[$record['CType']]) || !empty($tsConfig[$record['CType'] . '.'])) {
131  $fluidPreview = $this->‪renderContentElementPreviewFromFluidTemplate($record);
132  if ($fluidPreview !== null) {
133  return $fluidPreview;
134  }
135  }
136 
137  // Draw preview of the item depending on its CType
138  switch ($record['CType']) {
139  case 'header':
140  if ($record['subheader']) {
141  $out .= $this->‪linkEditContent($this->‪renderText($record['subheader']), $record) . '<br />';
142  }
143  break;
144  case 'uploads':
145  if ($record['media']) {
146  $out .= $this->‪linkEditContent($this->‪getThumbCodeUnlinked($record, 'tt_content', 'media'), $record) . '<br />';
147  }
148  break;
149  case 'shortcut':
150  if (!empty($record['records'])) {
151  $shortcutContent = [];
152  $recordList = explode(',', $record['records']);
153  foreach ($recordList as $recordIdentifier) {
154  $split = ‪BackendUtility::splitTable_Uid($recordIdentifier);
155  $tableName = empty($split[0]) ? 'tt_content' : $split[0];
156  $shortcutRecord = ‪BackendUtility::getRecord($tableName, $split[1]);
157  if (is_array($shortcutRecord)) {
158  $icon = $this->‪getIconFactory()->getIconForRecord($tableName, $shortcutRecord, ‪Icon::SIZE_SMALL)->render();
160  $icon,
161  $tableName,
162  $shortcutRecord['uid'],
163  '1',
164  '',
165  '+copy,info,edit,view'
166  );
167  $shortcutContent[] = $icon
168  . htmlspecialchars(‪BackendUtility::getRecordTitle($tableName, $shortcutRecord));
169  }
170  }
171  $out .= implode('<br />', $shortcutContent) . '<br />';
172  }
173  break;
174  case 'list':
175  $hookOut = '';
176  if (!empty(‪$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['cms/layout/class.tx_cms_layout.php']['list_type_Info'])) {
178  $_params = ['pObj' => &$pageLayoutView, 'row' => $record];
179  foreach (
180  ‪$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['cms/layout/class.tx_cms_layout.php']['list_type_Info'][$record['list_type']] ??
181  ‪$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['cms/layout/class.tx_cms_layout.php']['list_type_Info']['_DEFAULT'] ??
182  [] as $_funcRef
183  ) {
184  $hookOut .= GeneralUtility::callUserFunction($_funcRef, $_params, $pageLayoutView);
185  }
186  }
187 
188  if ((string)$hookOut !== '') {
189  $out .= $hookOut;
190  } elseif (!empty($record['list_type'])) {
191  $label = ‪BackendUtility::getLabelFromItemListMerged($record['pid'], 'tt_content', 'list_type', $record['list_type']);
192  if (!empty($label)) {
193  $out .= $this->‪linkEditContent('<strong>' . htmlspecialchars($languageService->sL($label)) . '</strong>', $record) . '<br />';
194  } else {
195  $message = sprintf($languageService->sL('LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.noMatchingValue'), $record['list_type']);
196  $out .= '<span class="label label-warning">' . htmlspecialchars($message) . '</span>';
197  }
198  } elseif (!empty($record['select_key'])) {
199  $out .= htmlspecialchars($languageService->sL(‪BackendUtility::getItemLabel('tt_content', 'select_key')))
200  . ' ' . htmlspecialchars($record['select_key']) . '<br />';
201  } else {
202  $out .= '<strong>' . $languageService->getLL('noPluginSelected') . '</strong>';
203  }
204  $out .= htmlspecialchars($languageService->sL(‪BackendUtility::getLabelFromItemlist('tt_content', 'pages', $record['pages']))) . '<br />';
205  break;
206  default:
207  $contentTypeLabel = (string)($contentTypeLabels[$record['CType']] ?? '');
208  if ($contentTypeLabel === '') {
209  $message = sprintf(
210  $languageService->sL('LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.noMatchingValue'),
211  $record['CType']
212  );
213  $out .= '<span class="label label-warning">' . htmlspecialchars($message) . '</span>';
214  break;
215  }
216  // Handle menu content types
217  if (in_array($record['CType'], self::MENU_CONTENT_TYPES, true)) {
218  $out .= $this->‪linkEditContent('<strong>' . htmlspecialchars($contentTypeLabel) . '</strong>', $record);
219  if ($record['CType'] !== 'menu_sitemap' && (($record['pages'] ?? false) || ($record['selected_categories'] ?? false))) {
220  // Show pages/categories if menu type is not "Sitemap"
221  $out .= ':' . $this->‪linkEditContent($this->‪generateListForMenuContentTypes($record), $record) . '<br />';
222  }
223  break;
224  }
225  $out .= $this->‪linkEditContent('<strong>' . htmlspecialchars($contentTypeLabel) . '</strong>', $record) . '<br />';
226  if ($record['bodytext']) {
227  $out .= $this->‪linkEditContent($this->‪renderText($record['bodytext']), $record) . '<br />';
228  }
229  if ($record['image']) {
230  $out .= $this->‪linkEditContent($this->‪getThumbCodeUnlinked($record, 'tt_content', 'image'), $record) . '<br />';
231  }
232  }
233 
234  return $out;
235  }
236 
244  {
245  $content = '';
246  $info = [];
247  $record = $item->‪getRecord();
248  $this->‪getProcessedValue($item, 'starttime,endtime,fe_group,space_before_class,space_after_class', $info);
249 
250  if (!empty(‪$GLOBALS['TCA']['tt_content']['ctrl']['descriptionColumn']) && !empty($record[‪$GLOBALS['TCA']['tt_content']['ctrl']['descriptionColumn']])) {
251  $info[] = htmlspecialchars($record[‪$GLOBALS['TCA']['tt_content']['ctrl']['descriptionColumn']]);
252  }
253 
254  // Call drawFooter hooks
255  if (!empty(‪$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['cms/layout/class.tx_cms_layout.php']['tt_content_drawFooter'])) {
257  foreach (‪$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['cms/layout/class.tx_cms_layout.php']['tt_content_drawFooter'] ?? [] as $className) {
258  $hookObject = GeneralUtility::makeInstance($className);
259  if (!$hookObject instanceof ‪PageLayoutViewDrawFooterHookInterface) {
260  throw new \UnexpectedValueException($className . ' must implement interface ' . PageLayoutViewDrawFooterHookInterface::class, 1582574541);
261  }
262  $hookObject->preProcess($pageLayoutView, $info, $record);
263  }
264  $item->‪setRecord($record);
265  }
266 
267  if (!empty($info)) {
268  $content = implode('<br>', $info);
269  }
270 
271  if (!empty($content)) {
272  $content = '<div class="t3-page-ce-footer">' . $content . '</div>';
273  }
274 
275  return $content;
276  }
277 
278  public function ‪wrapPageModulePreview(string $previewHeader, string $previewContent, ‪GridColumnItem $item): string
279  {
280  $content = '<span class="exampleContent">' . $previewHeader . $previewContent . '</span>';
281  if ($item->‪isDisabled()) {
282  return '<span class="text-muted">' . $content . '</span>';
283  }
284  return $content;
285  }
286 
287  protected function ‪getProcessedValue(‪GridColumnItem $item, string $fieldList, array &$info): void
288  {
289  $itemLabels = $item->‪getContext()->getItemLabels();
290  $record = $item->‪getRecord();
291  $fieldArr = explode(',', $fieldList);
292  foreach ($fieldArr as $field) {
293  if ($record[$field]) {
294  $info[] = '<strong>' . htmlspecialchars((string)($itemLabels[$field] ?? '')) . '</strong> '
295  . htmlspecialchars(‪BackendUtility::getProcessedValue('tt_content', $field, $record[$field]) ?? '');
296  }
297  }
298  }
299 
300  protected function ‪renderContentElementPreviewFromFluidTemplate(array $row): ?string
301  {
302  $tsConfig = ‪BackendUtility::getPagesTSconfig($row['pid'])['mod.']['web_layout.']['tt_content.']['preview.'] ?? [];
303  $fluidTemplateFile = '';
304 
305  if ($row['CType'] === 'list' && !empty($row['list_type'])
306  && !empty($tsConfig['list.'][$row['list_type']])
307  ) {
308  $fluidTemplateFile = $tsConfig['list.'][$row['list_type']];
309  } elseif (!empty($tsConfig[$row['CType']])) {
310  $fluidTemplateFile = $tsConfig[$row['CType']];
311  }
312 
313  if ($fluidTemplateFile) {
314  $fluidTemplateFile = GeneralUtility::getFileAbsFileName($fluidTemplateFile);
315  if ($fluidTemplateFile) {
316  try {
317  $view = GeneralUtility::makeInstance(StandaloneView::class);
318  $view->setTemplatePathAndFilename($fluidTemplateFile);
319  $view->assignMultiple($row);
320  if (!empty($row['pi_flexform'])) {
321  $flexFormService = GeneralUtility::makeInstance(FlexFormService::class);
322  $view->assign('pi_flexform_transformed', $flexFormService->convertFlexFormContentToArray($row['pi_flexform']));
323  }
324  return $view->render();
325  } catch (\‪Exception $e) {
326  $this->logger->warning(sprintf(
327  'The backend preview for content element %d can not be rendered using the Fluid template file "%s": %s',
328  $row['uid'],
329  $fluidTemplateFile,
330  $e->getMessage()
331  ));
332 
333  if (‪$GLOBALS['TYPO3_CONF_VARS']['BE']['debug'] && $this->‪getBackendUser()->isAdmin()) {
334  $view = GeneralUtility::makeInstance(StandaloneView::class);
335  $view->assign('error', [
336  'message' => str_replace(‪Environment::getProjectPath(), '', $e->getMessage()),
337  'title' => 'Error while rendering FluidTemplate preview using ' . str_replace(‪Environment::getProjectPath(), '', $fluidTemplateFile),
338  ]);
339  $view->setTemplateSource('<f:be.infobox title="{error.title}" state="2">{error.message}</f:be.infobox>');
340  return $view->render();
341  }
342  }
343  }
344  }
345  return null;
346  }
347 
356  protected function ‪getThumbCodeUnlinked($row, $table, $field): string
357  {
358  return ‪BackendUtility::thumbCode($row, $table, $field, '', '', null, 0, '', '', false);
359  }
360 
367  protected function ‪renderText(string $input): string
368  {
369  $input = strip_tags($input);
370  $input = GeneralUtility::fixed_lgd_cs($input, 1500);
371  return nl2br(htmlspecialchars(trim($input), ENT_QUOTES, 'UTF-8', false));
372  }
373 
380  protected function ‪generateListForMenuContentTypes(array $record): string
381  {
382  $table = 'pages';
383  $field = 'pages';
384  // get categories instead of pages
385  if (strpos($record['CType'], 'menu_categorized') !== false) {
386  $table = 'sys_category';
387  $field = 'selected_categories';
388  }
389  if (trim($record[$field]) === '') {
390  return '';
391  }
392  $content = '';
393  $uidList = explode(',', $record[$field]);
394  foreach ($uidList as $uid) {
395  $uid = (int)$uid;
396  $pageRecord = ‪BackendUtility::getRecord($table, $uid, 'title');
397  if ($pageRecord) {
398  $content .= '<br>' . htmlspecialchars($pageRecord['title']) . ' (' . $uid . ')';
399  }
400  }
401  return $content;
402  }
403 
412  protected function ‪linkEditContent(string $linkText, $row): string
413  {
414  $backendUser = $this->‪getBackendUser();
415  if ($backendUser->check('tables_modify', 'tt_content') && $backendUser->recordEditAccessInternals('tt_content', $row)) {
416  $urlParameters = [
417  'edit' => [
418  'tt_content' => [
419  $row['uid'] => 'edit'
420  ]
421  ],
422  'returnUrl' => GeneralUtility::getIndpEnv('REQUEST_URI') . '#element-tt_content-' . $row['uid']
423  ];
424  $uriBuilder = GeneralUtility::makeInstance(UriBuilder::class);
425  $url = (string)$uriBuilder->buildUriFromRoute('record_edit', $urlParameters);
426  return '<a href="' . htmlspecialchars($url) . '" title="' . htmlspecialchars($this->‪getLanguageService()->getLL('edit')) . '">' . $linkText . '</a>';
427  }
428  return $linkText;
429  }
430 
432  {
433  return ‪$GLOBALS['BE_USER'];
434  }
435 
437  {
438  return ‪$GLOBALS['LANG'];
439  }
440 
441  protected function ‪getIconFactory(): ‪IconFactory
442  {
443  return GeneralUtility::makeInstance(IconFactory::class);
444  }
445 }
‪TYPO3\CMS\Core\Imaging\Icon\SIZE_SMALL
‪const SIZE_SMALL
Definition: Icon.php:30
‪TYPO3\CMS\Backend\Preview\StandardContentPreviewRenderer\getIconFactory
‪getIconFactory()
Definition: StandardContentPreviewRenderer.php:441
‪TYPO3\CMS\Backend\Preview\StandardContentPreviewRenderer\renderPageModulePreviewHeader
‪renderPageModulePreviewHeader(GridColumnItem $item)
Definition: StandardContentPreviewRenderer.php:73
‪TYPO3\CMS\Backend\Preview\StandardContentPreviewRenderer
Definition: StandardContentPreviewRenderer.php:51
‪TYPO3\CMS\Backend\View\PageLayoutView\createFromPageLayoutContext
‪static PageLayoutView createFromPageLayoutContext(PageLayoutContext $context)
Definition: PageLayoutView.php:196
‪TYPO3\CMS\Backend\Preview\StandardContentPreviewRenderer\getProcessedValue
‪getProcessedValue(GridColumnItem $item, string $fieldList, array &$info)
Definition: StandardContentPreviewRenderer.php:287
‪TYPO3\CMS\Backend\View\PageLayoutViewDrawItemHookInterface
Definition: PageLayoutViewDrawItemHookInterface.php:23
‪TYPO3\CMS\Backend\View\BackendLayout\Grid\AbstractGridObject\getContext
‪getContext()
Definition: AbstractGridObject.php:61
‪TYPO3\CMS\Backend\Preview\StandardContentPreviewRenderer\renderContentElementPreviewFromFluidTemplate
‪renderContentElementPreviewFromFluidTemplate(array $row)
Definition: StandardContentPreviewRenderer.php:300
‪TYPO3\CMS\Backend\Preview\PreviewRendererInterface
Definition: PreviewRendererInterface.php:40
‪TYPO3\CMS\Core\Imaging\Icon
Definition: Icon.php:26
‪TYPO3\CMS\Backend\Exception
Definition: Exception.php:24
‪TYPO3\CMS\Backend\Preview
Definition: PreviewRendererInterface.php:18
‪TYPO3\CMS\Backend\Utility\BackendUtility\getItemLabel
‪static string getItemLabel($table, $col)
Definition: BackendUtility.php:1521
‪TYPO3\CMS\Backend\Preview\StandardContentPreviewRenderer\renderPageModulePreviewContent
‪renderPageModulePreviewContent(GridColumnItem $item)
Definition: StandardContentPreviewRenderer.php:98
‪TYPO3\CMS\Backend\Preview\StandardContentPreviewRenderer\wrapPageModulePreview
‪wrapPageModulePreview(string $previewHeader, string $previewContent, GridColumnItem $item)
Definition: StandardContentPreviewRenderer.php:278
‪TYPO3\CMS\Backend\Utility\BackendUtility\thumbCode
‪static string thumbCode( $row, $table, $field, $backPath='', $thumbScript='', $uploaddir=null, $abs=0, $tparams='', $size='', $linkInfoPopup=true)
Definition: BackendUtility.php:1137
‪TYPO3\CMS\Backend\Preview\StandardContentPreviewRenderer\renderText
‪string renderText(string $input)
Definition: StandardContentPreviewRenderer.php:367
‪TYPO3\CMS\Backend\View\BackendLayout\Grid\GridColumnItem\setRecord
‪setRecord(array $record)
Definition: GridColumnItem.php:191
‪TYPO3\CMS\Core\Imaging\IconFactory
Definition: IconFactory.php:33
‪TYPO3\CMS\Backend\Preview\StandardContentPreviewRenderer\generateListForMenuContentTypes
‪string generateListForMenuContentTypes(array $record)
Definition: StandardContentPreviewRenderer.php:380
‪TYPO3\CMS\Core\Service\FlexFormService
Definition: FlexFormService.php:25
‪TYPO3\CMS\Backend\Utility\BackendUtility\wrapClickMenuOnIcon
‪static string wrapClickMenuOnIcon( $content, $table, $uid=0, $context='', $_addParams='', $_enDisItems='', $returnTagParameters=false)
Definition: BackendUtility.php:2510
‪TYPO3\CMS\Backend\View\BackendLayout\Grid\GridColumnItem\getRecord
‪getRecord()
Definition: GridColumnItem.php:186
‪TYPO3\CMS\Core\Core\Environment\getProjectPath
‪static string getProjectPath()
Definition: Environment.php:169
‪TYPO3\CMS\Backend\Preview\StandardContentPreviewRenderer\getLanguageService
‪getLanguageService()
Definition: StandardContentPreviewRenderer.php:436
‪TYPO3\CMS\Backend\Preview\StandardContentPreviewRenderer\renderPageModulePreviewFooter
‪string renderPageModulePreviewFooter(GridColumnItem $item)
Definition: StandardContentPreviewRenderer.php:243
‪TYPO3\CMS\Backend\Routing\UriBuilder
Definition: UriBuilder.php:38
‪TYPO3\CMS\Backend\Preview\StandardContentPreviewRenderer\getThumbCodeUnlinked
‪string getThumbCodeUnlinked($row, $table, $field)
Definition: StandardContentPreviewRenderer.php:356
‪TYPO3\CMS\Backend\Utility\BackendUtility\getLabelFromItemListMerged
‪static string getLabelFromItemListMerged($pageId, $table, $column, $key)
Definition: BackendUtility.php:1434
‪TYPO3\CMS\Backend\Utility\BackendUtility\getPagesTSconfig
‪static array getPagesTSconfig($id)
Definition: BackendUtility.php:698
‪TYPO3\CMS\Backend\Utility\BackendUtility\getRecordTitle
‪static string getRecordTitle($table, $row, $prep=false, $forceResult=true)
Definition: BackendUtility.php:1541
‪TYPO3\CMS\Core\Authentication\BackendUserAuthentication
Definition: BackendUserAuthentication.php:62
‪TYPO3\CMS\Backend\Utility\BackendUtility
Definition: BackendUtility.php:75
‪TYPO3\CMS\Backend\Utility\BackendUtility\getRecord
‪static array null getRecord($table, $uid, $fields=' *', $where='', $useDeleteClause=true)
Definition: BackendUtility.php:95
‪TYPO3\CMS\Backend\Utility\BackendUtility\getProcessedValue
‪static string null getProcessedValue( $table, $col, $value, $fixed_lgd_chars=0, $defaultPassthrough=false, $noRecordLookup=false, $uid=0, $forceResult=true, $pid=0)
Definition: BackendUtility.php:1664
‪TYPO3\CMS\Fluid\View\StandaloneView
Definition: StandaloneView.php:34
‪$GLOBALS
‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['adminpanel']['modules']
Definition: ext_localconf.php:5
‪TYPO3\CMS\Backend\View\PageLayoutView
Definition: PageLayoutView.php:61
‪TYPO3\CMS\Core\Core\Environment
Definition: Environment.php:40
‪TYPO3\CMS\Backend\Utility\BackendUtility\getLabelFromItemlist
‪static string getLabelFromItemlist($table, $col, $key)
Definition: BackendUtility.php:1410
‪TYPO3\CMS\Core\Localization\LanguageService
Definition: LanguageService.php:42
‪TYPO3\CMS\Backend\Preview\StandardContentPreviewRenderer\getBackendUser
‪getBackendUser()
Definition: StandardContentPreviewRenderer.php:431
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:46
‪TYPO3\CMS\Backend\Preview\StandardContentPreviewRenderer\linkEditContent
‪string linkEditContent(string $linkText, $row)
Definition: StandardContentPreviewRenderer.php:412
‪TYPO3\CMS\Backend\View\BackendLayout\Grid\GridColumnItem
Definition: GridColumnItem.php:42
‪TYPO3\CMS\Backend\Utility\BackendUtility\date
‪static string date($tstamp)
Definition: BackendUtility.php:978
‪TYPO3\CMS\Backend\View\BackendLayout\Grid\GridColumnItem\isDisabled
‪isDisabled()
Definition: GridColumnItem.php:212
‪TYPO3\CMS\Backend\Preview\StandardContentPreviewRenderer\MENU_CONTENT_TYPES
‪const MENU_CONTENT_TYPES
Definition: StandardContentPreviewRenderer.php:59
‪TYPO3\CMS\Backend\Utility\BackendUtility\splitTable_Uid
‪static array splitTable_Uid($str)
Definition: BackendUtility.php:208