【问题标题】:RTE - wrap link based on conditionRTE - 根据条件包装链接
【发布时间】:2014-02-18 08:36:30
【问题描述】:

我的 TYPO3 网站使用带有 RTE 的 TYPO3 6.1。我要归档的是在满足条件(链接具有类)时用 DIV 包装链接。

编辑应该只做以下事情:

  1. 在 RTE 中创建新文本(例如“我的链接”)
  2. 为 RTE 中的新文本创建新链接
  3. 为链接选择一个类(例如“myClass”)

这会产生以下 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>

all 链接与 DIV 一起包装。

当编辑器为其选择“myClass”时,TS 中有没有办法只包装链接?

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

我已经查看了自定义 userElements 和块格式,但对于编辑器来说,两者似乎都太复杂了,因为他们必须执行多个操作才能创建具有特殊样式的单个链接。

我在前端生成的 HTML 应该是这样的

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

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

【问题讨论】:

  • 为什么需要那个额外的标签?也许您也可以将 css 与 :before:after 一起使用?
  • 需要额外的标签来为链接添加一些额外的 CSS 样式。 :before 和 :after 在这种情况下对我来说不是一个合适的解决方案。

标签: typo3


【解决方案1】:

经过几个小时的 Typoscript 调试后,我终于找到了解决这个问题的方法。我使用了类似的技术,如下所示http://wiki.typo3.org/External_links

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

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
}

看起来有线,但工作完美:-)

【讨论】:

    【解决方案2】:

    这是一个全新的更新:

    您可以删除以下行: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
    

    【讨论】:

      猜你喜欢
      • 2015-07-26
      • 2018-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-11
      相关资源
      最近更新 更多