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)

Vornic 27.12.2010 17:46

RealUrl: можно ли заставить генерить свои ссылки?
 
Привет Уважаемой typo3 общественности!
Может у кого есть опыт решения подобных задач.
Мне необходимо заставить realurl определенную страницу рассматривать как главную, т.е. чтобы он генерил в меню для одного из адресов не http://www.mysite.ru/kompanija/ а нормальный http://www.mysite.ru/
Пока я обхожусь через редирект, что как бы не правильно:
PHP код:

   'redirects' => array(
           
'kompanija/' => 'http://www.mysite.ru/',
    ), 

городить огород в меню, т.е. лепить через TS искусственный пункт меню тоже как бы не правильно.
Хотелось бы получить совета, как поступать?:confused:

dmartynenko 28.12.2010 13:11

Одним из способов который можно попробовать - сделать страницу kompanija ссылкой на корневую.

Вообще не очень понятно для чего вам это. Если поясните, то возможно найдется другой вариант реализации вашей задумки.

Vornic 28.12.2010 13:53

Цитата:

Сообщение от dmartynenko (Сообщение 29764)
Одним из способов который можно попробовать - сделать страницу kompanija ссылкой на корневую.

Этот вариант не подходит, напротив, корневая страница у меня является ссылкой на главную. Так удобней, в ней главный TS скрипт, ей присвоен шаблон внутренних страниц(для того чтобы вся иерархия имела этот шаблон), а главной - шаблон главной.

Цитата:

Сообщение от dmartynenko (Сообщение 29764)
Вообще не очень понятно для чего вам это. Если поясните, то возможно найдется другой вариант реализации вашей задумки.

Банально - каприз заказчика.

PS Собственно, и интересно, задача вроде как не тривиальная.:)

dmartynenko 28.12.2010 14:06

Цитата:

Сообщение от Vornic (Сообщение 29770)
Этот вариант не подходит, напротив, корневая страница у меня является ссылкой на главную. Так удобней, в ней главный TS скрипт, ей присвоен шаблон внутренних страниц(для того чтобы вся иерархия имела этот шаблон), а главной - шаблон главной.

Так все равно не понятно что мешает сделать еще одну страницу ссылкой на главную (коневую)?

У вас главная и корневая страницы это разные страницы? Если да, то зачем?

Vornic 28.12.2010 14:25

Цитата:

Сообщение от dmartynenko (Сообщение 29773)
Так все равно не понятно что мешает сделать еще одну страницу ссылкой на главную (коневую)?

Идея хороша, но как то не красиво - две лишние страницы :-)

Цитата:

Сообщение от dmartynenko (Сообщение 29773)
У вас главная и корневая страницы это разные страницы? Если да, то зачем?

да, это разные страницы, корневая страница в меню не входит, HMENU же строится от определенного корня (узла).
Код:

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

PS Возможно я не правильно понимаю typo3. Уж слишком гибкая она, и путей решения задачи масса :-)

dmartynenko 28.12.2010 14:34

Цитата:

Сообщение от Vornic (Сообщение 29778)
Идея хороша, но как то не красиво - две лишние страницы :-)

На сколько я понимаю исходая задача этим решается (я еще раз ее внимательно перечитал)? Или задача все же другая?

Если у вас получается несколько (две) страницы в меню, которые ссылаются на главную и одна из них лишняя, то просто исключите ее по ID (свойство excludeUidList).

Vornic 28.12.2010 14:48

Цитата:

Сообщение от dmartynenko (Сообщение 29779)
На сколько я понимаю исходая задача этим решается (я еще раз ее внимательно перечитал)? Или задача все же другая?

Нет, вот только что попробовал, скрыл главную из меню (Hide in menu), создал еще одну рядом и сделал её ссылкой на корень. Как результат - ничего не изменилось (кэши зачищал, таблицы realurl чистил). Адрес так и остался - http://www.mysite.ru/kompanija/

Цитата:

Сообщение от dmartynenko (Сообщение 29779)
Если у вас получается несколько (две) страницы в меню, которые ссылаются на главную и одна из них лишняя, то просто исключите ее по ID (свойство excludeUidList).

я вместо excludeUidList использую "Hide in menu" - это же одно и то же?

dmartynenko 28.12.2010 14:59

Цитата:

Сообщение от Vornic (Сообщение 29780)
Нет, вот только что попробовал, скрыл главную из меню (Hide in menu), создал еще одну рядом и сделал её ссылкой на корень. Как результат - ничего не изменилось (кэши зачищал, таблицы realurl чистил). Адрес так и остался - http://www.mysite.ru/kompanija/

А при переходе по этому адресу что получается?
Страница у вас типа "Ссылка" (в старых версиях название "Ярлык") ?
Сейчас попробовал - выбирается тип страницы "Ссылка", выбирается страница в соответсвующем поле "Ссылка на страницу" и в меню получается прямая ссылка на указанную страницу (проверил TYPO3 4.1 и 4.4).

Цитата:

Сообщение от Vornic (Сообщение 29780)
я вместо excludeUidList использую "Hide in menu" - это же одно и то же?

Это по смыслу похоже, но для разных целей.
Hide in menu - скрыть страницу из всех меню (кроме меню где явно указано includeNotInMenu).
excludeUidList - в конкретном меню скрыть именно указанные страницы.

dmartynenko 28.12.2010 15:15

Нашел еще в доке по RealURL параметр:

Цитата:

dontResolveShortcuts

If set, page shortcuts are not resolved to their destination page.
NB: If you do not set this option the backends Speaking URL Management module will probably report duplicate entries in the pathCache table since both the shortcut page and the destination page will have the same URL entry. The error is in that case not a real problem of course, but annoying to the eye.

Vornic 28.12.2010 17:19

Еще раз повторил "приём с лишней страницей", после того как включил 'dontResolveShortcuts' => 1 ситуация наконец исправилась, правда теперь элемент меню главной страницы не получает статус "активный"
А в целом, Спасибо Дмитрий!

PS ...однако не покидает чувство, что это не правильный подход. :-)
PSS ...пытаюсь достучаться до Вашей аси, тщетно :-)

Андрей Аксенов 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 отрабатывал, если сделать тоже самое внутри корня (т.е. страница ссылается на соседнюю), то АСТ перестаёт действовать - т.е., дело в иерархии?!
В общем, я оставил эту затею, слишком много усилий ради такого пустяка.

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

dmartynenko 30.12.2010 17:54

ACT отрабатывает и на нахождение страницы в пути к "корню".
Это нужно для вложенных меню:

Раздел 1
- подраздел 1.1
- подраздел 1.2
Раздел 2
- подраздел 2.1
- подраздел 2.2
Раздел 3

Если вы сейчас на странице "подраздел 2.1", то активными будут 2 страницы в обоих уровнях меню. Видимо это как раз ваш случай когда "ярлык" получил состояние ACT.


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

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