2009-08-11 5 views
3

Я работаю на сайте клиента, и обновление до ColdFusion 8 не является вариантом. То, что я ищу, похоже на функциональность CFFEED CF8 через пользовательский тег или компонент, и я не особо заинтересован в написании собственного читателя/парсера, если что-то уже существует.Компонент CFFEED/пользовательский тег для ColdFusion MX 7?

Мне нужно прочитать в блоге RSS2 из блога и отобразить название, описание и ссылку. Предпочтительно я мог бы установить кеш около 5-10 минут, чтобы я не забивал фид (информация, которую я вытаскиваю из фида, будет отображаться на сайте с высоким трафиком).

ответ

7

Если вы ищете что-то из коробки есть несколько проектов по RIAForge, быстрый поиск воспитан эти два, но я предполагаю, что вы могли бы найти больше:

http://cfrss.riaforge.org/

http://rssville.riaforge.org/

Если вы для прокатки своего собственного (я знаю, что вы сказали, что вы не хотите), не мог просто сделать запрос на сырье, как так:

<cfhttp 
    url = "http://example.com" 
    resolveurl="no" 
    throwOnError = "yes" 
    timeout = "10" > 
</cfhttp> 

и анализирующие результаты:

<cfset feedData = CFHTTP.FileContent> 
<cfset xmlData = XMLParse(feedData)> 

Loop через:

<cfset result = queryNew("title,description")> 
<cfset items = xmlSearch(xmlData,"//*[local-name() = 'item']")> 

<cfloop index="x" from="1" to="#arrayLen(items)#"> 

    <cfif structKeyExists(items[x],"title")> 
     <cfset node.title = items[x].title.XmlText> 
    <cfelse> 
     <cfset node.title = ""> 
    </cfif> 

    <cfif structKeyExists(items[x],"description")> 
     <cfset node.description = items[x].description.XmlText> 
    <cfelse> 
     <cfset node.description = ""> 
    </cfif> 

    <cfset queryAddRow(result)> 
    <cfset querySetCell(result,"title",node.title)> 
    <cfset querySetCell(result,"description",node.description)> 

</cfloop> 

Выход:

<cfoutput query="result"> 
    <ul> 
     <li><strong>#title#</strong> - #description#</li> 
    </ul> 
</cfoutput> 

Очевидно непроверенной, но идея, тем не менее. Используется нечто похожее на это, чтобы получить мои последние вкусные закладки. Что касается кэширования, есть несколько способов справиться с этим. Я, вероятно, запустил запланированную задачу, чтобы нажать этот файл и записать вывод в отдельный файл, который включен. Я уверен, что есть лучшие способы, но это быстрый n грязный, imo.

0

Я знаю, что это немного поздно, но столкнулся с этой ситуацией на моей работе (Coldfuison 7 и не будет обновляться). Но также необходимо было связать его с исходным сообщением из его встроенного местоположения на нашем веб-сайте.

Просто, чтобы добавить немного больше к великому ответу выше, вы можете добавить это ссылка на статью (на тумблер в нашем случае) В петле через:

<cfif structKeyExists(items[x],"guid")> 
    <cfset node.guid = items[x].guid.XmlText> 
<cfelse> 
    <cfset node.guid = ""> 
</cfif> 

<cfset querySetCell(result,"guid",node.guid)> 

А в выходной :

<a href="#guid#">#title#</a> 

Я верю, что вы также можете использовать «ссылку» вместо «guid», но это сработало для меня. Надеюсь, это поможет кому-то другому, кто хочет вернуться назад. Я довольно новичок в ColdFusion, , и может быть лучший способ сделать это (в более старых версиях CF).