PDA

Просмотр полной версии : Templavoila и меню


agravin
14.05.2015, 14:01
Добрый день. Прошу помощи у форумчан. Уже несколько дней бьюсь с наверное не сложной задачей, но никак не могу одолеть. Прикручивая html-шаблон к движку, с помощью Templavoila, написал такой скрипт:
lib.menu = HMENU
lib.menu.1 = TMENU
lib.menu.1 {
expAll = 1
noBlur = 1
wrap = |
NO {
allWrap = <li>|</li>
}
IFSUB = 1
IFSUB {
allWrap = <li class="with_menu">|<ul class="sub_menu">
}
ACT = 1
ACT.allWrap = <li class="active"> |
}

lib.menu.2 = TMENU
lib.menu.2 {
expAll = 1
noBlur = 1
wrap = |</ul></li>
NO {
wrapItemAndSub = <li>|</li>
}

}


Исходный код, который показывает браузер, соответствует тому, который написал верстальщик:
<ul>
<li class="with_menu"><a href="/">Раздел 1</a>
<ul class="sub_menu">
<li><a href="/">Подраздел 1</a></li>
<li><a href="/">Подраздел 2</a></li>
</ul>
</li>
<li><a href="/">Раздел 2</a></li>
<li><a href="/">Раздел 3</a></li>
<li><a href="/">Раздел 4</a></li>
<li><a href="/">Раздел 5</a></li>
</ul>


А стили поехали. Я так подозреваю, что допустил ошибку в скрипте, но парсер Templavoila ее пропустил и доделывает меню, но как-то криво. Только ошибки я и не могу найти :mad:

Николай Сипко
15.05.2015, 00:01
Стандартный код трехуровневого меню TYPO3:
===========

lib.menu = HMENU
lib.menu {
wrap = <div class="menu menu_ul">|</div>
entryLevel = 0
1 = TMENU
1 {
wrap = <div class="menu_1"><ul>|</ul></div>
target = _top
NO {
wrapItemAndSub = <li>|</li>
}
ACT < .NO
ACT = 1
CUR < .NO
CUR = 1
CUR {
allWrap = <div class="menu_act">|</div>
}
}
2 = TMENU
2 {
expAll = 1
wrap = <div class="menu_2"><ul>|</ul></div>
target = _top
NO {
wrapItemAndSub = <li>|</li>
}
ACT < .NO
ACT = 1
CUR < .NO
CUR = 1
CUR {
allWrap = <div class="menu_act">|</div>
}
}
3 = TMENU
3 {
expAll = 1
wrap = <div class="menu_3"><ul>|</ul></div>
target = _top
NO {
wrapItemAndSub = <li>|</li>
}
ACT < .NO
ACT = 1
CUR < .NO
CUR = 1
CUR {
allWrap = <div class="menu_act">|</div>
}
}
}

agravin
15.05.2015, 18:28
Николай, спасибо за ответ.

Ни один из известных мне скриптов меню не помог. Проблема оказалась в том, что парсер выдает исходный код в одну строку, что каким-то образом влияет на верстку. Разлепить теги пока не удалось. Пользовался Например так работает
wrap(
<li>
|
</li>
) от Валерия Романчева и Раздел Установка - пункт 4 All Configuration. Там определи значение для [FE][tidy] = 1 от Полтиников.

В принципе можно вставить в код <wbr> , но хочется найти более красивое решение.

Николай Сипко
15.05.2015, 18:56
Если речь идет о templavoila, то исходный код меню вставляют в setup.ts, например:
=======
config.htmlTag_langKey = ru
config.no_cache = 0
config.disablePrefixComment = 1

page = PAGE
page.typeNum = 0
page.10 = USER
page.10.userFunc = tx_templavoila_pi1->main_page

page.shortcutIcon = favicon.ico

page.includeCSS {
file = fileadmin/templates/ns.css
file.media = all
}
lib.menu = HMENU
lib.menu {
wrap = <div class="menu menu_ul">|</div>
entryLevel = 0
1 = TMENU
1 {
wrap = <div class="menu_1"><ul>|</ul></div>
target = _top
NO {
wrapItemAndSub = <li>|</li>
}
ACT < .NO
ACT = 1
CUR < .NO
CUR = 1
CUR {
allWrap = <div class="menu_act">|</div>
}
}
2 = TMENU
2 {
expAll = 1
wrap = <div class="menu_2"><ul>|</ul></div>
target = _top
NO {
wrapItemAndSub = <li>|</li>
}
ACT < .NO
ACT = 1
CUR < .NO
CUR = 1
CUR {
allWrap = <div class="menu_act">|</div>
}
}
3 = TMENU
3 {
expAll = 1
wrap = <div class="menu_3"><ul>|</ul></div>
target = _top
NO {
wrapItemAndSub = <li>|</li>
}
ACT < .NO
ACT = 1
CUR < .NO
CUR = 1
CUR {
allWrap = <div class="menu_act">|</div>
}
}
}
=======
В templavoila при разметке html лишь указывают путь к этому объекту (lib.menu).

Или я что-то не так понял?

А вообще-то я тоже приверженец templavoila, но сейчас осваиваю FLUIDTEMPLATE и прихожу во все больший восторг. Кстати, примеры и кодов, и их применений можно найти на http://typo3buddy.com/home/

agravin
15.05.2015, 19:38
Да, я делаю с Templavoila.

Практически решил задачу. Осталось только понять, как сделать правильно ACT и IFSUB. Оказалось, что пример приведенный Валерием работает, но для wrapItemAndSub, wrap и прочее, разный синтаксис. Сейчас пока так
lib.menu = HMENU
lib.menu.1 = TMENU
lib.menu.1 {
expAll = 1
noBlur = 1
wrap = |
NO.allStdWrap.noTrimWrap (
|
<li>|</li>
|
)
IFSUB = 1
IFSUB {
allWrap = <li class="with_menu">|<ul class="sub_menu">
allStdWrap.noTrimWrap (
|
|
|
)
}
ACT = 1
ACT.allWrap = <li class="active"> | </li>
allStdWrap.noTrimWrap (
|
|
|
)
}

lib.menu.2 = TMENU
lib.menu.2 {
expAll = 1
noBlur = 1
wrap = |</ul></li>
NO.allStdWrap.noTrimWrap (
|
<li>|</li>
|
)
}

}

Как доделаю подразделы, выложу корректный код.

Николай Сипко
15.05.2015, 22:16
Исходный код, который показывает браузер, соответствует тому, который написал верстальщик:
<ul>
<li class="with_menu"><a href="/">Раздел 1</a>
<ul class="sub_menu">
<li><a href="/">Подраздел 1</a></li>
<li><a href="/">Подраздел 2</a></li>
</ul>
</li>
<li><a href="/">Раздел 2</a></li>
<li><a href="/">Раздел 3</a></li>
<li><a href="/">Раздел 4</a></li>
<li><a href="/">Раздел 5</a></li>
</ul>

Если вы про такое меню http://nsf11.ru/index.php?id=1, то сделано оно на основе стандартного кода средствами css.
Или я что-то не понимаю?

agravin
15.05.2015, 22:43
Если Вы посмотрите исходный код меню, в указанном Вами примере, то увидите, что его код идет одной строкой. Почему-то некоторые стили/скрипты этого иногда не любят и отображают меню криво. Как в моем случае. Именно для этого нужно разлепить теги, сделав их читаемыми.

Николай Сипко
15.05.2015, 22:59
Вы первый человек, от которого я узнал, что TYPO3 код своего site-map отображает "криво".

Приятной работы!

agravin
15.05.2015, 23:48
Я не говорил, что TYPO3 отображает криво. Я сказал, что отображает в одну строку (проглатывая пробелы и перенос строки). И это в редких случаях плохо.

Доделал скрипт (немного кривоват, но работает).

Можете вставить в свой сетап и посмотреть разницу в исходном коде браузера (Ctrl+U), до и после.
lib.menu = HMENU
lib.menu.1 = TMENU
lib.menu.1 {
expAll = 1
noBlur = 1
wrap = |
NO.allStdWrap.noTrimWrap (
|
<li>|</li>
|
)
IFSUB = 1
IFSUB {
allWrap = <li class="with_menu">|<ul class="sub_menu">
allStdWrap.noTrimWrap (
|
|
|
)
}
ACTIFSUB = 1
ACTIFSUB {
allWrap = <li class="active with_menu">|<ul class="sub_menu">
allStdWrap.noTrimWrap (
|
|
|
)
}

ACT = 1
ACT.allWrap = <li class="active"> | </li>
allStdWrap.noTrimWrap (
|
|
|
)
}

lib.menu.2 = TMENU
lib.menu.2 {
expAll = 1
noBlur = 1
stdWrap.noTrimWrap (
|
|</ul></li>
|
)
NO.allStdWrap.noTrimWrap (
|
<li>|</li>
|
)
}

Николай Сипко
16.05.2015, 11:04
Вставил в свой сетап и посмотрел разницу в исходном коде браузера (Ctrl+U), до и после:

До
=======
<div id="menu" class="header"><div class="menu menu_ul"><div class="menu_1"><ul><li><a href="index.php?id=40" target="_top">Естествознание</a></li><li><div class="menu_act"><a href="index.php?id=1" target="_top">Вопросы</a></div><div class="menu_2"><ul><li><a href="index.php?id=2" target="_top">Внушения</a></li><li><a href="index.php?id=3" target="_top">Цель</a></li><li><a href="index.php?id=4" target="_top">Место</a></li><li><a href="index.php?id=5" target="_top">Тела</a></li><li><a href="index.php?id=6" target="_top">Вращения</a></li><li><a href="index.php?id=7" target="_top">Атомы</a></li><li><a href="index.php?id=8" target="_top">Зенон</a></li></ul></div></li><li><a href="index.php?id=9" target="_top">Светила</a></li><li><a href="index.php?id=17" target="_top">Моменты</a></li><li><a href="index.php?id=25" target="_top">Понятия</a></li><li><a href="index.php?id=33" target="_top">Идеи</a></li></ul></div></div></div>

После
=======
<div id="menu" class="header">
<li class="with_menu"><a href="index.php?id=40">Естествознание</a><ul class="sub_menu">
<li><a href="index.php?id=39">Администрация</a></li>
</ul></li>
<li class="active with_menu"><a href="index.php?id=1">Вопросы</a><ul class="sub_menu">
<li><a href="index.php?id=2">Внушения</a></li>
<li><a href="index.php?id=3">Цель</a></li>
<li><a href="index.php?id=4">Место</a></li>
<li><a href="index.php?id=5">Тела</a></li>
<li><a href="index.php?id=6">Вращения</a></li>
<li><a href="index.php?id=7">Атомы</a></li>
<li><a href="index.php?id=8">Зенон</a></li>
</ul></li>
<li class="with_menu"><a href="index.php?id=9">Светила</a><ul class="sub_menu">
<li><a href="index.php?id=10">Парадоксы</a></li>
<li><a href="index.php?id=11">Модели</a></li>
<li><a href="index.php?id=12">Маятники</a></li>
<li><a href="index.php?id=13">Аналеммы</a></li>
<li><a href="index.php?id=14">Мироздание</a></li>
<li><a href="index.php?id=15">Свет</a></li>
<li><a href="index.php?id=16">Человек</a></li>
</ul></li>
<li class="with_menu"><a href="index.php?id=17">Моменты</a><ul class="sub_menu">
<li><a href="index.php?id=18">Коперник</a></li>
<li><a href="index.php?id=19">Кеплер</a></li>
<li><a href="index.php?id=20">Галилей</a></li>
<li><a href="index.php?id=21">Ньютон</a></li>
<li><a href="index.php?id=22">Исчисление</a></li>
<li><a href="index.php?id=23">Гравитация</a></li>
<li><a href="index.php?id=24">Законы</a></li>
</ul></li>
<li class="with_menu"><a href="index.php?id=25">Понятия</a><ul class="sub_menu">
<li><a href="index.php?id=26">Кинетика</a></li>
<li><a href="index.php?id=27">Масса</a></li>
<li><a href="index.php?id=28">Энергия</a></li>
<li><a href="index.php?id=29">Начала</a></li>
<li><a href="index.php?id=30">Энтропия</a></li>
<li><a href="index.php?id=31">Материя</a></li>
<li><a href="index.php?id=32">Отношения</a></li>
</ul></li>
<li class="with_menu"><a href="index.php?id=33">Идеи</a><ul class="sub_menu">
<li><a href="index.php?id=34">Вымыслы</a></li>
<li><a href="index.php?id=35">Аналогии</a></li>
<li><a href="index.php?id=36">Кванты</a></li>
<li><a href="index.php?id=37">Излучения</a></li>
<li><a href="index.php?id=38">Движущее</a></li>
</ul></li>
</div>
=======

Поясните, пожалуйста, что это дает?

И, как "написал верстальщик:
Код:
<ul>
<li class="with_menu"><a href="/">Раздел 1</a>
<ul class="sub_menu">
<li><a href="/">Подраздел 1</a></li>
<li><a href="/">Подраздел 2</a></li>
</ul>
</li>
<li><a href="/">Раздел 2</a></li>
<li><a href="/">Раздел 3</a></li>
<li><a href="/">Раздел 4</a></li>
<li><a href="/">Раздел 5</a></li>
</ul>"

Задача "верстальщика" не решена.

Может проще тогда, не мурдствуя лукаво, повставлять везде элемент site-map и вперед к css типа:

.csc-sitemap li a{
text-decoration:none;
text-shadow: 1px 4px 3px rgba(0,0,0,0.2), 0px -5px 35px rgba(255,255,255,0.3);
}
.csc-sitemap a:hover {
color: #fff;
text-shadow:
-1px -1px 0 #000,
1px -1px 0 #000,
-1px 1px 0 #000,
1px 1px 0 #000,
1px 4px 3px rgba(0,0,0,0.2), 0px -5px 35px rgba(255,255,255,0.3);
}

agravin
16.05.2015, 12:16
Не силен в верстке, поэтому не могу сказать почему браузер видя нужные классы (при включенном "Просмотр Кода элемента", для каждого тега, отображались соответствующие стили) не подключал для них свойства css. Точнее проблема была только с одним свойством text-align: justify.

Мы несколько дней ломали голову, над как нам казалось, простым проектом. И только "разлипание" тегов нам помогло.

Если интересно, то могу кинуть html-шаблон в личку. Посмотрите, как он работает со "слипшимися" и "разлипшимся" меню.

Николай Сипко
16.05.2015, 13:04
Не силен в верстке...

Я тоже. "Переплюнуть" профессионалов TYPO3 трудно. Но я пользуюсь примерами мастеров: там валидного кода и тайпоскриптов на всю жизнь хватит.

Так, примеры меню: http://typo3buddy.com/typoscript/adding-sub-templates/
The horizontal header menu: header_menu
The header image: header_image
The breadcrumb menu: breadcrumb
The content menu: content_menu (main menu)
The footer content: footer (menu)

Быть может, "The content menu: content_menu (main menu)" помог бы в работе "над как нам казалось, простым проектом".

Но "простых проектов", как правило, не бывает. Простота хуже воровства. Это я не нотации читаю, я себе зароки даю.

agravin
17.05.2015, 00:12
Нашел ошибку. Верный код такой:
lib.menu = HMENU
lib.menu.1 = TMENU
lib.menu.1 {
expAll = 1
noBlur = 1
wrap = |
NO.allStdWrap.noTrimWrap (
|
<li>|</li>
|
)
IFSUB = 1
IFSUB {
allWrap = <li class="with_menu">|<ul class="sub_menu">
allStdWrap.noTrimWrap (
|
|
|
)
}
ACTIFSUB = 1
ACTIFSUB {
allWrap = <li class="active with_menu">|<ul class="sub_menu">
wrapItemAndSub.noTrimWrap (
|
|
|
)
}

ACT = 1
ACT.allWrap = <li class="active"> | </li>
allStdWrap.noTrimWrap (
|
|
|
)
}

lib.menu.2 = TMENU
lib.menu.2 {
expAll = 1
noBlur = 1
stdWrap.noTrimWrap (
|
|</ul>
</li>
|
)
NO.allStdWrap.noTrimWrap (
|
<li>|</li>
|
)
}

Николай Сипко
17.05.2015, 12:40
Нашел ошибку. Верный код такой:

Вставил ваш "верный код" в свой сетап и посмотрел разницу с "неверным" в исходном коде браузера (Ctrl+U), до и после: оказалось одно и то же.

Напоследок из чистого любопытства прошу пояснить термины:
=======
"Я так подозреваю, что допустил ошибку в скрипте, но парсер Templavoila ее пропустил и доделывает меню, но как-то криво".
Что такое "парсер Templavoila"?
=======
"Проблема оказалась в том, что парсер выдает исходный код в одну строку, что каким-то образом влияет на верстку".
Как этот "парсер выдает исходный код"?
=======
О таких определениях в TYPO3 я в первый раз узнал.

agravin
17.05.2015, 14:04
Вставил ваш "верный код" в свой сетап и посмотрел разницу с "неверным" в исходном коде браузера (Ctrl+U), до и после: оказалось одно и то же.

Разница видна, если переходить на разделы второго уровня - не вставлялся</ul>.

Что касается "парсер Templovoila" , то возможно я не правильно выразился. Хотел обозначить обработчик, отдающий браузеру html-код, т.к. проблема была именно в том, в каком виде браузер получал html.

Николай Сипко
17.05.2015, 15:14
Что касается "парсер Templovoila" , то возможно я не правильно выразился. Хотел обозначить обработчик, отдающий браузеру html-код, т.к. проблема была именно в том, в каком виде браузер получал html.

В TYPO3 "обработчик, отдающий браузеру html-код", называют php.

Приятной работы!