ASP.NET ve XML Web Servisi ile Dinamik Meta Tag Ekleme

Serhat tarafından yazılmıştır. 12. Ocak 2010 14:59

Merhabalar herkese :)
Bu yazımızda XML Web Service yapısını kullanarak ASP.NET uygulamalarımızda nasıl dinamik bir şekilde Meta Tag ekleyebiliriz onu inceleyeceğiz. Öncelikle Meta Tag'lar bildiğimiz gibi web sayfalarımızın Head etiketleri arasında tanımlanan ve arama motorlarının sayfamızı indekslemek için kullanacağı bilgilerin bulunduğu bölümdür.Tabi ki günümüzde ki artık arama motorları çok akıllı olduğundan indeksleme algoritmaları meta tag'lara göre değil de sayfamızın içerisinde ki içeriğe görede yapabildiğini bilmekte yarar var.Ama burdan çıkaracağımız anlam kesinlikle Meta Tag'ların önemsiz olduğu olmamalıdır. Bir sitede meta tag'ların sabit olabileceğini ve niçin dinamik olarak uğraştığımızı sorabilirsiniz.Bizim burada modelleyeceğimiz yapı tek web sitesine göre değilde , elimizde 10'larca web sitesinin olduğunu ve bunların meta tag yönetiminin tek bir yerden yapabilmektedir.Bu işlemleri gerçekleştirirken de web servisi teknolojisinden yararlanacağız.Öncelikle web sitelerimizin bilgilerini saklayacağımız veri tabanımızın yapısı aşağıdaki gibidir.

Veritabanımızın yapısınıda bakacak olursak tüm metalarımızı,sitelerimizi ve metalarımızın alacağı değeleri farklı tablolara dağıtarak sistemimizin 100'lerce siteyide yönetebilmesini sağlıyoruz.Tek tablodada birşeyler yapabilirdik ama site sayısı arttığında zorlukları ortaya çıkacaktır.Bu yüzden ilişkisel bir  olarak tasarlıyoruz herşeyi. 

Tablolarımıza bakacak olursak , MetaUrl bizim üzerinde çalışacağımız ve diğer tablolarla ilişkili olan en önemli tablomuzdur.MetaUrl'de kullanıcıya gösterecek olduğumuz meta bilgileri , SiteUrl tablosunda sistemde kullanacak olduğumuz sitelerimiz , MetaTip tablosunda belirteceğimiz metalarımız (keywords,author vb) ve son olarakda Meta tablomuz bulunmaktadır ki burada da  özellikleri yani name'leri tutulmaktadır.Örneneğimizde 2 site ve bunların meta bilgileri bulunmaktadır.PRogramlama tarafından veritabanımız üzerinde işlem yapacağımızdan biz hangi sitenin meta tag'larını istiyorsak o site adresini aşağıdaki  Stored Procedure'mıza parametre geçmemiz yeterli olacaktır ve böylece bize belirtilen sitenin tag'larını geriye döndürecektir. SP aşağıdaki gibidir ;


[code:tsql]

CREATE PROC sp_MetaUrlDetay
(
    @siteAdres nvarchar(50)
)                   
AS
    BEGIN
        Select SiteURL.site,Meta.meta,MetaTip.metaTip,MetaUrl.deger From MetaUrl
                      INNER JOIN SiteURL ON MetaUrl.urlId = SiteURL.id
                      INNER JOIN MetaTip ON MetaUrl.metaTipId = MetaTip.id
                      INNER JOIN Meta ON MetaTip.meta = Meta.id
        WHERE SiteURL.site=@siteAdres                
    END


[/code]

Exec sp_MetaUrlDetay 'www.serhattas.net'

Ve çalıştırdığımızda aşağıdaki gibi sadece www.serhattas.net'in meta taglarını getirmektedir.

 Veritabanında ki işlemleri bitirdiğimize göre artık Web Servisimizi tasarlamamız gerekmektedir.Servisin yapısı , çalıştırıldığında hangi sitenin bilgileri isteniyorsa o sitenin adını almalı ve geriye tag'larını döndürüp servisten gelen değerleri meta tag olarak eklememiz gerekmektedir.Xml Web Servisimizin yapısı aşağıdaki gibidir.

[code:c#] 

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Xml.Linq;
using System.Collections.Generic;
using System.Data.SqlClient;

namespace DynamicMetaTagServices
{
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [ToolboxItem(false)]
    public class SRTMetaTag : System.Web.Services.WebService
    {
        [WebMethod]
        public List<MetaYonetim> MetaTagGetir(object url)
        {
            List<MetaYonetim> _metalar = new List<MetaYonetim>();
            SqlConnection con = new SqlConnection("data source=localhost; initial catalog=MetaIslemler; integrated security=true");
            SqlCommand cmd = new SqlCommand("sp_MetaUrlDetay", con);
            cmd.Parameters.Add("@siteAdres", SqlDbType.NVarChar, 50).Value = url;
            cmd.CommandType = CommandType.StoredProcedure;
            con.Open();
            SqlDataReader dr = cmd.ExecuteReader();
            while (dr.Read())
            {
                MetaYonetim meta = new MetaYonetim { Isim = dr[0], Meta = dr[1], MetaTip = dr[2], Deger = dr[3] };
                _metalar.Add(meta);
            }
            dr.Close(); cmd.Parameters.Clear(); con.Close();
            return _metalar;
        }
    }

    public class MetaYonetim
    {
        public object Isim { get; set; }
        public object Meta { get; set; }
        public object MetaTip { get; set; }
        public object Deger { get; set; }
    }
}

  [/code]

Servisten geriye MetaYonetim tipinden bir custom tip dönmektedir.Bunlar bizim meta bilgilerimizdir.Property'lerin bilgileri ise;
Isim : Sitemizin adı adı
Meta : Meta adımızı .Örnek : name
MetaTip : Metamızın türü.Örnek : copyright, country,keywords
Deger : Metamızın content'i yanı taşıyacağı değerdir

Artık bu servisten yararlanabilmek için Solution'a MetaTagWeb adında yeni bir web projesi ekledikten sonra Web Reference olarak da yazdığımız web servisini gösteriyoruz ve görünüm aşağıdaki gibi olacaktır  bu işlemden sonra.

Web servisimizide eklediğimize göre artık Web sitemizi  tasarlayabiliriz.Ve sayfamız yüklendiği anda da veritabanımıza gidip belirtmiş olduğumuz siteye ait olan meta tag'ları çekip sitemize ekleyeceğiz.Aşağıda sayfamızın içerisinde servisimizi çağırmadan önceki html kodlarını görüyoruz.Ve baktığımızda herhangi bir meta tag eklenmemiş durumda.

Web servisi eklemiş olduğumuz sayfamızın Page Load'ına servisimizden dönen meta tag'ları ekliyoruz artık aşağıdaki gibi.

[code:c#] 

    protected void Page_Load(object sender, EventArgs e)
    {
        SRTMetaService.SRTMetaTag srt = new SRTMetaService.SRTMetaTag();
        SRTMetaService.MetaYonetim[] gelenMetaTaglar = srt.MetaTagGetir("www.serhattas.net");
        foreach (SRTMetaService.MetaYonetim meta in gelenMetaTaglar)
        {
            HtmlMeta metaHtml = new HtmlMeta();
            metaHtml.Attributes.Add(meta.Meta.ToString(), meta.MetaTip.ToString());
            metaHtml.Attributes.Add("content", meta.Deger.ToString());
            Page.Header.Controls.Add(metaHtml);
        }
    }

[/code]

Görüldüğü gibi servisimizden gelen  değerleri HtmlMeta tipinden yaratmış olduğumuz nesnemizin içerisine ekliyor.Bu HtmlMeta tipinden değerimizi aslında bizim HTML tarafında ki meta tag'ımızı temsil etmektedi.Ve yarattığımız bu meta tag'ı Sayfamızın başlık kısmınada ekleyerek dinamik meta tag ekleme işlemini gerçekleştirmiş oluyoruz.

Ve böylecede elimizde bulunan birden fazla web sitesi için teker teker meta tag eklemek yerine ASP.NET projelerimizde bu işlemleri dinamik olarak gerçekleştirebiliriz.

Örnekte kullanılan projeyi ve veritabanını indirmek için tıklayınız.

Faydalı olması dileğiyle... İyi çalışmalar =)

Serhat TAŞ

2 kişi tarafından 4.0 olarak değerlendirildi

  • Currently 4/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Etiketler: , , ,

ASP.NET

Yorumlar

Yorum ekle


(Gravatar simgesini gösterecek)  

biuquote
  • Yorum
  • Canlı önizleme
Loading



Powered by BlogEngine.NET 1.4.5.0
Bu tema Mads Kristensen tarafından yapılmıştır ve Türkçeleştirilmesi Blog Engine Türkiye ekibi tarafından yapılmıştır.

Son Yorumlar

Comment RSS

Yasal Uyarı

Bu sitede sunulan tüm bilgi ve dökümanların kullanımından ve sitede yapılan kullanıcı yorumlarından (siyasi içerik,hakaret vb.) doğacak sorunlardan yazar sorumlu tutulamaz. 

İçeriğin kaynak belirtilmeden kopyalanması yasaktır !

SERHAT TAŞ

© Copyright 2010