14 Nisan 2010 Çarşamba

DotNetNuke'de Friendly URL ve Türkçe Karakter Sorunu

Not defterimde DotNetNuke ile ilgili çalışmalarımdan sık sık bahsediyor ve zaman zaman ziyaretçilerimden geri bildirim alıyorum. Geçtiğimiz günlerde de bir ziyaretçim iletişim formundan bana ulaşarak sayfa adında kullanılan Türkçe karakterlerin hem navigasyon menüsünde hem de sayfa adresinde (url) sıkıntı yarattığını ve bu sorunu nasıl giderebileceğini öğrenmek istediğini belirtti.

Detaylara çok fazla girmeden yapılabileceklerden bahsedelim:

DotNetNuke varsayılan olarak TabName (sayfa adı) alanına girilen veriyi değiştirmeden TabPath alanına da (\\ ön eki (prefix) ile) kayıt ediyor.

Eğer sayfa adında Türkçe karakter varsa, bu durum bazı arama motorlarının (örn. Google ve Yahoo) sitenizi ziyaret eden örümceklerinin tuhaf bir şekilde Olay Günlüğü'ne hata logları bırakmasını da beraberinde getiriyor.

Özetle hiç de istenilmeyen bir durum gerçekleşiyor. Düşünsenize, sitenize her gün giren robotlar giriş yaptıkları (Türkçe karakter içeren) her sayfa için Event Viewer'a bir işaret bırakıp ayrılıyor.

Bir programcı persfektifinden baktığımızda, DNN'in yapı olarak son kullanıcı tarafından düzenlenebilen bir TabPath (sayfa lokasyonu) sütununa sahip olması gerekiyor. Bu özellikle ilgili Support Tracker'a daha önceden açtığım kayıtlara göz atabilirsiniz.

Bu konuyu ayrıca Documents Modülü'nü geliştirirken birlikte çalıştığımız Mitch Sellers ve Yerelleştirme konusunda zaman zaman fikir alışverişi yaptığımız Sebastian Leupold ile de görüştük. Her ikisi de bu dezavantajın yakın gelecekte düzeltileceğini düşünüyor.

Peki sorunu çözmek için ne yapmalıyız?

Eğer oluşturduğunuz sayfaya ait seçenekleri (sayfa adı, açıklama, anahtar kelimeler, ana sayfa, sayfa yetkileri, tema vb) bir daha asla düzenlemeyecekseniz, veritabanına doğrudan müdahale edebilirsiniz.

Bu müdahaleyi yapmak için SQL Server Management Studio'yu (eğer direkt erişim imkanına sahipseniz), ya da barındırma hizmetini sağlayan firmanın veritabanı yönetim panelini kullanabilirsiniz.

Yapacağınız işlem, Tabs tablosunda ilgili sayfaya ait TabPath değerini değiştirmek. Örneğin, sayfa adımız İletişim olsun. Arama motorlarına ve ziyaretçilere sayfayı sevdirmek için tabpath girdisini iletisim olarak ayarlayabilirsiniz.

İşi biraz daha ilginç hale getirmeye ne dersiniz?Tabpath sütununda ilgili satıra isterseniz sayfa adından tamamen bağımsız bir değer de girebilirsiniz. Örn. sayfa adında kullanılan İletişim yerine iletisim-formu girdisini tabpath'e ekleyebilirsiniz.

Sonuçları almak için ne yapmalı?Elbette bu yöntemi kullandığınızda, sonuçları görebilmek için uygulamayı Host > Host Ayarları menüsünden yeniden başlatmanız, ya da sistemin kök dizininde yer alan web.config dosyasında ufak bir hileye (dosyaya boş bir satır eklemek) başvurmanız gerekecek.

Unutmadan!

Tekrar belirtmekte fayda var. Eğer tabpath yöntemini kullanacaksanız, sayfa ayarlarını güncellemek zorunda kaldığınızda tabpath değeri yeniden eski değerine (ya da o an sayfa adına hangi değeri yazdıysanız o değere) dönecek. Eğer sorun değil, ben uğraşmayı severim derseniz, tekrar bahsettiğim yöntemi uygulayabilirsiniz.

Alternatif olarak pazarda sunulan ücretli ve ücretsiz modülleri kullanabilirsiniz. Bunlardan bir tanesi Bruce Chapman tarafından geliştirilen iFinity URL Master (ücretli) modülü. Daha önceki denemelerimde başarılı sonuçlar aldığım bu modülü (yukarıdaki senaryo size uymuyorsa) alternatif olarak önerebilirim.