我的typo3网站有一个菜单,其中包含以下字面定义:
lib.footernav = HMENU
lib.footernav.special = directory
lib.footernav.special.value = 38
lib.footernav.entryLevel = 0
lib.footernav.1 = TMENU
lib.footernav.1.NO {
ATagParams = class = "footer-link"
}
菜单工作得很好。我想要做的是,将链接文本更改为图像,如下所示:
<a class="footer-link" href="index.php?id=43&L=1">Facebook</a>
到
<a class="footer-link" href="index.php?id=43&L=1"><img src="facebook.gif"/></a>
我该怎么做?
如果有帮助我还可以为这个facebook链接创建一个新菜单。
答案 0 :(得分:6)
我建议使用菜单目标页面的“媒体”字段来定义菜单中的哪些页面应使用图像显示。可以在页面属性的“资源”选项卡中找到“媒体”字段。它是您问题的完美解决方案,因为它允许您为任何菜单项自由选择任何图像:
对于要作为图像显示的菜单项,请使用相应菜单页的“媒体”字段,然后选择要使用的图像。对于要显示为文本的所有菜单项,只需将“媒体”字段留空即可。
以下是创建该行为的TS代码:
1 = TMENU
1.NO {
ATagParams = class="footer-link"
# Replace menu item text with image if defined in page tab "Resources"-->"Media"
stdWrap.override.cObject = COA
stdWrap.override.cObject{
10 = IMAGE
10.file.import = uploads/media/
10.file.import.field = media
10.altText.field = title
}
}
TYPO3更新6.2与FAL:
TYPO3 6.2包括FAL--一种新的媒体资源管理系统。由于页面属性的资源选项卡现在也基于FAL,因此您需要使用不同的TypoScript方法来访问这些图像。这是一个最新的解决方案:
1 = TMENU
1 {
wrap = <ul>|</ul>
NO = 1
NO {
wrapItemAndSub = <li>|</li>
stdWrap.override.cObject = FILES
stdWrap.override.cObject {
references {
table = pages
fieldName = media
}
renderObj = IMAGE
renderObj {
file.import.data = file:current:uid
file.treatIdAsReference = 1
titleText.data = file:current:title // field:nav_title // field:title
altText.data = file:current:alternative // field:nav_title // field:title
}
# start with first image
begin = 0
# show only one image
maxItems = 1
}
}
}
参数begin
定义应使用多个图像中的哪一个(例如,如果您需要一个图像作为页面的标题背景,另一个图像作为菜单中的图标)。
如果增加maxItems
参数,将返回多个图像(如果在资源选项卡中定义了多个图像)。
如果您想将图片追加/添加到菜单文字而不是替换它,则必须在上面的代码中将stdWrap.override.cObject
更改为after.cObject
或before.cObject
。
答案 1 :(得分:2)
另一个解决方案是为每个链接定义一个自定义类,然后仅为相应的链接更改背景图像。这样你就可以通过css完全控制菜单的外观:
lib.footernav.1.NO {
ATagParams = class="footer-link {field:title}"
ATagParams.insertData = 1
}
以下html中的结果:
<a class="footer-link Facebook" href="index.php?id=43&L=1">Facebook</a>
的CSS:
.Facebook {
background: transparent url(facebook.gif) no-repeat;
text-indent:9999px;
}
编辑:我推荐上面的解决方案,因为它是一个快速且相当干净的设置来处理单个菜单项。但是,如果你喜欢typoscript教科书中的一个干净的例子:
lib.footernav = COA
lib.footernav.10 = HMENU
lib.footernav.10 {
special = directory
special.value = 38
excludeUidList = 99
1 = TMENU
1.NO {
ATagParams = class = "footer-link"
}
}
lib.footernav.20 = TEXT
lib.footernav.20 {
field = title
typolink.parameter = 99
typolink.ATagParams = class = "footer-link"
}
假设您的 facebook菜单项是第99页
答案 2 :(得分:1)
像lib.footernav.1.NO.stdWrap.wrap = <img src="|.gif" />
一样?
如果编辑器输入HTML特殊字符,请务必添加wrap.htmlSpecialChars = 1
以避免破坏HTML代码。
答案 3 :(得分:0)
lib.footerSocialMedia = HMENU
lib.footerSocialMedia {
special = directory
special.value = 167
1 = TMENU
1 {
wrap = <ul class="social-list right">|</ul>
expAll = 1
noBlur = 1
NO {
wrapItemAndSub = <li class="skew-25">|</li>
doNotLinkIt = 0
stdWrap.htmlSpecialChars = 1
stdWrap.field =
ATagParams =data-title="{field:title}" data-tooltip="true"
ATagParams.insertData=1
stdWrap.wrap = <span class="{field:tx_menuicon_menuicon}"></span>|
stdWrap.wrap.insertData=1
}
ACT = 1
ACT {
wrapItemAndSub = <li class="skew-25">|</li>
doNotLinkIt = 0
stdWrap.field =
stdWrap.htmlSpecialChars = 1
ATagParams =data-title="{field:title}" data-tooltip="true"
ATagParams.insertData=1
stdWrap.wrap = <span class="{field:tx_menuicon_menuicon}"></span>|
stdWrap.wrap.insertData=1
}
}
}
答案 4 :(得分:0)
首先,您需要在Page-&gt;编辑下的页面媒体中添加图像,然后在媒体中添加图像。此外,使用以下typoscript:
stdWrap.override.cObject = COA
stdWrap.override.cObject{
10 = IMAGE
10.file.import = uploads/media/
10.file.import.field = media
10.altText.field = title
}