Показывать ссылку только в том случае, если в ColdFusion нет ссылки? - PullRequest
1 голос
/ 05 сентября 2011

Таким образом, функция объявления на нашем сайте отображает ссылку «читать дальше» по умолчанию, используя следующий код (частично):

<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 #, только если в # teaser_text # нет ссылки, так чтоЯ могу вручную добавить ссылки, если это необходимо, и удалить автоматически сгенерированную ссылку.

Есть ли у вас какие-либо мысли по поводу оператора cfif, которые могли бы сделать это?

Спасибо.

РЕДАКТИРОВАТЬ: уточнитьЯ хочу удалить «Читать дальше», если в teaser_text найдена ЛЮБАЯ ссылка.

Ответы [ 3 ]

5 голосов
/ 05 сентября 2011

Чтобы показать ссылку «читать дальше», только если гиперссылка не найдена в teaser_text, эта проверка, вероятно, будет достаточно хорошей:

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

Если вы хотите проверять URL-адреса, а не гиперссылки, вам нужно стать более модным.

Вам также нужно помнить, что это означает, что teaser_text рассматривается как text (не как HTML), поэтому комментирование ссылки не помешает ее обнаружению (если это имеет значение, вам нужно изучить HTML DOM парсеры, а для CF их нет, так что вам стоит взглянуть на Java).

0 голосов
/ 05 сентября 2011

Что-то вроде этого должно делать то, что вы хотите

<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 голосов
/ 05 сентября 2011

Это должно работать:

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

Если вы размещаете ссылки вручную, просто измените первый параметр функции findnocase () [т.е. htp / https] или используйте регулярное выражение, чтобы выяснить, является ли это URL [через: refindnocse ()]

-sean

...