98 'alternativeSortingField',
99 'alternativeSortingField.',
100 'showAccessRestrictedPages',
101 'showAccessRestrictedPages.',
107 'alwaysActivePIDlist',
108 'alwaysActivePIDlist.',
158 'doNotLinkIt' =>
'1',
159 'wrapItemAndSub' =>
'{|}, |*| {|}, |*| {|}',
165 'userFunc' =>
'TYPO3\CMS\Frontend\DataProcessing\MenuProcessor->getDataAsJson',
172 'field' =>
'nav_title // title',
174 'wrap' =>
',"title":|',
175 'preUserFunc' =>
'TYPO3\CMS\Frontend\DataProcessing\MenuProcessor->jsonEncodeUserFunc'
180 'wrap' =>
',"link":|',
185 'wrap' =>
',"target":|',
190 'wrap' =>
',"active":|'
195 'wrap' =>
',"current":|'
200 'wrap' =>
',"spacer":|'
212 'includeSpacer' => 0,
214 'titleField' =>
'nav_title // title'
257 $this->contentDataProcessor = GeneralUtility::makeInstance(ContentDataProcessor::class);
268 return $this->cObj->stdWrapValue($key, $this->processorConfiguration, $this->menuDefaults[$key]);
278 $invalidArguments = [];
279 foreach ($this->processorConfiguration as $key => $value) {
280 if (!in_array($key, $this->allowedConfigurationKeys)) {
281 $invalidArguments[str_replace(
'.',
'', $key)] = $key;
284 if (!empty($invalidArguments)) {
285 throw new \InvalidArgumentException(
'MenuProcessor Configuration contains invalid Arguments: ' . implode(
', ', $invalidArguments), 1478806566);
296 foreach ($this->menuConfig as $key => $value) {
297 if (in_array($key, $this->removeConfigurationKeysForHmenu)) {
298 unset($this->menuConfig[$key]);
302 if (isset($this->menuConfig[
'special.'][
'value.'])) {
303 $this->menuConfig[
'special.'][
'value'] = $this->cObj->stdWrap($this->menuConfig[
'special.'][
'value'], $this->menuConfig[
'special.'][
'value.']);
304 unset($this->menuConfig[
'special.'][
'value.']);
313 $this->menuLevelConfig[
'stdWrap.'][
'cObject.'] = array_replace_recursive(
314 $this->menuLevelConfig[
'stdWrap.'][
'cObject.'],
317 'field' => $this->menuTitleField,
328 if ($this->menuConfig[
'special'] ===
'language') {
329 $languageUids = $this->menuConfig[
'special.'][
'value'];
330 if ($this->menuConfig[
'special.'][
'value'] ===
'auto') {
332 $languageUids = implode(
',', array_keys($site->getLanguages()));
334 $this->menuLevelConfig[
'stdWrap.'][
'cObject.'] = array_replace_recursive(
335 $this->menuLevelConfig[
'stdWrap.'][
'cObject.'],
340 'wrap' =>
',"available":|'
344 'value' => $languageUids,
347 'data' =>
'register:count_HMENU_MENUOBJ',
352 'wrap' =>
',"languageUid":"|"'
365 $this->menuConfig[$i] =
'TMENU';
366 $this->menuConfig[$i .
'.'][
'IProcFunc'] =
'TYPO3\CMS\Frontend\DataProcessing\MenuProcessor->replacePlaceholderInRenderedMenuItem';
368 $this->menuConfig[$i .
'.'][
'stdWrap.'][
'wrap'] =
',"children": [|]';
370 if (array_key_exists(
'showAccessRestrictedPages', $this->menuConfig)) {
371 $this->menuConfig[$i .
'.'][
'showAccessRestrictedPages'] = $this->menuConfig[
'showAccessRestrictedPages'];
372 if (array_key_exists(
'showAccessRestrictedPages.', $this->menuConfig)
373 && is_array($this->menuConfig[
'showAccessRestrictedPages.'])) {
374 $this->menuConfig[$i .
'.'][
'showAccessRestrictedPages.'] = $this->menuConfig[
'showAccessRestrictedPages.'];
379 $this->menuConfig[$i .
'.'][
'NO'] =
'1';
381 if ($this->menuIncludeSpacer) {
382 $this->menuConfig[$i .
'.'][
'SPC'] =
'1';
383 $this->menuConfig[$i .
'.'][
'SPC.'] = $this->menuConfig[$i .
'.'][
'NO.'];
384 $this->menuConfig[$i .
'.'][
'SPC.'][
'stdWrap.'][
'cObject.'][
'50.'][
'value'] =
'1';
386 $this->menuConfig[$i .
'.'][
'IFSUB'] =
'1';
387 $this->menuConfig[$i .
'.'][
'IFSUB.'] = $this->menuConfig[$i .
'.'][
'NO.'];
388 $this->menuConfig[$i .
'.'][
'ACT'] =
'1';
389 $this->menuConfig[$i .
'.'][
'ACT.'] = $this->menuConfig[$i .
'.'][
'NO.'];
390 $this->menuConfig[$i .
'.'][
'ACT.'][
'stdWrap.'][
'cObject.'][
'30.'][
'value'] =
'1';
391 $this->menuConfig[$i .
'.'][
'ACTIFSUB'] =
'1';
392 $this->menuConfig[$i .
'.'][
'ACTIFSUB.'] = $this->menuConfig[$i .
'.'][
'ACT.'];
393 $this->menuConfig[$i .
'.'][
'CUR'] =
'1';
394 $this->menuConfig[$i .
'.'][
'CUR.'] = $this->menuConfig[$i .
'.'][
'ACT.'];
395 $this->menuConfig[$i .
'.'][
'CUR.'][
'stdWrap.'][
'cObject.'][
'40.'][
'value'] =
'1';
396 $this->menuConfig[$i .
'.'][
'CURIFSUB'] =
'1';
397 $this->menuConfig[$i .
'.'][
'CURIFSUB.'] = $this->menuConfig[$i .
'.'][
'CUR.'];
398 if ($this->menuConfig[
'special'] ===
'language') {
399 $this->menuConfig[$i .
'.'][
'USERDEF1'] = $this->menuConfig[$i .
'.'][
'NO'];
400 $this->menuConfig[$i .
'.'][
'USERDEF1.'] = $this->menuConfig[$i .
'.'][
'NO.'];
401 $this->menuConfig[$i .
'.'][
'USERDEF1.'][
'stdWrap.'][
'cObject.'][
'60.'][
'value'] =
'0';
402 $this->menuConfig[$i .
'.'][
'USERDEF2'] = $this->menuConfig[$i .
'.'][
'ACT'];
403 $this->menuConfig[$i .
'.'][
'USERDEF2.'] = $this->menuConfig[$i .
'.'][
'ACT.'];
404 $this->menuConfig[$i .
'.'][
'USERDEF2.'][
'stdWrap.'][
'cObject.'][
'60.'][
'value'] =
'0';
440 $renderedMenu = $menuContentObject->
render($this->menuConfig);
441 if (!$renderedMenu) {
442 return $processedData;
446 $menu = json_decode($renderedMenu,
true);
449 foreach ($menu as $key => $page) {
455 return $processedData;
467 if (is_array($page[
'children'])) {
468 foreach ($page[
'children'] as $key => $item) {
473 $recordContentObjectRenderer = GeneralUtility::makeInstance(ContentObjectRenderer::class);
474 $recordContentObjectRenderer->start($page[
'data'],
'pages');
475 $processedPage = $this->contentDataProcessor->process($recordContentObjectRenderer,
$processorConfiguration, $page);
476 return $processedPage;
510 return json_encode($value, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE);
522 $link = $this->
jsonEncode($menuItem[
'linkHREF'][
'HREF']);
525 $menuItem[
'parts'][
'title'] = str_replace(self::LINK_PLACEHOLDER, $link, $menuItem[
'parts'][
'title']);
526 $menuItem[
'parts'][
'title'] = str_replace(self::TARGET_PLACEHOLDER, $target, $menuItem[
'parts'][
'title']);
539 $matcher = GeneralUtility::makeInstance(SiteMatcher::class);