2011-09-04 92 views
1

所以在我們網站上公佈的功能顯示使用下面的代碼(部分)「更多」默認鏈接:僅在沒有鏈接時才使用ColdFusion顯示鏈接?

<cfif announcement.recordCount gt 0> 
<cfloop query="announcement"> 
<cfoutput> 
<td colspan="2"><span class="left">#teaser_text# <a href="/announcements/?id=#id#" title="Read more...">Read more &raquo;</a> 

</cfoutput> 
</cfloop> 

(注意,有前一個CFQUERY聲明,我排除簡潔的代碼)

我在這裏要做的是在#teaser_text#後面顯示「Read More」鏈接,以便在#teaser_text#內沒有包含任何鏈接,這樣我就可以手動添加鏈接如果需要,請移除自動生成的鏈接。

對cfif語句有任何想法可以做到這一點?

謝謝。

編輯:澄清,如果在teaser_text中找到任何鏈接,我想刪除「閱讀更多」。

+0

如果在teaser_text中找到_any_鏈接,或者只有在存在與/ announcements /?id =#id#'的鏈接時才刪除鏈接,是否要刪除更多鏈接? –

+0

順便說一句,如果您原始代碼中的cfif/cfloop之間沒有任何內容(並且「」和「」之後沒有任何內容,則根本不需要cfif - 對於零行查詢,cfloop只會跳過。您也可以將cfloop和cfoutput合併爲' –

+0

更新以澄清 - 如果在teaser_text中找到任何網址,我想移除「閱讀更多」 – Timothy

回答

0

這應該工作:

<cfif findnocase('http://', teaser_text) eq 0> 
     <a href="/announcements/?id=#id#" title="Read more...">Read more &raquo;</a>  
     </cfif> 

如果要放置鏈接手動只是改變findnocase()函數的第一個參數[即HTP/HTTPS]或使用正則表達式來弄清楚,如果它是一個網址[通過:refindnocse()]

-Sean

+0

除了示例鏈接不包含'http://',其中_external_鏈接可能會(並且很可能是外部鏈接應該排除閱讀更多的內容),所以這會以兩種方式失敗。 :/ –

+0

蒂莫西可以將他想要的任何東西作爲第一個參數,因爲他手動輸入鏈接,他應該能夠維護它。 - 不知道你的意思是排除「閱讀更多」 - 但是,我同意可能搜索「href =」將是維護內部手動鏈接的更好選擇。 –

0

像這樣的東西應該做你想做的

<cfif announcement.recordCount gt 0> 
<cfloop query="announcement"> 
<cfif findnocase("href",anouncement.teaser_text) > 
<a href="/announcements/?id=#announcement.id#"> #anouncement.teaser_text# </a> 
<cfelse> 
<a href="/announcements/?id=#announcement.id#" > #anouncement.teaser_text# Read more </a> 
</cfif> 
</cfloop> 
</cfif> 
+0

爲什麼你將超級鏈接中的所有傳情文本都包裹在一起,並在cfif/cfelse的兩側放置了相同的文本? :/ –

5

要只顯示,如果沒有超鏈接teaser_text內發現更多的鏈接,這個檢查很可能是不夠好:

<cfif NOT refindNoCase('<a\s[^>]*?\bhref\s*=',teaser_text) > 
    <a href="/announcements/?id=#id#" title="Read more...">Read more &raquo;</a> 
</cfif> 

如果您要檢查的網址,而不是超鏈接,你需要得到更多的幻想。

您還需要記住,這是治療teaser_text爲文本(而不是HTML),所以註釋掉的鏈接不會阻止它被發現(如果該事項,您需要調查HTML DOM解析器;和沒有任何CF,所以你需要看看Java的)。