sponsor adobe istanbul
Profili Göster

ColdFusion MX, CFC ve Flash Remoting

Yılmaz Uğurlu Tarih: 8/03/2005 Yorum: 0 adet

Okunma : 308 Tutanlar: Bu yazıyı 2 kişi tuttu.

ColdFusion MX, CFC ve Flash Remoting ile XML – RSS Okuyucu Macromedia, ColdFusion 7 sürümü ile bir çok yenilik duyurdu. cfform etiketindeki flash ve xml nitelikleri, FlashPaper kullanımı, Olay Ağ Geçitleri (Event Gateways) ve daha pekçok şey… Şimdi, hazırlamaya çalışacağımız uygulamada .CFC kullanarak bir xml dosyasını işleyecek ve Flash Remoting yardımı ile sonuçları görüntülemek için bir arayüz hazırlayacağız. Amacımız http://www.radikal.com.tr/radikal.xml adresinde bulunan tüm haberlere ait rss dosyasını işlemek, kategorilere göre gruplandırmak ve seçilen kategoriye ait haberleri listeleyip, haberlere ilişkin ayrıntıların görüntüleneceği bir arayüz hazırlamak.

Öncelikle XML dosyamızı okuyup bunu işleyecek ve remoting üzerinden flash ile etkileşime girecek .CFC dosyamızı hazırlayalım. .CFC dosyamız temel olarak iki metod (metodlar kavramsal olarak .CFC dosyamızın içindeki fonksiyonlardır) içerecek bunlardan birincisi uygulama yüklendiğinde bir defa tetiklenecek ve bize o anda XML dosyası içinde varolan kategorileri sağlayacak olan katGoster() metodu, ikincisi ise yapılan kategori seçimine bağlı olarak ilgili kategoriye ait haber başlıklarını ve içeriklerini sağlayacak olan haberler() metodu.

Macromedia Dreamweaver ile yeni bir ColdFusion Bileşeni (ColdFusion Component) oluşturalım.

coldfusion – rss

Doküman açıldığında varsayılan olarak gelen kodları silelim ve dosyamızı RSS.cfc adıyla uygulamamızı hazırladığımız klasör içine kaydedelim. Öncelikle bileşene ait içeriğimiz çevreleyen <cfcomponent> </cfcomponent> etiket çiftini dökümana yerleştirirelim. Bileşen içerisinde kullanacağımız tüm metodları bu etiket çifti içinde kullanacağız.

Daha sonra XML dosyamızı ulaşmamızı sağlayacak olan URL’ yi tüm metodların kullanımına sunmak için ön tanımlı olarak dökümanımızın başına yerleştiririz.

<cfset THIS.urlAddress = "http://localhost:8500/remoting/radikal.xml">

THIS faaliyet alanı bir bileşenin belirli bir örneğinin varlığını devam ettirdiği sürece, hatırlanacak bilgilerin depolanacağı yerdir.

Daha sonra ilk metodumuzu tanımlayalım.

<cffunction name="katGoster" access="remote" returntype="query">
...
</cffunction>

ilk metodumuzun adı katGoster() işlevi XML dökümanı içinde bulunan haber kategorilerini bir sorgu nesnesine çevirmek. Remoting üzerinden ulaşılabilmesi içinde access niteliği remote olarak belirlenmiş durumda. Bu nitelik metodunuzu nasıl kullanabileceğinizi tanımlar. Seçime bağlıdır. Daha sonra metodumuzdan dönecek veri tipini belirlediğimiz returntype niteliğini query olarak belirleriz. Çünkü metodumuz kategori başlıklarını bir sorgu nesnesine çevirecektir. Bu da seçime bağlı bir niteliktir. Bu sayede metodun ne yaptığını kontrol etmek kolaylaşır.

Bunları yaptıktan sonra en başta ön tanımlı olarak belirttiğimiz adres üzerindeki xml dosyasının içeriğini <cfhttp> etiketi yardımı ile okuruz.

<cfhttp url="#THIS.urlAddress#" method="get" resolveurl="yes" charset="iso-8859-9"/>

cfhttp ColdFusion’un bir tarayıcı gibi davranmasını sağlar. resolveurl niteliği ile gömülen URL tam olarak çözümlenir, charset niteliği ile de etikete kullanacağı dil kodlamasını belirtiriz. Okutacağımız xml dosyasının dil kodlaması iso-8859-9 olduğundan biz de aynı kodlamayı kendi uygulamamızda kullanırız. Daha sonra XMLDoc adında bir değişken oluşturur ve cfhttp etiketinden gelen içeriği değişkenimize atarız.

<cfset XMLDoc = Trim(CFHTTP.FileContent)>

Daha sonra CFML nin yerleşik XmlParse() fonksiyonu ile dönen içeriği işleriz.

<cfset XMLDoc = XmlParse(XMLDoc)>

Bu işlemi de gerçekleştirdikten sonra dökümanımız içinde kaç adet haberimiz bulunduğunu hesaplamak için yine CFML nin yerleşik ArrayLen() fonksiyonunun kullanırız.

<cfset toplam = ArrayLen(XMLDoc.rss.channel.item)>

Burada oluşturmuş olduğumuz toplam değişkeni XML dökümanı içerinde bulunan item düğümlerinin sayısına eşitleyecektir. Uygulamamızda kullanacağımız içerikler dosya içerisindeki item düğümleri içerisinde bulunmaktadır.


<item>
<category>Yaşam</category>
<title>59'luk Rambo çekime hazır</title>
<description>Sylvester Stallone, Rambo'yu dördüncü kez canlandırmak için 59 yaşında yeniden kamera karşısına geçecek. Stallone, en son Afganistan dağlarında bıraktığı Rambo için eylül ayında çekimlere başlıyor.</description>
<link>http://www.radikal.com.tr/haber.php?haberno=145657</link>
</item>

Daha sonra queryNew() fonksiyonunu kullanarak Sorgu adında bir sorgu nesnesi yaratırız ve içerisine kat isminde bir sütun ekleriz.

<cfset Sorgu = queryNew("kat")>

Bu adımdan sonra sorgumuza başta hesaplamış olduğumuz item düğümü sayısı kadar satır ekleriz.

<cfset queryAddRow(Sorgu,toplam)>.

Daha sonra bir döngü yardımı iler işlemiş olduğumuz xml dosyamız içerisindeki item düğümlerinde bulunan kategori başlıklarını oluşturduğumuz sorgu nesnesindeki kat sütununa ekleriz.

<cfloop from="1" to="#toplam#" index="i">
<cfset QuerySetCell(Sorgu, "kat", XMLDoc.rss.channel.item[i].category.xmlText ,i)>
</cfloop>

XML dökümanımız RSS düğümü ile başlar ve channel düğümü ile devam eder. Bu kod bloğu doküman 1 den başlayarak item düğümü sayısına kadar döneceğinden ilgili düğümdeki XmlText içeriğini sırası ile sorgu nesnesinin içine doldurur. i değişkenimiz o anda döngüde bulunulan tekrar sayısına eşit olacaktır. Örnek olarak i değişkenimiz 5’e eşit ise Sorgu isimli sorgu nesnemizde 5 i satıra XML dökümanımız içinde RSS ve channel düğümleri içinde bulunan 5. item bloğu içerisindeki category düğümündeki XmlText içeriği atanacaktır.

Daha sonra sorguların sorgusu özelliğini kullanarak tekrarları engelleyerek dökümanımız içerisinde bulunan kategorilere ulaşalım ve bu sonucu Flash’ta kullanabilmek üzere döndürelim.

<cfquery dbtype="query" name="kategori">
SELECT DISTINCT kat FROM Sorgu
ORDER BY kat
</cfquery>
<!--- sonucu döndürelim --->
<cfreturn kategori/>

kategori adında yeni bir sorgu oluşturarak daha önce oluşturduğumuz Sorgu isimli sorgu içerisinde bulunan kategori isimlerini sorgulayalım. Aynı kategoriye ait birden fazla haber olabileceğinden aynı kategorinin tekrarlanmasını önlemek amacıyla SQL dilinin DISTINCT anahtar kelimesi ile kayıtları tekil olarak alır ve döndürürüz.

<cfreturn kategori/> etiketi sorgulamış olduğumuz kategorilere ait içeriği metodun sonucu olarak döndürür. Bitmiş hali ile kodumuzu incelersek aşağıdaki şekilde olduğunu görürüz.


<cfcomponent>
<!--- ön tanımlı değer Rss kaynağının adresi --->
<cfset THIS.urlAddress = "http://localhost:8500/remoting/radikal.xml">

<!--- katGoster() metodu --->
<cffunction name="katGoster" access="remote" returntype="query">
<!--- xml dosyasını okuyalım --->
<cfhttp url="#THIS.urlAddress#" method="get" resolveurl="yes" charset="iso-8859-9"/>
<!--- sadece bu metod için geçerli parametreler --->
<cfset XMLDoc = Trim(CFHTTP.FileContent)>
<cfset XMLDoc = XmlParse(XMLDoc)>
<cfset toplam = ArrayLen(XMLDoc.rss.channel.item)>
<cfset Sorgu = queryNew("kat")>
<cfset queryAddRow(Sorgu,toplam)>
<cfloop from="1" to="#toplam#" index="i">
<cfset QuerySetCell(Sorgu, "kat", XMLDoc.rss.channel.item[i].category.xmlText ,i)>
</cfloop>
<!--- yarattığımız sorgudan kategoriler tekrarlanmayan bir şekilde alalım --->
<cfquery dbtype="query" name="kategori">
SELECT DISTINCT kat FROM Sorgu
ORDER BY kat
</cfquery>
<!--- sonucu döndürelim --->
<cfreturn kategori/>

</cfcomponent>

Şimdi sıra geldi flash içinden bir kategori seçildiğinde ilgili kategoriye ait haber başlıklarını içeriği ve ilgili haberin ayrıntılı bağlantısını içeren haberler() metoduna.

Bu metod da ilk metodumuz gibi flash erişimine açık olması için access niteliğin olarak remote seçimini yapıyoruz ve yine metodumuzdan dönecek olan sonucun sorgu olması dolayısıyla returntype niteliğini query’e ayarlıyoruz.

<cffunction name="haberler" access="remote" returntype="query">

burada ilk metodumuzdan farklı olarak seçime bağlı bir değişken kullanacağımız için <cfargument> etiketi ile bu değişkenimizi tanımlarız.

<cfargument name="kategori" type="string" default=" "/>

Değişkenimizin ismi kategori type niteliği ile veri tipi olarak dize veri tipini default niteliğini ise boş bıraktık. Bunu veri filitrelemede kullandığımız url değişkenlerinin varlığını sınadığımız <cfparam> etiketine benzetebiliriz.

Daha sonra ilk metodumuzda yaptığımız gibi XML dökümanımız okuyacak ve dönen içerikteki bilgileri HaberSorgusu ismi ile olşturacağımız sorgu nesnesi içinde depolayacağız. Bu sefer ilk metodumuzdan farklı olarak kat sütununa ek olarak title, desc ve link adında 3 sütunu daha sorgumuza ilave edeceğiz.


<cfhttp url="#THIS.urladdress#" method="get" resolveurl="yes" charset="iso-8859-9"/>
<cfset Doc = Trim(CFHTTP.FileContent)>
<cfset Doc = XmlParse(Doc)>
<cfset sayi = ArrayLen(Doc.rss.channel.item)>
<cfset HaberSorgusu = queryNew("kat,title,desc,link")>
<cfset queryAddRow(HaberSorgusu,sayi)>
<cfloop from="1" to="#sayi#" index="i">
<cfset QuerySetCell(HaberSorgusu, "kat", Doc.rss.channel.item[i].category.xmlText ,i)>
<cfset QuerySetCell(HaberSorgusu, "title", Doc.rss.channel.item[i].title.xmlText ,i)>
<cfset QuerySetCell(HaberSorgusu, "desc", Doc.rss.channel.item[i].description.xmlText ,i)>
<cfset QuerySetCell(HaberSorgusu, "link", Doc.rss.channel.item[i].link.xmlText ,i)>
</cfloop>

bu kod bloğu da ilk metodtaki mantık ile aynı şekilde işleyerek sorgu nesnemizi verilerle doldurmaktadır. Daha sonra yine sorguların sorgusu özelliğini kullanarak oluşturduğumuz HaberSorgusu isimli sorgu nesnesi içinden, flash içinde yapmış olduğumuz seçime bağlı olarak değişecek olan bağımsız değişkenimizde bulunan kategori başlığına ait haberleri filtreleyerek alalım.


<cfquery dbtype="query" name="goster">
SELECT * FROM HaberSorgusu
WHERE kat = '#ARGUMENTS.kategori#'
</cfquery>

Sorgu sonunda dönen içeriği flashta kullanabilmek üzere metodumuzun sonucu olarak döndürelim.

<cfreturn goster/>

CFC kodumuz ile işimiz burada bitti. Şimdi kodumuzun tamamı aşağıdaki şekilde görünüyor olacaktır.


<cfcomponent>
<!--- ön tanımlı değer Rss kaynağının adresi --->
<cfset THIS.urlAddress = "http://localhost:8500/remoting/radikal.xml">

<!--- katGoster() metodu --->
<cffunction name="katGoster" access="remote" returntype="query">
<!--- xml dosyasını okuyalım --->
<cfhttp url="#THIS.urlAddress#" method="get" resolveurl="yes" charset="iso-8859-9"/>
<!--- sadece bu metod için geçerli parametreler --->
<cfset XMLDoc = Trim(CFHTTP.FileContent)>
<cfset XMLDoc = XmlParse(XMLDoc)>
<cfset toplam = ArrayLen(XMLDoc.rss.channel.item)>
<cfset Sorgu = queryNew("kat")>
<cfset queryAddRow(Sorgu,toplam)>
<cfloop from="1" to="#toplam#" index="i">
<cfset QuerySetCell(Sorgu, "kat", XMLDoc.rss.channel.item[i].category.xmlText ,i)>
</cfloop>
<!--- yarattığımız sorgudan kategoriler tekrarlanmayan bir şekilde alalım --->
<cfquery dbtype="query" name="kategori">
SELECT DISTINCT kat FROM Sorgu
ORDER BY kat
</cfquery>
<!--- sonucu döndürelim --->
<cfreturn kategori/>
</cffunction>
<!--- ************************************************************** --->
<!--- haberler() metodu --->
<cffunction name="haberler" access="remote" returntype="query">
<cfargument name="kategori" type="string" default=""/>
<!--- xml dosyasını okuyalım --->
<cfhttp url="#THIS.urladdress#" method="get" resolveurl="yes" charset="iso-8859-9"/>
<cfset Doc = Trim(CFHTTP.FileContent)>
<cfset Doc = XmlParse(Doc)>
<cfset sayi = ArrayLen(Doc.rss.channel.item)>
<cfset HaberSorgusu = queryNew("kat,title,desc,link")>
<cfset queryAddRow(HaberSorgusu,sayi)>
<cfloop from="1" to="#sayi#" index="i">
<cfset QuerySetCell(HaberSorgusu, "kat", Doc.rss.channel.item[i].category.xmlText ,i)>
<cfset QuerySetCell(HaberSorgusu, "title", Doc.rss.channel.item[i].title.xmlText ,i)>
<cfset QuerySetCell(HaberSorgusu, "desc", Doc.rss.channel.item[i].description.xmlText ,i)>
<cfset QuerySetCell(HaberSorgusu, "link", Doc.rss.channel.item[i].link.xmlText ,i)>
</cfloop>a
<!--- oluşturduğumuz sorgudan istenen değeri seçelim --->
<cfquery dbtype="query" name="goster">
SELECT * FROM HaberSorgusu
WHERE kat = '#ARGUMENTS.kategori#'
</cfquery>
<!--- sonucu döndürelim --->
<cfreturn goster/>
</cffunction>

</cfcomponent>

Şimdi sıra sorguladığımız içeriği görüntülememizi sağlayacak olan flash arayüzünün hazırlanmasına geçebiliriz. Burada flash üzerinde belli başlı işlemleri yapmayı bildiğinizi varsayıyorum. Örneğin örnek isim verme, Component (bileşen) panelinden sahneye eleman sürükleme vb. Yeni bir flash çalışma sayfası açarak onu .CFC dosyanızı kaydettiğiniz klasör içerisine RSS.fla adı ile kaydedin.

Şimdi sıra içeriği görüntüleyeceğimiz elemanları sahnemize yerleştirmemize geldi. Ben uygulamayı Flash MX 2004 Professional sürümü üzerinde hazırladığım için kodları MX 2004 bileşenlerine uygun olarak yazmış durumdayım. Ancak Flash MX sürümünü kullananlar için Flash MX bileşenleri ve onlara ait kodların bulunduğu flash dosyasını da örnek kodlara ekledim.Dosyalari makalelenin sonundaki linkten indirebilirsiniz.

Şimdi sırası ile kategori başlıklarını görüntülemek üzere Components (bileşenler) panelinden sahnemize bir adet ComboBox bileşeni sürükleyelim ve sahnemizin sol üst köşesine yerleştirelim (siz istediğiniz bileşeni istediğiniz yere yerleştirmekte serbestsiniz). Bileşenimizin örnek adını (instance name) katList olarak belirleyelim. Daha sonra seçilen kategoriye ait haber başlıklarımızı görüntülemek üzere bir adet i]List[/i] bileşeni ekleyelim ve yeniden boyutlandırarak enini 390 pixel yüksekliğini 100 pixel olarak ayarlayalım [i[/i]. Bileşenimize örnek ad olarak headList ismini verelim ve sağ tarafa dayalı biçimde sahnede yerini değiştirelim.

Ardından seçilen kategoriye ait kaç adet kayıtlı haber olduğunu görüntülemek üzere [i]List[/i] bileşeninin sol alt köşesine hizalı olarak bir dinamik text alanı oluşturalım ve örnek adını sayac olarak atayalım ve de enini 100 pixel olarak belirleyelim (W:100). Font ve boyut seçimi size kalmış durumda. Sonraki adım olarak kategoriye bağlı haberlerden biri seçildiğinde habere ait ayrıntıları göstermek üzere sahnemize bir [i]TextArea[/i] bileşeni ekleyelim.

Bileşenimizin örnek adını descTxt olarak belirleyelim ve az önce kayıt sayısını gösterecek olan text alanın altına sahneyi enine kaplayacak şekilde yerleştirelim. Sahne boyutu olarak varsayılan i]550×400[/i] ölçeğini kullanıyorsanız bileşenin enini 535 pixel yüksekliğinide 150 pixel olarak değiştirin [i[/i]. Ve son eleman olarak sahnemize bir dinamik text alanı daha ekleyerek örnek adını linktxt olarak değiştirin genişliğini de 500 pixel olarak değiştirin (W:500). Bu text alanını seçerek F8 tuşuna basın ve açılan ekrandan davranış olarak [i]Movie Clip[/i] seçeneğini işaretleyin ve isim olarak linkmc adını girin. Oluşturduğumuz Movie Clip’i (mc) seçerek yine örnek ad olarak link_mc adını verelim. Sahnemizde kullanacağımız arayüz elemanlarımız bu kadar. Bu işlemler sonunda ekranınızda aşağıdakine benzer bir arayüzün oluşması gerekmekte.

coldfusion – rss Şimdi sıra cfc dosyamız ile bağlantı kuracak kodumuzu yazmaya geldi. İlk olarak Remoting fonksiyonlarımızın depolandığı NetServices.as dosyasını dökümanımıza dahil edelim.


#include "NetServices.as"

daha sonra Remoting ağ geçidine bağlanmak için gerekli kod bloğumuzu yerleştirelim.
if (inited == null) {
inited = true;
NetServices.setDefaultGatewayUrl("http://localhost:8500/flashservices/gateway");
gecit = NetServices.createGatewayConnection();
servis = gecit.getService("remoting.RSS", this);
servis.katGoster();
}

Bu kod inited isimli bir ActionScript nesnesinin var olup olmadığını kontrol eder. Değişken yoksa, takip eden kod çalıştırılır. Buradaki ilk kod inited değişkenini true olarak ayarlayarak varolmasını sağlar. Flash Remoting’e bağlanabilmek için varsayılan bir ağ geçidi ayarlarız. Benim bilgisayarımda ColdFusion sunucum http://localhost:8500 üzerinde çalıştığı için ağ geçidim http://localhost:8500/flashservices/gateway şeklinde olacaktır. Örneğin http://www.mmistanbul.com alan adına ait ağ geçidi http://www.mmistanbul.com/flashservices/gateway olarak ortaya çıkacaktır (belirli bir port üzerinden erişim var ise bunu alan adı kısmından sonra belirtilmesi gerekir, örn; http://www.mmistanbul.com:2654/flashservices/gateway ). Ardından gecit adından bir değişken oluşturarak belirlemiş olduğumuz ağ geçidine bağlanırız. Daha sonra yaptığımız bağlantı üzerinden bir servise başvuru alırız. servis adından bir değişken oluşturur gecit ismi ile bağlantı kuruduğumuz ağ geçidi üzerindeki servisimize başvuruda bulunuruz. Servis alacağımız dosyamızın adı RSS.cfc bu nedenle .CFC uzantısını kullanmadan kullanacağımız servisi çağırırız. Bunu yaparken nokta yazımını kullanarak servis dosyamızın yerini belirtiriz. Benim bilgisayarımda bu uygulama için hazırladığım dosyalar ColdFusion’un kök dizininde (wwwroot) remoting adlı klasör içerisinde bulunmakta. Bu nedenle ben servis adresi olarak remoting.RSS yi kullanmaktayım. Sizin bilgisayarınızda yapılanma daha farklı ise buna göre bu bölümü düzenleyebilirsiniz. Eğer uygulamayı direkt kök dizini üzerinden çalıştırıyorsanız servis adresi olarak sadece t yi belirtmelisiniz ( örn; "servis = gecit.getService("RSS", this);" ).

Daha sonra başvuru aldığımız servis içindeki metodları bir defaya mahsus tetikleriz. Bu sayede ilk olarak tetiklenen servis.katGoster(); kodu sayesinde cfc dosyamızdaki katGoster() metodunu tetikler ve kategorilerimizin bir listesini alırız. Bunları daha sonra ComboBox bileşenimizi doldurmakta kullanacağız. Tetiklenen ikinci bölümde ise servis.haberler(); kodu ile cfc dosyamızdaki haberler() metodunu tetikleriz ilk başta herhangi bir kategori değişkeni aktarılmadığı için bu metod varsayılan olarak haber döndürmeyecektir.

Ardından, headList.labelField = "title"; şeklindeki kod ile headList adını verdiğimiz List bileşenimize yükleyeceğimiz içeriklerden title olarak tanımladığımızı niteliğini ekran çıktısı vermesi amacıyla bu yolu kullanırız. Bunun sebebi birden çok içeriğe ait veriyi List bileşenimize yükleyecek olmamızdır.

Daha sonra servislerimizden geri dönen sonuçları karşılamak üzere gerekli fonksiyonlarımız oluştururuz.


function katGoster_Result(result) {
katList.removeAll();
for (var i = 0; i<result.getLength(); i++) {
var kayit = result.getItemAt(i);
katList.addItem(({label:kayit.kat, value:kayit.kat}));
}
servis.haberler({kategori:katList. getItemAt(0).value});
}
function haberler_Result(result) {
sayac.text = result.getLength()+" Kayıt";
headList.removeAll();
for (var i = 0; i<result.getLength(); i++) {
var kayit = result.getItemAt(i);
headList.addItem({title:kayit.title, desc:kayit.desc, link:kayit.link});
}
headList.setSelectedIndex(0);
descTxt.text = result.getItemAt(0).desc;
link_mc.link_txt.text = result.getItemAt(0).link;
}

İlk fonksiyonumuz çağırmış olduğumuz katGoster() metoduna ait sonuç gönderildiğinde tetiklenir. Bu metodun sonucu kategori listesi olduğundan katList örnek adlı ComboBox bileşenimize dönen yerleştirmekte kullanılan kodu içerir.

Bu kod öncelikle listede daha önceden var olan bütün içeriği temizleyen katList.removeAll(); kodu ile başlar. Daha sonra dönen sonuç sayısı kadar bir döngü yardımı ile sırası ile kayit isimli değişkene atanan kategori ismi değeri bileşenimizin hem label, yani ekran görüntüsü hem de value, yani değer , seçilen değeri bize veren veri içeriği niteliklerine eklenir. Son olarak da bileşen içerisinde bulunan ilk veri ile ilgili haber başlıklarını almak için kategori listesindeki ilk başlık ile haberler() metodumuzu tetikleriz.

İkinci fonksiyonumuz kategori seçimine bağlı olarak tetiklenen haberler() metoduna ait verilerin dönmesi ile tetiklenir. Bu fonksiyon önce sahnemizde kategoriye ait kaç kayıtlı haber bulunduğunu gösteren sayac isimli text alanını ilgili kayıt sayısı ile görüntüler. Ardından aynı kategori listesinde olduğu gibi öncelikle haber listemizi temizleriz ardından yine bir döngü ile headList örnek isimli [i]List[/i] bileşenimize [i]title, desc, ve link[/i] olmak üzere 3 niteliği kayıt sırasına göre ekler. Bileşenimiz için daha önce ekranda gösterilecek niteliği title olarak belirlemiştik. Ardından haber listesindeki ilk başlığı seçili hale getiren headList.setSelectedIndex(0); kodunu kullanıyoruz. Ardından haber listesindeki ilk haber içeriğini ayrıntıları görüntülemek üzere oluşturduğumuz descTxt örnek isimli [i]TextArea[/i] bileşeninde görüntülüyoruz ve ardından haber ile ayrıntılı bilgilere ulaşmak için ihtiyaç olan ayrıntı linkini link_txt isimli text alanında görüntülüyoruz.Bu aşamadan sonran iki ActionScript nesnesi oluşturuyoruz.


katGetir = new Object();
katGetir.change = function(secilen) {
servis.haberler({kategori:katList.getValue()});
};
katList.addEventListener("change", katGetir);

baslikGetir = new Object();
baslikGetir.change = function(secilen) {
link_mc.link_txt.text = secilen.target.selectedItem.link;
descTxt.text = secilen.target.selectedItem.desc;
};
headList.addEventListener("change", baslikGetir);

Oluşturduğumuz katGetir isimli nesneyi kategori listesinden yeni bir kategori başlığı seçildiğinde tetiklenmesi ve haberler() metodundan seçilen kategoriye ait haber içeriklerini istemesi için ayarlıyor ve de katList isimli ComboBox bileşenini addEventListener fonksiyonu ile bu nesne ile ilişkilendiriyoruz. İkinci nesnemiz ise haber başlıklarının bulunduğu headList isimli [i]List[/i] bileşeninden herhangi bir başlık seçildiğinde ilgili habere ait içeriğin descTxt örnek adlı TextArea bileşeninde, ilgili haberin ayrıntılarına ulaşmak için gerekli olan url’yide bağlantıyı sağlayan linkmc örnek adlı mc’nin içindeki linktxt örnek adlı text alanında görüntüler.

Ve son olarak link_mc içerisinde görüntülenen url bağlantısına gidebilmek için


link_mc.onPress = function() {
getURL(this.link_txt.text);
};

fonksiyonunu kodumuza ekleriz. Bu sayede mc’nin içinde bulunan text alanındaki URL ye bir bağlantı oluştururuz. Kodumuza ait ayrıntılı görüntü şu şekilde olmalıdır.


#include "NetServices.as"
// bir defa tetiklenecek içerik
if (inited == null) {
inited = true;
NetServices.setDefaultGatewayUrl("http://localhost:8500/flashservices/gateway");
gecit = NetServices.createGatewayConnection();
servis = gecit.getService("remoting.RSS", this);
servis.katGoster();
}
headList.labelField = "title";
function katGoster_Result(result) {
katList.removeAll();
for (var i = 0; i<result.getLength(); i++) {
var kayit = result.getItemAt(i);
katList.addItem({label:kayit.kat, value:kayit.kat});
}
servis.haberler({kategori:katList.getItemAt(0).value});
}
function haberler_Result(result) {
sayac.text = result.getLength()+" Kayıt";
headList.removeAll();
for (var i = 0; i<result.getLength(); i++) {
var kayit = result.getItemAt(i);
headList.addItem({title:kayit.title, desc:kayit.desc, link:kayit.link});
}
headList.setSelectedIndex(0);
descTxt.text = result.getItemAt(0).desc;
link_mc.link_txt.text = result.getItemAt(0).link;
}
katGetir = new Object();
katGetir.change = function(secilen) {
servis.haberler({kategori:katList.getValue()});
};
katList.addEventListener("change", katGetir);
baslikGetir = new Object();
baslikGetir.change = function(secilen) {
link_mc.link_txt.text = secilen.target.selectedItem.link;
descTxt.text = secilen.target.selectedItem.desc;
};
headList.addEventListener("change", baslikGetir);

link_mc.onPress = function() {
getURL(this.link_txt.text);
};

Bu sayede uygulamamız sona ermiş oluyor.

ColdFusion Component formatındaki RSS.cfc.zip dosyasını indir. (1kb) Macromedia FlashMX 2004 formatındaki RSS_MX2004.zip dosyasını indir. (521kb) Macromedia Flash MX formatındaki RSS_MX.zip dosyasını indir. (148 kb)

Yazar Hakkında : Yılmaz UĞURLU 1982 yılında Bartın’da doğdu. İlk ve orta öğrenimini Karadeniz Ereğli’de, Üniversite eğitimini Muğla Üniversitesi Kamu Yönetimi bölümünde tamamladı. Web programlama alanında uzman olan Yılmaz UĞURLU asp, jsp, php ve cfml uygulama dillerini tkin bir biçimde kullanabilmekte. Şu an İzmir’de Me-dialog Reklam ajansında Web Uygulamaları Geliştiricisi olarak çalışmaktadır.

aç-kapa İçeriğin rss beslemesi kullanımda değil Yorumlar

İçeriğe kayıtlı yorum bulunmuyor. İlk yorumu siz buradan ekleyebilirsiniz.


MMIstanbul Adobe UG MMIstanbul Adobe UG

adobe user group

ColdFusion, Flex, AIR, Flash, PDF, Dreamweaver, Fireworks, Photoshop, Illustrator, INdesign, Premiere, Soundbooth, Lightroom, InCopy, JRun, LiveCycle, Acrobat, AfteEffects, Resmi Adobe Kullanıcı Grubu.

yeni üyelik | şifremi unuttum

aç-kapa Konferans 2. Ulusal Yazılım Mimarisi Konferansı - UYMK'08

2. Ulusal Yazılım Mimarisi Konferansı - UYMK'08

2.Ulusal Yazılım Mimarisi Konferansı (UYMK’08), 11 – 12 Eylül 2008 tarihlerinde Ege Üniversitesi Bilgisayar Mühendisliği Bölümü ev sah...
Kategori: Konferans

aç-kapa Sergi İstanbul'da Bir Sürrealist: Salvador Dali

İstanbul'da Bir Sürrealist: Salvador Dali

Picasso ve Rodin’den sonra kimi görmek istersiniz deseler; Salvador Dali listenin ilk başlarında yer almaz mı? Ressam, yazar, bilim adamı, tasar...
Kategori: Sergi

aç-kapa Eğitim PAZARLAMA EĞİTİMLERİ

PAZARLAMA EĞİTİMLERİ

1-0 Eğitim Ajansı, eğitim programları Yer : Bir Sıfır Eğitim Danışmanlık Zaman Aralığı : Eylül – Ekim 2008 Adres : Çırağan Cad. Şahnisin Sok. No...
Kategori: Eğitim

aç-kapa Eğitim İLETİŞİM EĞİTİMLERİ

İLETİŞİM EĞİTİMLERİ

Kısa zamanda sektöre hızlı bir giriş yapan 1-0 Eğitim Ajansı iş hayatında kariyer yapmak isteyen katılımcılarını 1-0 öne geçirmeye devam ediyor. 1-0 ...
Kategori: Eğitim

aç-kapa Yarışma İnteraktif Pazarlama Zirvesi ve Grand Interactive Awards

İnteraktif Pazarlama Zirvesi ve Grand Interactive Awards

Türkiye’nin interaktif pazarlama projelerini değerlendiren ilk ve tek yarışması Grand Interactive Awards (GIA) için başvurular 15 Ağustos tarihi...
Kategori: Yarışma

üyeler Üyelerimizden...

stats Kimler Burada? web stats

Son 1 dakika içinde MMIstanbul' da 197 (2 kayıtlı, 195 ziyaretçi) kullanıcı varmış. Login durumda olanlar aşağıda:

coldfusion mysql ubuntu
 
sponsor adobe istanbul