簡體   English   中英

RTE - 根據條件包裝鏈接

[英]RTE - wrap link based on condition

我的 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>

它用 DIV 包裝了所有鏈接。

當編輯器為它選擇“myClass”時,TS 中有沒有辦法只包裝鏈接?

如果沒有,是否有另一種(編輯友好的)方式來存檔?

我已經看過自定義 userElements 和 blockformats,但對於編輯器來說,這兩者似乎都太復雜了,因為他們必須執行多個操作才能創建具有特殊樣式的單個鏈接。

我在前端生成的 HTML 應該是這樣的

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

我最后的選擇是使用 JQuery - 但實際上這不是一個非常干凈的解決方案,所以我更喜歡 TYPO3/TS 解決方案。

經過幾個小時的 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
}

看起來有線,但工作完美:-)

這是一項新的更新:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM