izim örneğimizde resmin boyutları XML içerisinde tanımlı şekilde. Bu
boyutları sabit tutabileceğiniz gibi isterseniz dinamik olarak da
ayarlayabilirsiniz. Bunun için Search Provider'ın XML tanımındaki URL bilgisinde
ufak bir değişiklik yapmak gerekiyor.
<Url type="application/x-suggestions+xml"
template="http://localhost:49438/WebSite2/xml.ashx?aranacak={searchTerms}?}&
maxgenislik={maxWidth}&satiryuksekligi={rowHeight}&bolumyuksekligi={sectionHeight}"/>
ASHX dosyasına ek olarak gönderebileceğiniz {maxWidth}, {rowHeight} ve
{sectionHeight} bilgileri tarayıcı tarafından otomatik olarak
doldurulacaktır. {maxWidth} Search Suggestion barının
genişliğini, {rowHeight} her bir sonucun gösterildiği satırının
yüksekliğini, {sectionHeight} ise varsa bir bölümün toplam
yüksekliğini verecektir. Bu bilgileri kullanıcının çözünürlüğüne göre değişeceği
için sizde ASHX dosyanıza gelen parametrelere uygun şekilde XML yaratırken
Image taglarının boyutlarını belirleyebilirsiniz.
Gelin işin bir de sunucu tarafına göz atalım ve son örneğimizdeki XML kodunu
oluşturacak ASHX'ın arkasına bakalım.
[VB]
Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
context.Response.ContentType = "text/xml"
Dim XMLFeed As New XDocument(New XDeclaration("1.0", "utf-8", "yes"))
XMLFeed.Add(New XElement("SearchSuggestion", _
New XElement("Query", context.Request.QueryString("aranacak")), _
New XElement("Section", _
New XElement("Separator", _
New XAttribute("title", "Bölüm 1")), _
New XElement("Item", _
New XElement("Text", "Sonuç 1"), _
New XElement("Image", _
New XAttribute("source", "http://localhost:49438/WebSite2/dock.jpg"), _
New XAttribute("alt", "Bir resim"), _
New XAttribute("width", "75"), _
New XAttribute("height", "50")), _
New XElement("Description", "Açıklamaa"), _
New XElement("Url", "http://sonucadresi.com")), _
New XElement("Separator", _
New XAttribute("title", "Bölüm 2")), _
New XElement("Item", _
New XElement("Text", "Sonuç 2"), _
New XElement("Description", "Açıklamaa"), _
New XElement("Url", "http://sonucadresi.com")))))
context.Response.Write(XMLFeed)
End Sub
[C#]
public void ProcessRequest (HttpContext context) {
context.Response.ContentType = "text/xml";
XDocument XMLFeed = new XDocument(new XDeclaration("1.0", "utf-8", "yes"));
XMLFeed.Add(new XElement("SearchSuggestion",
new XElement("Query", context.Request.QueryString["aranacak"].ToString()),
new XElement("Section",
new XElement("Separator",
new XAttribute("title", "Bölüm 1")),
new XElement("Item",
new XElement("Text", "Sonuç 1"),
new XElement("Image",
new XAttribute("source", "http://localhost:49438/WebSite2/dock.jpg"),
new XAttribute("alt", "Bir resim"),
new XAttribute("width", "75"),
new XAttribute("height", "50")),
new XElement("Description", "Açıklamaa"),
new XElement("Url", "http://sonucadresi.com")),
new XElement("Separator",
new XAttribute("title", "Bölüm 2")),
new XElement("Item",
new XElement("Text", "Sonuç 2"),
new XElement("Description", "Açıklamaa"),
new XElement("Url", "http://sonucadresi.com")))));
context.Response.Write(XMLFeed.ToString());
}
Tabi tüm yukarıdaki kodun bir veritabanına bağlanması ve uygun şekilde For döngüleri ve LINQ sorguları ile birden çok
item elementlerinin yaratılması gerekiyor.
İşin JSON tarafına baktığımızda maalesef programatik olarak kullanımı çok
daha bir sistem söz konusu. Ayrıca JSON tarafında Separator ve Image nesneleri
şu an için desteklenmiyor. O nedenle JSON kullanımı pek uygun değil.
Her Search Provider aynı anda bir Accelerator!
Internet Explorer 8.0 ile beraber gelen bir diğer yenilik de eski adıyla "Activities"
olan "Accelerator"lar. Accelerator'ların detayına girmeyeceğiz, bunun için ayrı
bir makale çok daha uygun olur fakat her Search Provider'ın aslında otomatik
olarak da bir Accelerator olduğunu söyleyebiliriz. IE içerisinde herhangi bir
web sayfasını açtıktan sonra bir metin seçip fare ile sağ tıkladığınızda
Accelerator menüsünden Search Provider'ları görebilirsiniz.
Her Search Provider aynı anda bir Accelerator!
Bu otomatik Accelerator yapısının oluşması için ek bir işlem yapmak
gerekmiyor. İsterse kullanıcı rahatlıkla "Manage Accelerators" bölümünden arama
motorunu ilk sağ tık ile gelen menüye de alabiliyor.
Search Provider'ı bulunabilir hale getirmek?
JavaScript kodu ile Search Provider ekleme işlemini görmüştük. Bunun
haricinden tarayıcıların sayfanıza girildiği gibi uygun Search provider'ı
otomatik olarak bulabilmesi için de aşağıdaki kodu sayfanın head
bölümüne yerleştirebilirsiniz.
<link title="AramaMotoruAdı"
rel="search"
type="application/opensearchdescription+xml"
href="AramaMotoruAdı">
Burada önemli olan nokta Search Provider'ı tanımlayan XML dosyası içerisinde
ShortName ile bu tag içerisindeki title'ın
kesinlikle aynı olması gerektiği. Aksi halde birleştirme işlemi
yapılamayacaktır. link tagı içerisinde href
özelliği doğrudan Search Provider'ın XML dosyasını göstermelidir.
Hepinize kolay gelsin.
Daron Yöndem