Typoscript HMENU: получить заголовок уровня 1 в навигации уровня 2 - PullRequest
0 голосов
/ 05 июля 2018

Мне нужно создать меню, в котором для мобильных целей перед всеми записями уровня 2 есть заголовок уровня 1. Пример: моя структура выглядит следующим образом:

  • команда
    • Макс
    • Сепп
  • проекты
    • проект 1
    • проект 2

теперь я хочу, чтобы моя навигация выглядела так:

<ul>
  <li>
    <a>Team</a>
    <div class="dropdown-menu">
      <ul>
        <li>Team</li>
        <li><a>Max</a></li>
        <li><a>Sepp</a></li>
      </ul>
    </div>
  </li>
  <li>
    <a>Projects</a>
    <div class="dropdown-menu">
      <ul>
        <li>Projects</li>
        <li><a>Project 1</a></li>
        <li><a>Project 2</a></li>
      </ul>
    </div>
  </li>
</ul>

Так что мне нужно на уровне 2 заголовок уровня 1. как получить доступ к полю: nav_title для родительского элемента?

Мой опечатка выглядит так:

temp.nav = HMENU
temp.nav {


	1 = TMENU
	1 {
		    expAll = 1
        wrap = |
		    noBlur = 1

        stdWrap.innerWrap.cObject = LOAD_REGISTER
        stdWrap.innerWrap.cObject {
            level1Title.field = nav_title//title
        }

		NO = 1
		NO {
        ... 
		}

	}

	2 = TMENU
    2 {
        expAll = 1
        stdWrap.dataWrap = <ul><li> {register:level1Title}</li>|</ul><a>Jetzt Mitglied werden</a></div>
        noBlur = 1
        NO = 1
        NO {
            ...
        }

    }
}

Я пробовал это с LOAD_REGISTER, но это не работает. Какие-либо предложения?

1 Ответ

0 голосов
/ 06 июля 2018

что вы хотите, это поведение по умолчанию для меню TYPO3. Вам просто нужно установить правильную упаковку. Делаем обертку там, где она принадлежит:

temp.menu = HMENU
temp.menu {
    1 = TMENU
    1 {
        expAll = 1
        wrap = <ul>|</ul>
        NO = 1
        NO {
            wrapItemAndSub = <li>|</li>
        }
    }
    // as you have no specific wrapping all levels can be generated the same:
    2 < .1
    3 < .2
}

если вам нужны определенные обертки на каждом уровне, вы можете адаптировать их после копирования (в этом примере вы можете видеть, откуда происходит обертывание)

temp.menu = HMENU
temp.menu {
    1 = TMENU
    1 {
        wrap = <ul class="level1">|</ul>
        NO = 1
        NO {
            wrapItemAndSub = <li class="lev1">|</li>
        }
    }
    2 < .1
    2 {
        wrap = <ul class="level2">|</ul>
        NO.wrapItemAndSub = <li class="lev2">|</li>
    }
    3 < .2
    3 {
        wrap = <ul class="level3">|</ul>
        NO.wrapItemAndSub = <li class="lev3">|</li>
    }
} 

.


РЕДАКТИРОВАТЬ: после выяснения проблемы:
работа с LOADREGISTER в меню может привести к путанице, поскольку пункты меню не создаются встроенными рекурсивными.

Если вы хотите повторить пункт меню, вы должны создать его на месте.
Поэтому вам нужно разделить чистую упаковку и использовать волшебное меню соуса.

temp.menu = HMENU
temp.menu {
    1 = TMENU
    1 {
        wrap = <ul class="level1">|</ul>
        NO = 1
        NO.wrapItemAndSub = <li>|</li>

        // only for menuitems which contains further pages:
        IFSUB < .NO
        IFSUB {
            // beginning the part of the submenu
            after.cObject = TEXT
            after.cObject {
                field = nav_title // title
                wrap = <div class="dropdown-menu"><ul><li>|</li>
            }
        }
    }
    2 < .1
    2 {
        // no beginning in wrap needed as it is done at level 1
        wrap = |</ul></div>
    }
}

дальнейшие уровни требуют дополнительной обработки. например: 2.IFSUB > и 3.wrap = <ul>|</ul>

Примечание: если вы хотите чистый HTML с отступами, вам нужно использовать .noTrimWrap и многострочные значения в Typoscript.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...