RTE - 基于条件的包装链接

时间:2014-02-18 08:36:30

标签: typo3

我的TYPO3网站使用TYPO3 6.1和附带的RTE。我想要存档的是当条件(链接有类)遇到它时用DIV包装链接。

编辑只应执行以下操作:

  1. 在RTE中创建新文本(例如“我的链接”)
  2. 为RTE中的新文本创建新链接
  3. 选择链接的类(例如“myClass”)
  4. 这导致以下HTML:

    <a href="#" class="myClass" title="sometitle">My Link</a>
    

    在网站前端,我希望用户创建的链接用DIV包装 - 但仅限于链接具有类“myClass”。

    我试过以下

    tt_content.text.20.parseFunc.tags.link.typolink.wrap = <div class="anotherClass">|</div>
    

    包装与DIV的所有链接。

    当编辑器选择“myClass”时,TS中是否有一种方法只包装链接?

    如果没有,是否有另一种(编辑友好的)存档方式?

    我已经查看过自定义的userElements和blockformats,但是对于编辑来说似乎都太复杂了,因为他们必须做多个操作来创建一个具有特殊样式的单个链接。

    我在前端生成的HTML应该如下所示

    <div class="anotherClass">
      <a href="#" class="internal-link" title="sometitle">My Link</a>
    </div>
    

    我最后的选择是使用JQuery - 但实际上这不是一个非常干净的解决方案,所以我更喜欢TYPO3 / TS解决方案。

2 个答案:

答案 0 :(得分:3)

使用Typoscript进行了几个小时的调试后,我终于想出了如何解决这个问题。我使用了类似的技术http://wiki.typo3.org/External_links

Generelly,我只是创建一个包含链接类名的新寄存器,然后使用类名将链接添加到链接。

lib.parseFunc.tags.link {
  typolink.parameter.append = LOAD_REGISTER
  typolink.parameter.append {
    linkClass {
      cObject = TEXT
      cObject {
        stdWrap.data = parameters:allParams
      }
      # Split link params by space-char. 3rd value is the link class name
      split {
        token.char = 32
        cObjNum = 1||2||3
        3 = TEXT
        3.current = 1        
      }
    }
  }
  newWrap.cObject = CASE
  newWrap.cObject {
    key.data = register:linkClass
    # Set outer wrap for links depending on class name
    default = TEXT
    default.value = |
    myClass = TEXT
    myClass.value = <div class="anotherClass">|</div>
    internal-link = TEXT
    internal-link.value = <div class="anotherClassForInternalLink">|</div>
  }
}

lib.parseFunc_RTE.tags.link {
  typolink.parameter.append < lib.parseFunc.tags.link.typolink.parameter.append
  wrap < lib.parseFunc.tags.link.newWrap
}

看起来有线,但效果很好: - )

答案 1 :(得分:0)

这是一项新的更新:

您可以删除以下行:typolink.parameter.append 而不是:

key.data = register:linkClass you can use key.data = parameters:class

当你有多个类时,你可以这样做:

lib.parseFunc.tags.a {
    newWrap.cObject = CASE
    newWrap.cObject {
        key.data = parameters:class
        default = TEXT
        default.value = |
        default.value.override.cObject = COA
        default.value.override.cObject {
            10 = TEXT
            10.value = <span>|</span><span class="arrow"><img src="fileadmin/_icn/icn_btn_arrow
            white.svg" alt="arrow"></span>
            10.if {
                value.data = parameters:class
                equals = link-as-btn btn--primary
            }
            20 = TEXT
            20.value = <b>|</b>
            20.if {
                value.data = parameters:class 
                equals = bold-btn
            }
        }
    }
}
lib.parseFunc_RTE.tags.a.innerWrap < lib.parseFunc.tags.a.newWrap
相关问题