PDA

Просмотр полной версии : Как скрыть пустой блок контента


razawa
16.04.2007, 16:33
Мучаюсь уже долго.
Никак не найду как реализовать такое. Уверен, что очень просто, но никак не додумаюсь.
Шаблон строится на таблицах.
Так вот: мне нужно, если левого (Left) контента на странице нет, то и левого блока - не видно. Тоесть грубо говоря, весь основной контент - растягивается на ширину страницы.
Если написано просто
temp.Left < styles.content.getLeft
temp.Left {
wrap = <table><tr><td> | </td></tr></table>
}
То если контент пустой - всеравно выводится эта табличка. А она у меня с фоном и т.п. Тоесть пустой блок получается.
Нашел тему про Контент по-умолчанию: ссылка (http://forum.typo3.biz/showthread.php?t=1432&highlight=%F3%EC%EE%EB%F7%E0%ED%E8%FE)
Но с помощью этого - ничего не добился. Не могу разобраться с этими if
В общем - как привязать wrap к наличию контента?

AleXUnder
16.04.2007, 17:14
посмотрите TSRef, на сколько я помню в вашем случае можно использовать conditions, но могу ошибаться

razawa
16.04.2007, 17:41
использовать conditions
Я там не нашел нужное мне условие :-( Может в globalVars что-то. Но не знаю где смотреть.
Ну должно быть простое решение этой проблемы.
Вот (http://forum.typo3.biz/showthread.php?t=1678) еще похожая проблема

Tod
16.04.2007, 19:24
У меня когда-то работала конструкция по типу:
...
subparts.right < styles.content.getRight
subparts.right.stdWrap.wrap = <td id="col_name3"> | </td>
subparts.right.stdWrap.ifEmpty.cObject >
...
Попробуй поэксперементировать с этим кодом.

razawa
17.04.2007, 11:36
subparts.Left < styles.content.getLeft
subparts.Left.stdWrap.wrap = !!!! | !!!!
subparts.Left.stdWrap.ifEmpty.cObject >

Всеравно мои "!!!!" отображаются при пустом контенте
Уже городил конструкции типа
temp.Left.stdWrap.ifEmpty.cObject.stdWrap.wrap = |
Не помогает.
Может мне как-то привязаться к "numRows" ( а она явно говорит 0 - если нет контента), где-то видел такую конструкцию "if.isFalse.numRows", но как ее применить тут ?

AleXUnder
17.04.2007, 11:57
это можно сделать совокупностью TS и html, не помню точно, но поищу на досуге и выложу сюда решение.
В кратце, с помощью TS мы определяем есть контент или нет, ставим соответственно слас тэга, затем в css указываем - скрыть.

razawa
17.04.2007, 12:11
с помощью TS мы определяем есть контент или нет, ставим соответственно слас тэга, затем в css указываем - скрыть.
По-идее если мы определили есть контент или нет - можно же многое сделать. Но почему-то те варианты, что я все мучаю не работают :-(
А на счет CSS - скрыть. Да - хотелось бы увидеть примерчик. И сам полезу поразбираюсь как вставлять свойства тега. Может накопаю чего.

AleXUnder
17.04.2007, 12:14
советую посмотреть www.htmlbook.ru - хороший справочник
по любому, если накопаю что обязательно выложу

Tod
17.04.2007, 12:17
razawa, так делай метку в шаблоне за тем, что нужно скрыть, то есть к примеру есть 3 колонки - <td></td><td></td><td></td>. вокруг последней ставишь маркеры и когда элемента не будет - маркеры обрабатываться не будет, а если есть что-то работает wrap.

gunner
17.04.2007, 12:47
попробуй, что-то вроде:

temp.Left = TEXT
temp.Left {
cObject < styles.content.getLeft
required = 1
wrap = <table><tr><td> | </td></tr></table>
}

не проверял, но решение где-то рядом... удачи =)

Дмитрий Самойлов
17.04.2007, 13:42
вот так:

temp.leftContent < styles.content.getLeft
temp.leftContent.stdWrap {
wrap = <td>|</td>
if.isTrue.numRows < styles.content.getLeft
}

razawa
17.04.2007, 15:14
Дмитрий Самойлов
temp.leftContent < styles.content.getLeft
temp.leftContent.stdWrap {
wrap = <td>|</td>
if.isTrue.numRows < styles.content.getLeft
}
Заработало! То, что нужно. Я же говорил, что все просто :)
Ну никак не врублюсь в этот TypoScript
Спасибо!

Tod,gunner,AleXUnder
Тоже спасибо. Не успел попробовать :-)

Pavel Antonov
17.04.2007, 18:22
Дмитрий Самойлов
temp.leftContent < styles.content.getLeft
temp.leftContent.stdWrap {
wrap = <td>|</td>
if.isTrue.numRows < styles.content.getLeft
}Заработало! То, что нужно. Я же говорил, что все просто :)
Ну никак не врублюсь в этот TypoScript
Спасибо!

Tod,gunner,AleXUnder
Тоже спасибо. Не успел попробовать :-)

Из всех вариантов выбрали самый плохой, так как код выполняет 2 запроса к базе!

Возьмите код, который предложил gunner. Самый практичный.

razawa
18.04.2007, 10:44
Из всех вариантов выбрали самый плохой, так как код выполняет 2 запроса к базе!
Возьмите код, который предложил gunner. Самый практичный.
Попробую и так. Спасибо.

Дылгеров Ц.В.
19.04.2007, 05:16
Интересно почему не работает для среднего столбца:
temp.Left = TEXT
temp.Left {
cObject < styles.content.get
required = 1
wrap = <table><tr><td> | </td></tr></table>
}

gunner
19.04.2007, 10:46
Интересно почему не работает для среднего столбца:
temp.Left = TEXT
temp.Left {
cObject < styles.content.get
required = 1
wrap = <table><tr><td> | </td></tr></table>
}

все прекрасно работает, только что проверял...

temp.Left = TEXT
temp.Left {
#cObject < styles.content.getLeft
cObject < styles.content.get
required = 1
wrap = <table><tr><td> | </td></tr></table>
}

razawa
19.04.2007, 11:16
Может
temp.Left нужно заменить на то, что в среднем столбце в Вашем случае?

are
07.10.2007, 17:12
аналогичная проблема

есть менюшка второго уровня в виде обычного списка UL
хочется, что если нет пунктов меню, то не выводить <ul></ul>


temp.contextMenu = HMENU
temp.contextMenu {
#не помогает, все равно выводится <div class="context_menu"><ul></ul></div>
required = 1
wrap = <div class="context_menu"><ul>|</ul></div>
}


temp.contextMenu.entryLevel = 1
temp.contextMenu.1 = TMENU

temp.contextMenu.1 {

NO.allWrap = <li> | </li>

NO.stdWrap.htmlSpecialChars = 1

ACT = 1
ACT.stdWrap.htmlSpecialChars = 1
ACT.allWrap = <li class="selected"> | </li>

}


temp.contextMenu.2 = TMENU
temp.contextMenu.2 {

NO.allWrap = <li> | </li>
NO.stdWrap.htmlSpecialChars = 1

ACT {
stdWrap.htmlSpecialChars = 1
allWrap = <li class="selected"> | </li>
}

}
посоветуйте , что добавить в код выше ?

razawa
10.10.2007, 11:35
Как делаю я меню:

temp.MenuTop {
wrap = <div id="menu"> | </div>
entryLevel = 0
1 = TMENU
1 {
expAll=1
noBlur = 1
wrap = <ul id="menuList" class="adxm"> | </ul>
NO {
wrapItemAndSub = <li> | </li>
}
IFSUB = 1
IFSUB {
allWrap.dataWrap = <li><a>{field:title}</a>
doNotShowLink = 1
}
ACTIFSUB < .IFSUB
}
Может быть комбинации wrap и wrapItemAndSub помогут обойти это?
Кстати, проверить на пустые <ul> не могу, но уверен, что <div id="menu"></div> всетаки выводится, я так понимаю цель - именно от этого избавиться. Сам бы не против узнать.

-=UncleByte=-
10.10.2007, 12:34
аналогичная проблема

есть менюшка второго уровня в виде обычного списка UL
хочется, что если нет пунктов меню, то не выводить <ul></ul>


посоветуйте , что добавить в код выше ?

Если для навешивания шаблона используется TV, то можно делать следующим образом:
1. Сделать map ко всему элементу, содержащему меню (например, в моем случае <div id="sidemenu">) с параметром OUTER
2. Прописать для этого меню вот такой TS:
lib.sidemenu = HMENU
lib.sidemenu.entryLevel = 1
lib.sidemenu.1 = TMENU
lib.sidemenu.1 {
NO.linkWrap = <li>|</li>|*||*|<li class="last">|</li>
ACT = 1
ACT.linkWrap = <li class="smact">|</li>|*||*|<li class="smact last">|</li>
}
lib.sidemenu.1.wrap =<div id="sidemenu"><ul>|</ul></div>
Соответственно выводится элемент будет только при наличии в нем какого-либо контента.

razawa
10.10.2007, 14:46
temp.MenuTop {
wrap = <div id="menu"> | </div> - убрал
entryLevel = 0
1 = TMENU
1 {
wrap = <div id="menu"><ul id="menuList" class="adxm"> | </ul></div> - добавил
expAll=1
noBlur = 1
NO {
wrapItemAndSub = <li> | </li>
}
}
Вот так вроде бы не выводит, если нет меню.
тоесть я wrap применяю только к объекту TMENU. Попробуйте.

are
11.10.2007, 11:07
Спасибо большое всем!
сработало : )