为BlogEngine的分类增加了自定义Url别名功能

发布于:
分类: Microsoft.Net Tagged
//修改代码xxxxx:
//BlogEngine.Core.Category.cs

private string _Title;
/// <summary>
/// Gets or sets the Title or the object.
/// </summary>
public string Title
{
    get { return _Title; }
    set
    {
        if (_Title != value) MarkChanged("Title");
        _Title = value;
    }
}
//后添加:
private string _Slug;
/// <summary>
/// Gets or sets the Slug or the object.
/// </summary>
public string Slug
{
    get { return _Slug; }
    set
    {
        if (_Slug != value) MarkChanged("Slug");
        _Slug = value;
    }
}
public Category(string title, string description,string slug)
{
    this.Id = Guid.NewGuid();
    this._Title = title;
    this._Description = description;
    this._Slug = slug;
    this.Parent = null;
}

//修改BlogEngine.Core.Providers.Categories.cs 的
//public override void InsertCategory(Category category),
//public override void UpdateCategory(Category category),
//public override void DeleteCategory(Category category)这些方法中作相应的修改

foreach (Category cat in categories)
{
    writer.WriteStartElement("category");
    writer.WriteAttributeString("id", cat.Id.ToString());
    writer.WriteAttributeString("description", cat.Description);
    writer.WriteAttributeString("parent", cat.Parent.ToString());
    writer.WriteAttributeString("slug", cat.Slug.ToString());//新增加的Url别名
    writer.WriteValue(cat.Title);
    writer.WriteEndElement();
    cat.MarkOld();
}

 

//修改public override List<Category> FillCategories()方法:
//在              
category.Id = new Guid(node.Attributes["id"].InnerText);
category.Title = node.InnerText;
//后添加
if (node.Attributes["slug"] != null)
    category.Slug = node.Attributes["slug"].InnerText;
else
    category.Slug = string.Empty;

 

//修改BlogEngine.Core.Web.HttpModules.UrlRewrite.cs中的private static void RewriteCategory(HttpContext context, string url)
private static void RewriteCategory(HttpContext context, string url)
{
    string title = ExtractTitle(context, url);
    foreach (Category cat in Category.Categories)
    {
        //string legalTitle = Utils.RemoveIllegalCharacters(cat.Title).ToLowerInvariant();
        string legalTitle = Utils.RemoveIllegalCharacters(cat.Slug).ToLowerInvariant();
        if (title.Equals(legalTitle, StringComparison.OrdinalIgnoreCase))
        {
            context.RewritePath(Utils.RelativeWebRoot + "default.aspx?id=" + cat.Id.ToString() + GetQueryString(context), false);
            break;
        }
    }
}

 

//修改BlogEngine.Web/App_Code/Controls/CategoryList.cs中private HtmlGenericControl BindCategories()这个方法
//129行开始:
    HtmlAnchor anc = new HtmlAnchor();
    //anc.HRef = Utils.RelativeWebRoot + "category/" + Utils.RemoveIllegalCharacters(key) + BlogSettings.Instance.FileExtension;
                anc.HRef = Utils.RelativeWebRoot + "category/" + Utils.RemoveIllegalCharacters(GetSlug(new Guid(dic[key].ToString()))) + BlogSettings.Instance.FileExtension;
    anc.InnerHtml = HttpUtility.HtmlEncode(key) + postCount;
    anc.Title = "Category: " + key;

 

修改BlogEngine.Web/admin/pages/Categories.aspx
在"<asp:TextBox runat="Server" ID="txtNewCategory" Width="200" /><br />"后添加:
    <asp:Label ID="lblNewSlug" runat="server" AssociatedControlID="txtNewSlug" Text="Slug" /><br />
    <asp:TextBox runat="Server" ID="txtNewSlug" Width="200" /><br />


在"
           <asp:TemplateField HeaderText="<%$ Resources:labels, name %>">
                <ItemTemplate>
                    <%# Server.HtmlEncode(Eval("title").ToString()) %>
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:TextBox runat="server" ID="txtTitle" Text='<%# Eval("title") %>' />
                </EditItemTemplate>
            </asp:TemplateField>
"后添加:
            <asp:TemplateField HeaderText="Slug">
                <ItemTemplate>
                    <%# Server.HtmlEncode(Eval("slug").ToString())%>
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:TextBox runat="server" ID="txtSlug" Text='<%# Eval("slug") %>' />
                </EditItemTemplate>
            </asp:TemplateField>

 

//修改BlogEngine.Web/admin/pages/Categories.aspx.cs中 void btnAdd_Click(object sender, EventArgs e)这个方法
//将Category cat = new Category(txtNewCategory.Text, description);改成
string slug = txtNewSlug.Text;
            if (slug.Length > 255)
                slug = slug.Substring(0, 255);
Category cat = new Category(txtNewCategory.Text, description, slug);

 

//修改 void grid_RowUpdating(object sender, GridViewUpdateEventArgs e)方法:
 
 Guid id = (Guid)grid.DataKeys[e.RowIndex].Value;
  TextBox textboxTitle = (TextBox)grid.Rows[e.RowIndex].FindControl("txtTitle");
  TextBox textboxSlug = (TextBox)grid.Rows[e.RowIndex].FindControl("txtSlug");//新增加的
 TextBox textboxDescription = (TextBox)grid.Rows[e.RowIndex].FindControl("txtDescription");
  DropDownList ddlParent = (DropDownList)grid.Rows[e.RowIndex].FindControl("ddlParent");
  Category cat = Category.GetCategory(id);
  cat.Title = textboxTitle.Text;
  cat.Slug = textboxSlug.Text;//新增加的
  cat.Description = textboxDescription.Text;
  if (ddlParent.SelectedValue == "0")
   cat.Parent = null;
  else
   cat.Parent = new Guid(ddlParent.SelectedValue);
  cat.Save();

  Response.Redirect(Request.RawUrl);

到这里就修改完成了,改的东西有点多,比较烦..

留下评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注