Project

General

Profile

Actions

Feature #65208

closed

levelfield with fieldToSearch and fieldToGet

Added by Guy Couronné about 9 years ago. Updated over 4 years ago.

Status:
Closed
Priority:
Could have
Assignee:
-
Category:
TypoScript
Target version:
-
Start date:
2015-02-20
Due date:
% Done:

0%

Estimated time:
PHP Version:
Tags:
Complexity:
Sprint Focus:

Description

Hi,

I'm creating a menu of pages. I create a special field : is_microsite (boolean), which allow me to know which page should be based of my HMENU. To create my menu, I must check if is_microsite is true, and get page's uid where it's true.

For exemple :

Website : (level 1, uid:1, is_microsite:false, no menu)
  Page Test (level 2, uid:2, is_microsite:false, no menu)
    Page Test 2 (level 3, uid:3, is_microsite:true, menu of subpages (first level) of "Page Test 2")
      Page Test 3 (level 4, uid:4, is_microsite:false, menu of subpages (first level) of "Page Test 2")
        Page Test 4 (level 5, uid:5, is_microsite:false, menu of subpages (first level) of "Page Test 2")
      Page Test 5 (level 4, uid:6, is_microsite:false, menu of subpages (first level) of "Page Test 2")

For the moment, the current TS :

    levelfield:-1, is_microsite, slide

returns the value of is_microsite, if it's true. I cannot know which page has is_microsite setted, so I cannot create an HMENU of subpages (first level) of this page.

I didn't find a workaround for my case.

My solution, for my example, is the following :

lib.menu = HMENU
lib.menu {
    if.isTrue.data = levelfield:-1, is_microsite!uid, slide
    special = directory
    special.value.data = levelfield:-1, is_microsite!uid, slide
    wrap = <nav>|</nav>

    1 = TMENU
    1 {
        wrap = <ul>|</ul>

        NO = 1
        NO.wrapItemAndSub = <li>|</li>

        ACT < .NO

        CUR < .NO
        CUR.wrapItemAndSub = <li class="selected">|</li>
    }
}

In \TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer :

public function rootLineValue($key, $field, $slideBack = 0, $altRootLine = '') {
  $rootLine = is_array($altRootLine) ? $altRootLine : $GLOBALS['TSFE']->tmpl->rootLine;

  $fieldParts = GeneralUtility::trimExplode('!', $field);
  $fieldToSearch = $fieldParts[0];
  if(!isset($fieldParts[1])) {
    $fieldToGet = $fieldParts[0];
  } else {
    $fieldToGet = $fieldParts[1];
  }

  if (!$slideBack) {
    return $rootLine[$key][$fieldToGet];
  } else {
    for ($a = $key; $a >= 0; $a--) {
      $val = $rootLine[$a][$fieldToSearch];
        if ($val) {
          return $rootLine[$a][$fieldToGet];
        }
      }
  }
}

If "$field" has the delimiter "!", it allow check which page has $fieldToSearch to true and return page's $fieldToGet.

What do you think ?

Actions

Also available in: Atom PDF