Anasayfa RSS Email

DotnetBlogEngine > Subtext Geçişi - WordPress Qwilm theme customization

Subtext ile ilk yazımı yazıyorum. Sitemi dotnetblogengine'den subtext'e geçirirken bir çok detay ile uğraşmak zorunda kaldım, databaseden yaptım. Örneğin dotnetblogengine <tag> elementlerini ekliyordu export ettiği blogml dosyasına. Ancak subtext blogml schemasına sıkı sıkıya bağımlı olduğu için <tag> ları almıyordu. (BlogML schemasında <tag> elementi tanımlı değil!!)

Bunun için önce export edilen xml'i okuyup, tag elementlerini category elementine çeviren hızlı ve kirli olarak nitelendirilebilecek bir araç hazırladım. Örnek kod aşağıda.

private void button1_Click(object sender, EventArgs e)
{
Dictionary<string, Guid> tags = new Dictionary<string, Guid>();

XmlDocument d = new XmlDocument();
d.Load("test.xml");
XmlNamespaceManager mgr = new XmlNamespaceManager(d.NameTable);
mgr.AddNamespace("b", "http://www.blogml.com/2006/09/BlogML");

XmlNodeList nodelist = d.SelectNodes("/b:blog/b:posts/b:post[b:tags/b:tag/@ref]", mgr);

foreach (XmlNode postElement in nodelist)
{
XmlNodeList tagElements = postElement.SelectNodes("b:tags/b:tag", mgr);
List<XmlNode> newCatNodes = new List<XmlNode>();
foreach (XmlNode tagElement in tagElements)
{
string tagName = tagElement.Attributes["ref"].Value;
if (!tags.Keys.Contains<string>(tagName))
{
tags.Add(tagName, Guid.NewGuid());
}
newCatNodes.Add(d.CreateElement("category", mgr.LookupNamespace("b")));
newCatNodes[newCatNodes.Count - 1].Attributes.Append(d.CreateAttribute("ref")).Value = tags[tagName].ToString();
}
//bu post altında ki taglar bulundu
if (tagElements.Count > 0)
{
XmlNodeList catNodes = postElement.SelectNodes("b:categories", mgr);
XmlNode catNode;
if (catNodes == null || catNodes.Count == 0)
{
catNode = postElement.AppendChild(d.CreateElement("categories", mgr.LookupNamespace("b")));
}
else
{
catNode = catNodes[0];
}
foreach (XmlNode newNode in newCatNodes)
{
catNode.AppendChild(newNode);
}

}


}

//save all tags as a master category
XmlNodeList mainCatNodes = d.SelectNodes("/b:blog/b:categories", mgr);
XmlNode mainCatNode = null;
if (mainCatNodes == null || mainCatNodes.Count == 0)
{
mainCatNode = d.SelectSingleNode("/b:blog", mgr).InsertBefore(
d.CreateElement("categories", mgr.LookupNamespace("b")),
d.SelectSingleNode("/b:blog/b:posts", mgr)
);

}
else
{
mainCatNode = mainCatNodes[0];
}
foreach (var tagItem in tags)
{
XmlNode category = d.CreateElement("category", mgr.LookupNamespace("b"));
XmlNode catTitle = d.CreateElement("title", mgr.LookupNamespace("b"));
category.Attributes.Append(d.CreateAttribute("id")).Value = tagItem.Value.ToString();
catTitle.InnerText = ".." + tagItem.Key;
category.AppendChild(catTitle);
mainCatNode.AppendChild(category);
}

d.Save("test.edited.xml");
}



 BlogML çıktısı dokumanda yer alan ve daha önceki blog sistemin olan dotnetblogengine de tag olarak yer alan kayıtları category'e çevirdim ve postları bunlarla ilişkilendirdim.

Bunun akabinde post metinleri içindeki picture handlerlerı find and replace ile değiştirerek çözdüm.

Subtext blog sisteminde de tema desteği var. Çeşitli seçenekler indirilen paket içinde yer almakta ancak http://www.subtextskins.com/ adresinden farklı temalara erişilebiliyor. Ben WordPress temaları içinde yer alan şu an görmekte olduğunuz qwilm temasını kullanmayı istediğim için bir süre de bununla uğraşarak bu temayı subtext'e uyarladım. (Henüz tüm styling işlemleri bitmiş de sayılmaz. Daha çok ince ayar/temizlik var.)

@ Sunday, September 13, 2009 5:56 PM | [ blog dotnetblogengine subtext ]

Comments

No comments posted yet.

Post Comment

Title *
Name *
Email
Url
Comment *  
Please add 2 and 7 and type the answer here:
Web Statistics