使用typoscript将菜单链接标题更改为图像

时间:2012-05-16 12:06:56

标签: menu typo3 typoscript

我的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链接创建一个新菜单。

5 个答案:

答案 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.cObjectbefore.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
}