I have a problem with marking a link in a Stiemap with dateUntil. Here is my typoscript:
tt_content.menu.20.1 >
tt_content.menu.20.1 < tt_content.menu.20.7
tt_content.menu.20.1.1.wrap = <div class="menu_list_sitemap">|</div>
tt_content.menu.20.1.1.NO {
ATagBeforeWrap = 0
doNotLinkIt = 1
stdWrap.htmlSpecialChars = 0
stdWrap.cObject = COA
stdWrap.cObject {
# Untertitel verlinken
10 = TEXT
10 {
field = subtitle
wrap = |
stdWrap.cObject = COA
stdWrap.cObject {
20 = IMAGE
20.file.import.field = media
20.file.import = uploads/media/
20.file.import.listNum = 0
20.wrap = |
30 = TEXT
30.field = title
30.wrap = <div class="txt">|</div>
40 = TEXT
40.if.isPositive.dataWrap = {field:newUntil}-{date:U}
40.wrap = <div class="txt2">|</div>
40.value = NEW
}
typolink.parameter.field = uid
}
}
}
The result is, that the new entries will get an additional div-container with class="txt2". Wokrs fine so far. :-) Here the generated HTML:
<li>
<a href="link-to-my-page">
<img width="22" height="22" alt="" src="my-image.png">
<div class="txt">My-Text</div>
<div class="txt2">NEW</div>
</a>
</li>
But now I need to add a "class='new'" to the Link or optional to a surrounding div-container (not my idea, really). I tried now for some hours to find a solution, but nothing worked.
Any suggestions?
i guess ATagParams would do the job. Use if to add only if needed
tt_content.menu.20.1 >
tt_content.menu.20.1 < tt_content.menu.20.7
tt_content.menu.20.1.1.wrap = <div class="menu_list_sitemap">|</div>
tt_content.menu.20.1.1.NO {
ATagBeforeWrap = 0
doNotLinkIt = 1
stdWrap.htmlSpecialChars = 0
stdWrap.cObject = COA
stdWrap.cObject {
# Untertitel verlinken
10 = TEXT
10 {
field = subtitle
wrap = |
### snip ###
typolink.parameter.field = uid
typolink.ATagParams = class="new"
typolink.ATagParams.if.isPositive.dataWrap = {field:newUntil}-{date:U}
}
}
}
Related
I use the following Typoscript for a special menu. Of course there is no linkWrap right now if ATagTitle.dataWrap is empty. What is the best way to have as content of the ATagTitle.dataWrap if {field:title} is empty so that the linkWrap is used?
[treeLevel = 3,4,5]
lib.navHorizon = COA
lib.navHorizon {
stdWrap.wrap = <nav class="row nav_horizontal">|</nav>
10 = HMENU
10 {
special = browse
special {
items = prev
}
1 = TMENU
1.noBlur = 1
1.NO {
ATagTitle.dataWrap = {field:title}
linkWrap = <div class="d-none d-md-block col-4 nav_prev"><i class="fa fa-angle-double-left"></i> |</div>
}
}
25 = HMENU
25 {
special = browse
special {
items = up
}
1 = TMENU
1.noBlur = 1
1.NO {
ATagTitle.dataWrap = {field:title}
linkWrap = <div class="d-none d-md-block col-4 nav_up">|</div>
}
}
20 = HMENU
20 {
special = browse
special {
items = next
}
1 = TMENU
1.noBlur = 1
1.NO {
ATagTitle.dataWrap = {field:title}
linkWrap = <div class="d-none d-md-block col-4 order-3 nav_next">| <i class="fa fa-angle-double-right"></i></div>
}
}
}
[global]
Extended explanation:
I have a row with three columns. If the first column containing the link to the previous page is empty, the HTML for the column is also missing, so the layout is no longer correct.
From your additional information I understand the problem is not that the title is empty, but that there's no page at all. So if there's not previous page, it will not "execute" lib.navHorizon.10.1 at all.
You can fix this by not setting the wrap on the link, but on the HMENU:
10 = HMENU
10 {
special = browse
special {
items = prev
}
wrap = <div class="d-none d-md-block col-4 nav_prev"><i class="fa fa-angle-double-left"></i> |</div>
1 = TMENU
1.noBlur = 1
1.NO {
ATagTitle.dataWrap = {field:title}
}
}
This will ensure the wrap is always rendered, even if there's no page.
as (nearly) each object in typoscript has stdWrap functionality you can 'wrap' the dataWrap:
ATagTitle.dataWrap = {field:title}
ATagTitle.dataWrap.ifEmpty =
I want to change the layout of the filelinks a little bit. I'm still a TS beginner, so please bear with me.
Here is what I need to have as output:
<ul class="list__download">
<li>
<a href="/#" class="list__link">Preisblatt A
<span class="list__info">2.3 MB / PDF</span>
</a>
</li>
<li>
<a href="/#" class="list__link">Preisblatt B
<span class="list__info">2.3 MB / PDF</span>
</a>
</li>
<li>
<a href="/#" class="list__link">Preisblatt C
<span class="list__info">689 GB / SFV</span>
</a>
</li>
</ul>
My initial approach in the TypoScript was like this:
tt_content.uploads.10.10.1.dataWrap = <h2>|</h2>
tt_content.uploads.20.stdWrap.dataWrap = <ul class="list__download">|</ul>
tt_content.uploads.20.renderObj.wrap.cObject.10.oddEvenClass >
tt_content.uploads.20.renderObj.wrap.cObject.10.elementClass >
tt_content.uploads.20.renderObj.wrap.cObject.20.value = <li>|</li>
tt_content.uploads.20.renderObj.20 = COA
tt_content.uploads.20.renderObj.20 {
10 = TEXT
10 {
data = file:current:title
wrap = |
}
15 < linebreak
20 = TEXT
20 {
data = file:current:description
wrap = <span class="list__info">|</span>
}
wrap = |
}
tt_content.uploads.20.renderObj.30 >
With this TS it looks exactly the way I want it to be, but of course the actual link to the file is gone (only replaced it with this dummy a-Tag wrap).
I also tried to write this code block to:
tt_content.uploads.20.renderObj.20.data
instead of the default
file:current:title // file:current:name
but then the elements are completely missing.
Can you help a TS-newbie out? How can I achieve to get my desired layout, and link a- and span-Tag to my uploaded file?
Thank you very much in advance
check out this one :
tt_content.uploads.20 {
renderObj {
10 >
15 >
20 >
20 = TEXT
20 {
data = file:current:size // file:current:name
bytes = 1
bytes.labels = ” B| KB| MB| GB”
htmlSpecialChars = 1
outerWrap = <li>|</li>
innerWrap = {file:current:name}<span class="fileDesc"> |   / {file:current:extension}</span>
required = 1
replacement {
# equivalent to former useSpacesInLinkText = 0; remove using > to disable it
10 {
search = _
replace.char = 32
}
# equivalent to former stripFileExtensionFromLinkText = 0; move "_20" to "20" to enable it. Disabled by default.
_20 {
search = /(.*)(\..*)/
replace = \1
useRegExp = 1
}
}
typolink {
parameter.data = file:current:originalUid // file:current:uid
parameter.wrap = file:|
fileTarget < lib.parseTarget
fileTarget =
fileTarget.override = {$styles.content.uploads.target}
fileTarget.override.override.field = target
removePrependedNumbers = 1
ATagParams = class = "list__link"
title {
data = file:current:title
htmlSpecialChars = 1
}
}
#wrap = <span>|</span>
}
20.innerWrap.insertData = 1
20.innerWrap2.insertData = 1
20.wrap.insertData = 1
30 >
wrap.cObject {
10 = LOAD_REGISTER
10 {
oddEvenClass = odd li-first |*| even || odd
elementClass = {file:current:extension}
elementClass.insertData = 1
}
20 = TEXT
20 {
value = <tr class="{register:oddEvenClass} {register:elementClass}">|</tr>
insertData = 1
}
30 = RESTORE_REGISTER
}
}
}
I have HMENU and TMENU inside. For TMENU.NO.after property I need to dinamically assign cObject based on current page uid?
Code:
#Privatni podmeni
lib.meni= HMENU
lib.meni.special = list
lib.meni.special.value = 5395, 5396, 5397, 5398
lib.meni.wrap = <ul id="menu" style="display:none;">|</ul>
lib.meni.1 = TMENU
lib.meni.1{
expAll = 1
NO {
allWrap = <li>|</li>
ATagParams.insertData = 1
ATagParams = class="drop _{field:uid}"
after.cObject < temp.meni5
}
}
I need this in pseudo-code:
IF field:uid = 5240
after.cObject < temp.meni5
IF field:uid = 5241
after.cObject < temp.meni6
IF field:uid = 5342
after.cObject < temp.meni7
How can I do this?
You can use COA cObject and set it partially:
lib.meni.1.NO.after.cObject = COA
lib.meni.1.NO.after.cObject {
10 < temp.meni5
10.if.equals.field = uid
10.if.value = 5240
20 < temp.meni6
20.if.equals.field = uid
20.if.value = 5241
30 < temp.meni7
30.if.equals.field = uid
30.if.value = 5342
}
But this will work in case your objects in temp.meni5, temp.meni6, temp.meni7 support stdWrap. Check TSref for details.
I was able to get this done by using CASE object in TS. Here is example code:
temp.meni0= HMENU
temp.meni0.special = list
temp.meni0.special.value = 5417, 5418, 5419, 5420, 5421
temp.meni0.wrap = <div class="dropdown_5columns"><div class="col_1"><ul>|</ul></div></div>
temp.meni0.1 = TMENU
temp.meni0.1{
expAll = 1
NO {
allWrap = <li>|</li>
#ATagParams.insertData = 1
#ATagParams = class="drop"
}
}
temp.meni6= HMENU
temp.meni6 < temp.meni0
temp.meni6.special.value = 5431, 5432, 5433, 5434, 5435
temp.meni6.wrap = <div class="dropdown_5columns m-144"><div class="col_1"><ul>|</ul></div></div>
temp.meni7= HMENU
temp.meni7 < temp.meni0
temp.meni7.special.value = 5456, 5457, 5458, 5459, 5460
temp.meni7.wrap = <div class="dropdown_5columns m-288"><div class="col_1"><ul>|</ul></div></div>
temp.meni8= HMENU
temp.meni8 < temp.meni0
temp.meni8.special.value = 5466, 5467, 5470, 5471, 5472
temp.meni8.wrap = <div class="dropdown_5columns m-432"><div class="col_1"><ul>|</ul></div></div>
lib.meni= HMENU
lib.meni.special = list
lib.meni.special.value = 5395, 5396, 5397, 5398
lib.meni.wrap = <ul id="menu" style="display:none;">|</ul>
lib.meni.1 = TMENU
lib.meni.1{
expAll = 1
NO {
allWrap = <li>|</li>
ATagParams.insertData = 1
ATagParams = class="drop _{field:uid}"
#after.cObject < temp.meni5
after.cObject = CASE
after.cObject {
key.field = uid
default = TEXT
default.value = <span>NIJE OK!</span>
5395 < temp.meni0
5396 < temp.meni6
5397 < temp.meni7
5398 < temp.meni8
}
}
}
With this, I am able to insert very specific submenus for each menu item (page) of lib.menu
I need to make a menu without any links but with the url in an attribute.
The url should be in data-href="|" but now only the title will be printed in the attribute.
Is there a way to only return the url and not the link. ie. http://example.com instead of Example
Or does anyone know a different solution?
lib.mainMenu = HMENU
lib.mainMenu {
entryLevel = 1
wrap = <ul id="dropDownMenu">|</ul>
1 = TMENU
1 {
noBlur = 1
expAll = 1
NO = 1
NO {
wrapItemAndSub = <li class="nochildren">|</li>
stdWrap2.wrap = <span>|</span>
}
ACT < .NO
ACT.wrapItemAndSub = <li class="active nochildren">|</li>
# if has children
IFSUB < .NO
IFSUB.wrapItemAndSub = <li class="haschildren">|</li>
IFSUB.allWrap = |
# if has children and is active
ACTIFSUB < .IFSUB
ACTIFSUB.wrapItemAndSub = <li class="active haschildren">|</li>
ACTIFSUB.allWrap = |
}
2 < .1
2 {
wrap = <ul id="subMenu">|</ul>
NO.ATagParams = rel="nofollow"
NO.stdWrap2.insertData = 1
NO.stdWrap2.wrap = <span data-href="|" class="link">{field:title}</span>
NO.doNotLinkIt = 1
IFSUB < .NO
ACTIFSUB < .IFSUB
}
3 < .2
}
Try this (untested code):
lib.mainMenu = HMENU
lib.mainMenu {
entryLevel = 1
wrap = <ul id="dropDownMenu">|</ul>
1 = TMENU
1 {
noBlur = 1
expAll = 1
NO = 1
NO {
wrapItemAndSub = <li class="nochildren">|</li>
stdWrap2.wrap = <span>|</span>
}
ACT < .NO
ACT.wrapItemAndSub = <li class="active nochildren">|</li>
# if has children
IFSUB < .NO
IFSUB.wrapItemAndSub = <li class="haschildren">|</li>
IFSUB.allWrap = |
# if has children and is active
ACTIFSUB < .IFSUB
ACTIFSUB.wrapItemAndSub = <li class="active haschildren">|</li>
ACTIFSUB.allWrap = |
}
2 < .1
2 {
wrap = <ul id="subMenu">|</ul>
NO {
doNotShowLink = 1
stdWrap2 {
wrap >
cObject = TEXT
cObject {
typolink {
parameter.field = uid
returnLast = url
}
insertData = 1
wrap = <span data-href="|" class="link">{field:nav_title//field:title}</span>
}
}
}
IFSUB < .NO
ACTIFSUB < .IFSUB
}
3 < .2
}
The above answer only works as long as you don't have any mountpoints. As soon as you have mountpoints in your page tree, these links will not be generated correctly.
To force a HMENU to output plain URLs without a surrounding a-Tag and page title even when using mountpoints, you need to define the IProcFunc property of HMENU.
I've written a small method which can be called through IProcFunc which will remove the a-Tags and replace the page title with the URL of the link.
<?php
class UserFuncUtils {
/**
* Modifies sitemap links. Whith this modification, a menu will only generate a plain url instead of an <a>-Tag
*
* This is an IProcFunc for a HMENU. The only parameter supplied by this method call is $this->I from the
* Menu ContentObject. The function call expects a modified $I array to be returned.
*/
function IProcFunc_plainURL($I) {
// Show what $I has to offer
// print \TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($I, NULL, 8, FALSE, FALSE, FALSE, array(), array());
// Remove opening and closing tags and replace title with href attribute. This results in a plain URL being rendered by the menu
$I['parts']['ATag_begin'] = '';
$I['parts']['ATag_end'] = '';
$I['parts']['title'] = $I['linkHREF']['HREF'];
return $I;
}
}
?>
Just save this small class somewhere (e.g. /fileadmin/libs/class.userFuncUtils.php) and include it with
includeLibs.userFuncUtils = fileadmin/libs/class.userFuncUtils.php
and then set the IProcFunc property of HMENU to point to this user function
lib.mainMenu = HMENU
lib.mainMenu.IProcFunc = UserFuncUtils->IProcFunc_plainURL
This should do the trick.
Using kickstart i created one extension for listing category and product.And i need to display the both category title/name & product title/name in my breadcrumb .At present i coded for calling from the database(" 40 = RECORDS") it is only showing the
RESULT :- HOME > Page Name »
My Url:-http://www.domain.com/page_name/
lib.breadcrumb=COA
lib.breadcrumb {
40 = RECORDS
40 {
dontCheckPid = 1
tables = TABLE_NAME
source.data = GPvar:tx_pi1_NAME|EXTKEY
conf.EXTKEY = TEXT
conf.EXTKEY.field = FIELD_NAME
wrap = » |
}
10 = HMENU
10 {
special = rootline
# "not in menu pages" should show up in the breadcrumbs menu
includeNotInMenu = 1
1 = TMENU
# no unneccessary scripting.
1.noBlur = 1
# Current item should be unlinked
1.CUR = 1
1.target = _self
1.wrap = <div class="breadcrumb-class"> | </div>
1.NO {
stdWrap.field = title
ATagTitle.field = nav_title // title
linkWrap = ||*| > |*|
}
# Current menu item is unlinked
1.CUR {
stdWrap.field = title
linkWrap = ||*|  >   |*|
doNotLinkIt = 1
}
}
}
Here is an example from the news extension. You can use the same approach for your extension.
http://forge.typo3.org/projects/extension-news/wiki/Add_news_to_breadcrumb_menu
We can add field title to breadcrumb from the database of any extention that which we create in typo3.
lib.breadcrumb = COA
lib.breadcrumb {
stdWrap.wrap = <ul class="breadcrumb">|</ul>
entryLevel = 1
10 = HMENU
10 {
special = rootline
1 = TMENU
1 {
noBlur = 1
NO = 1
NO {
wrapItemAndSub = <li>|</li>
ATagTitle.field = subtitle // title
linkWrap = ||*| ›  |*|
stdWrap.htmlSpecialChars = 1
}
CUR <.NO
CUR {
wrapItemAndSub = <li class="active">|</li>
}
}
}
101=RECORD
101 {
tables = tx_table_name
source.data = GPvar:tx_plugin_name|param //param passing in the url
conf.tx_besiproduct_product = TEXT
conf.tx_besiproduct_product.field = field_name
conf.tx_besiproduct_product.required = 1
conf.tx_besiproduct_product.wrap = <li >|</li>
}
}