Flash İçinde Arama Yapmak
Bize en çok sorulan sorulardan birisi de Flash içinde nasıl arama yapabileceğimiz. Bu dersimizde bu konuya ufak bir giriş yapacağız. XML’den çekeceğimiz bilgiler içinde arama yapacağız.
Öncelikle basit bir XML dosyası hazırlıyalım:
<?xml version="1.0" encoding="ISO-8859-1"?> <uyeler> <uye> <isim>Mustafa</isim> <gorev>Designer</gorev> </uye> <uye> <isim>Murat</isim> <gorev>Developer</gorev> </uye> <uye> <isim>Ali</isim> <gorev>Director</gorev> </uye> </uyeler>
Bu dosyayı uyeler.xml şeklinde kaydedin. Flash içinde birinci frame üzerindeki ilk kodlarımız:
var xml:XML var sonuc:Array var xmlLoader:URLLoader = new URLLoader() xmlLoader.load( new URLRequest("uyeler.xml")) xmlLoader.addEventListener(Event.COMPLETE,onXMLLoaded) function onXMLLoaded(e:Event) { xml = new XML(xmlLoader.data) }
Bu kodlar XML dosyamızı Flash içine çekiyor. Yükleme bitince yüklenen datayı xml değişkenimize eşitliyoruz. Böylece ileride arama için bunu kullanabiliriz. Aşağıdaki kodlarımızı da frame üzerine ekleyelim:
function isimAl(id:int):String { return xml.uye[id].isim.toString() } function gorevAl(id:int):String { return xml.uye[id].gorev.toString() }
Bu iki fonkisyon XML içinden sıra bilgisine göre içerik almamıza yarıyor. Örneğin XML yüklendikten sonra trace( isimAl(0) ) derseniz size Mustafa döndürecektir.
Sıra geldi arama işlemimize. Aşağıdaki son fonksiyonumuzu da kodlarımıza ekliyelim:
function ara(a:String) { sonuc = new Array() var sonucVar:Boolean = false a = a.toLocaleLowerCase() for(var i:int = 0; i<xml.uye.length() ; i++ ){ var b:String = new String() var simdikiIsim:String = isimAl(i) var simdikiGorev:String = gorevAl(i) if(simdikiIsim.toLocaleLowerCase().indexOf(a)>-1 || simdikiGorev.toLocaleLowerCase().indexOf(a)>-1) { sonuc.push({isim:simdikiIsim,gorev:simdikiGorev,id:i}) trace(simdikiIsim,simdikiGorev,i) sonucVar= true } } if(sonucVar == false) { trace("Sonuç Yok!!") } }
Bu fonksiyonumuz arama işlemini üstleniyor. Şimdi biraz inceleyelim. Öncelikle en yukarıdaki yazdığımız sonuc dizisini sıfırlıyoruz. Daha sonra ise sonucVar değişkenini false olarak belirliyoruz. Bunu ileride açıklayacağım.
Daha sonra aramak istediğimiz harf grubunun tüm karakterlerini küçültüyoruz. Bu sayede büyük harf küçük harf uyuşmazlığını ortadan kaldırıyoruz.
for döngüsüyle tüm bilgileri kontrol ediyoruz. Oradaki ‘i’ değişkeni 0,1,2… şeklinde toplam uye sayısı kadar sıralanıyor. simdikiIsim ve simdikiGorev şeklinde iki değişken yaratıp bunları yukarıdaki fonksiyonlarımıza eşitliyoruz. ID olarak ‘i’ değişkenini kullanıyoruz.
Şimdi kilit noktaya geldik. Biz arama için indexOf() metodunu kullanıcağız. Bu metod String ifadelerindeki arayacağınız kelimelerin hangi sırada olduğunu döndürüyor. Eğer öyle bir kelime yoksa -1 döndürüyor. Yani ozaman eğer harf grubunda bizim arayağımız bir harf grubu bulunuyorsa mutlaka -1 den büyük bir değer döndürecektir. İki tane içeriğimiz olduğundan bunu iki içerik için de uyguluyoruz. Tabiki araya || (veya) işareti koymayı unutmuyoruz. Ayrıca toLocaleLowerCase ile yine büyük harf küçük harf uyuşmazlığını ortadan kaldırıyoruz.
if’in altında ise bulunan sonuçları test etmek için sonuc dizisine ekliyoruz ve trace içine test etmek için yerleştiriyoruz. Son olarak başta sonucVar değişkenine false demiştik. Eğer sadece bir tane bile sonuç bulunursa true’ya eşitliyoruz. Ama gördüğünüz gibi hiç bir şey bulamazsa false’da kalıyor. Arama bitince de bunu kontrol ediyoruz. Eğer sonuç bulamadıysa bize Sonuç Yok!! diyor.
Test etmek için yukarıda yazdığımız onXMLLoaded fonksiyonunu bunla değiştirin:
function onXMLLoaded(e:Event) { xml = new XML(xmlLoader.data) ara("mus") ara("developer") ara("director") ara("kemal") }
ve test edin. Size:
Mustafa Designer 0 Murat Developer 1 Ali Director 2 Sonuç Yok!!
dicektir
Flash içinde Arama konulu dersin giriş bölümünün sonuna geldik. Sadece bu kadarından bile ilerletebilirsiniz. Bir sonraki dersimizde sonuçları sahneye ekleyeceğiz.


Çok güzel bir örnek olmuş…teşekkürler
Selamlar,
Güzel bir konuyu ele almışsınız teşekkürler. Bu konuya tamda uygun düşecek bir konuyu bugün nasıl yaparım diye düşünüyordum.
http://teletekst.nos.nl
yukarıdaki siteye bakacak olursanız yanda bir hesap makinesi gibi uygulama var hangi teletekst sayfasını isterseniz input tekst kısmına yazıyorsunuz ve “gaan” butonuna basıyorsunuz istediğiniz sayfaya ulaşabiliyorsunuz.
Selamlar,
demir alkanlar
demiralkanlar@gmail.com
Bu daha kolay gibi
trace(xml.user.(@id==1))