Russian TYPO3 community

Russian TYPO3 community (http://forum.typo3.ru/index.php)
-   Общие вопросы (http://forum.typo3.ru/forumdisplay.php?f=12)
-   -   RealUrl: можно ли заставить генерить свои ссылки? (http://forum.typo3.ru/showthread.php?t=9112)

Андрей Аксенов 29.12.2010 14:40

Не знаю, совсем по теме, или нет, но было здесь что-то схожее:
http://forum.typo3.biz/showthread.ph...t=%EC%E5%ED%FE
....
где была дана ссылка на страницу с фрагментами кода:
http://www.typo3wizard.com/en/snippe...-the-menu.html
Переведу суть:

Внешние ссылки и ярлыки непосредственно в меню
Для страниц типа "ссылка" и "внешний адрес" TYPO3 по умолчанию не делает непосредственных ссылок на целевые внешние страницы / страницы-ссылки.
Этот фрагмент кода подключает режимы CUR и ACT для страниц типа ссылка.
Все действие осуществляется при помощи объекта CASE в stdWrap элемента меню:
Цитата:

lib.menu=HMENU
lib.menu {
1=TMENU
1.wrap=<ul>|</ul>
1.NO {
# do not create a link here else there are double <a> tags
doNotLinkIt = 1
wrapItemAndSub=<li>|</li>
stdWrap.cObject = CASE
stdWrap.cObject {
key.field = doktype
default = TEXT
default {
field = title
typolink.parameter.field = uid
stdWrap.htmlSpecialChars = 1
}
# 4 = shortcut
4 = TEXT
4 {
field = title
typolink.parameter.field = shortcut
}
# 3 = external url
3 = TEXT
3 {
field = title
typolink.parameter.field = url
typolink.extTarget.field = target
}
}
}
}
Комментировать не буду, по-моему все понятно из кода...

dmartynenko 29.12.2010 15:07

Цитата:

Сообщение от Андрей Аксенов (Сообщение 29814)
Для страниц типа "ссылка" и "внешний адрес" TYPO3 по умолчанию не делает непосредственных ссылок на целевые внешние страницы / страницы-ссылки.

У меня для типа "ссылка" делает. Голый свежий TYPO3 + RealURL (да и старые тоже делают).

Для внешнего адреса конечно по умолчанию редирект.

Vornic 29.12.2010 16:19

Т.е., вы рекомендуете делать ссылку в меню "вручную", исключая её через excludeUidList ?

dmartynenko 29.12.2010 16:31

Не понял что вы имеете в виду под "вручную"?

Приведенный выше код всегда делает прямые ссылки с пунктов меню как для страниц типа "ссылка", так и для "внешнего адреса".

Vornic 29.12.2010 17:21

Не верно выразился, я имел ввиду через COA выстраивать меню, исключив первый пункт, добавляя его вручную через свойство TEXT (изврат не обращайте внимания).

Другой вопрос, как к элементам меню, которое предложил Андрей, добавить атрибут title. Конструкция ниже, от чего то не работает:
Цитата:

lib.mainMenu = HMENU
lib.mainMenu {
1=TMENU
1.wrap= <UL> | </TR> </UL>
1.NO {
# do not create a link here else there are double <a> tags
doNotLinkIt = 1
ATagTitle.field = description
wrapItemAndSub = <li> | </li>

stdWrap.cObject = CASE
stdWrap.cObject { ...

dmartynenko 29.12.2010 17:31

Попробуйте в 3-х местах добавить: typolink.title.field = description

doNotLinkIt = 1 запрещает меню самому формировать ссылки (ссылки формируются в stdWrap.cObject), поэтому ATagTitle не будет работь.

Vornic 29.12.2010 17:33

От... как я забыл про это свойство :-)
Спасибо Дмитрий! :-)

Vornic 29.12.2010 18:06

Попробовал, видно не умею я готовить этименю, вот что мы имеем:

Цитата:

lib.mainMenu {
1=TMENU
1.wrap = <UL> | </UL>
1.NO {
# do not create a link here else there are double <a> tags
doNotLinkIt = 1
allWrap = <li> | </li>

stdWrap.cObject = CASE
stdWrap.cObject {
key.field = doktype
default = TEXT
default {
field = nav_title
typolink.parameter.field = uid
typolink.title.field = description
stdWrap.htmlSpecialChars = 1
}
# 4 = shortcut
4 = TEXT
4 {
field = title // nav_title
typolink.parameter.field = shortcut
typolink.title.field = description
}
# 3 = external url
3 = TEXT
3 {
field = nav_title
typolink.parameter.field = url
typolink.extTarget.field = target
typolink.title.field = description
}
}
}

1.ACT = 1
1.ACT {
# do not create a link here else there are double <a> tags
doNotLinkIt = 1
allWrap = <li> | </li>

stdWrap.cObject = CASE
stdWrap.cObject {
key.field = doktype
default = TEXT
default {
field = nav_title
typolink.parameter.field = uid
typolink.title.field = description
stdWrap.htmlSpecialChars = 1
typolink.ATagParams = class="active" tabindex = {register:count_MENUOBJ}

}
# 4 = shortcut
4 = TEXT
4 {
field = nav_title
typolink.parameter.field = shortcut
typolink.title.field = description
typolink.ATagParams.wrap = class="active" tabindex = {register:count_MENUOBJ}

ATagParams.insertData = 1
ATagParams = class="active" tabindex = {register:count_MENUOBJ}
doNotLinkIt = 1
stdWrap.wrap = <span class="ActNoLink"> | </span>

}
3 = TEXT
3 {
field = nav_title
typolink.parameter.field = url
typolink.extTarget.field = target
typolink.title.field = description
typolink.ATagParams.wrap = class="active" tabindex = {register:count_MENUOBJ}
}
}
}

}
... много кода, толку совсем нет. Страница "Ярлык" не получает класс "Active"? остальные нормально, не ясно как такую ссылку делать не ссылкой (doNotLinkIt), т.е. просто передать значение поля {field:nav_title}

Тот код который делает то что нужно, кроме того что первый пункт меню "ярлык", не получает класс "Active" :

Цитата:

lib.mainMenu1 = HMENU
lib.mainMenu1 {
entryLevel = 0
wrap = <UL> | </UL>

1 = TMENU
1.NO {
allWrap = <li> | </li>
ATagTitle.field = abstract // description // subtitle // title
}

1.ACT = 1
1.ACT {
allWrap = <li> | </li>
ATagParams.insertData = 1
ATagParams = class="active" tabindex = {register:count_MENUOBJ}
doNotLinkIt = 1
stdWrap.wrap = <span class="ActNoLink"> | </span>
}
}

dmartynenko 30.12.2010 15:10

В код сильно не вдавался, но ИМХО ярлык никогда не сможет получить свойства из ACT. Так как ACT определяется по совпадению id страницы в меню с текущей страницей в FE. Для ярлыка они никогда не совпадут.

Выход - добавить свойство через JS для этого пункта меню при совпадении с URL.

Можно использовать TS условия для этих целей - если текущее id страницы равно нужному, то добавляем в шаблон JS код, который добавит нужный класс этому пункту меню.

Vornic 30.12.2010 16:14

Цитата:

ИМХО ярлык никогда не сможет получить свойства
По моему это касается внешних ссылок, с ярлыками у ACT проблем нет, ведь когда я делал ссылку корневой страницы не первую внутреннюю, то АCT отрабатывал, если сделать тоже самое внутри корня (т.е. страница ссылается на соседнюю), то АСТ перестаёт действовать - т.е., дело в иерархии?!
В общем, я оставил эту затею, слишком много усилий ради такого пустяка.

Решение задачи перешло в академический интерес - как сделать изящно. :-)


Часовой пояс GMT +4, время: 16:44.

Работает на vBulletin® версия 3.8.1.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot