2011-09-04 73 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的)。