hi
This is the code i added for events indexing. But not working. I added all this cs files inside App_Code - > EventsIndexProvider folder
//EventIndexerInfo.cs
using System.Collections;
using System.Text;
using Telerik.Framework.Search;
using System;
namespace EventIndex
{
/// <summary>
/// Summary description for CustomIndexerInfo
/// </summary>
public class EventIndexerInfo : IIndexerInfo
{
#region IIndexerInfo Members
public string Culture
{
get { return string.Empty; }
}
public Guid ItemID
{
get { return Guid.Empty; }
}
#endregion
public string ResolveIndexPath()
{
return Path;
}
private string _url;
private Hashtable _metaFields;
private string _content;
public EventIndexerInfo(string url, Hashtable metaFields, string content)
{
this._url = url;
this._metaFields = metaFields;
this._content = content;
}
protected string GetMetaData()
{
StringBuilder sb = new StringBuilder();
IDictionaryEnumerator meta = _metaFields.GetEnumerator();
while (meta.MoveNext())
{
sb.AppendLine();
sb.Append("<");
sb.Append(meta.Key);
sb.Append(">");
sb.Append(meta.Value.ToString());
sb.Append("</");
sb.Append(meta.Key);
sb.Append(">");
}
return sb.ToString();
}
#region IIndexerInfo Members
public Encoding Encoding
{
get { return Encoding.UTF8; }
}
public byte[] GetData()
{
string text = (string)this._content;
//If we have any meta data add it to the index content
if (this._metaFields.Count > 0)
{
text += this.GetMetaData();
}
return this.Encoding.GetBytes(text);
}
public string MimeType
{
get { return "text/html"; }
}
public string Path
{
get { return this._url; }
}
#endregion
}
}
//EventIndexProvider.cs
using System;
using System.Collections;
using System.Collections.Generic;
using Telerik.Framework.Search;
using Telerik.Cms.Engine;
using Telerik.Events;
using System.Configuration;
namespace EventIndex
{
/// <summary>
/// Summary description for CustomIndexProvider
/// </summary>
public class EventIndexProvider : IIndexingServiceClient
{
/// <summary>
/// Defines the name of the provider. This name is used to mange providers within Indexing Service.
/// </summary>
public string Name
{
get
{
return "EventIndexProvider";
}
}
/// <summary>
/// Provides detailed description of the client
/// </summary>
public string Description
{
get
{
return "Provides indexing for events.";
}
}
/// <summary>
/// Meta fields for this provider
/// </summary>
protected string[] MetaFields
{
get
{
return new string[]{
"Title"
};
}
}
public IIndexerInfo[] GetContentToIndex()
{
// get current events
EventsManager mgr = new EventsManager("Events");
IMetaSearchInfo[] filters = new IMetaSearchInfo[2];
filters[0] = new MetaSearchInfo(MetaValueTypes.DateTime, "Expiration_Date", DateTime.Now, SearchCondition.GreaterOrEqual);
filters[1] = new MetaSearchInfo(MetaValueTypes.DateTime, "Publication_Date", DateTime.Now, SearchCondition.LessOrEqual);
IList events = mgr.Content.GetContent("Event_Start ASC", filters);
List<IIndexerInfo> list = new List<IIndexerInfo>();
string urlRequest = "http://" + System.Web.HttpContext.Current.Request.Url.Host;
foreach (IContent ev in events)
{
Hashtable metaFields = new Hashtable();
foreach (string key in MetaFields)
{
metaFields.Add(key, "");
}
metaFields["Title"] = ev.GetMetaData("Title");
list.Add(
new EventIndexerInfo(
urlRequest + ConfigurationManager.AppSettings["EventsDetailsPath"].ToString() + ev.UrlWithExtension,
metaFields,
ev.Content.ToString())
);
}
return list.ToArray();
}
public string[] GetUrlsToIndex()
{
// You must use FULL URLs
var urls = new string[]
{
"[url]/news-details-page.aspx"
};
return urls;
}
public event EventHandler<IndexEventArgs> Index;
public void Initialize(System.Collections.Generic.IDictionary<string, string> settings)
{
}
}
}
//SettingsControl.cs
using System.Collections.Generic;
using System.Web.UI;
using System.Web.UI.WebControls;
using Telerik.Cms.Web.UI;
using Telerik.Framework.Search;
namespace EventIndex
{
public class SettingsControl : CompositeControl, ISettingsControl
{
#region Properties
public string ControlTemplatePath
{
get
{
object o = this.ViewState["ControlTemplatePath"];
//if (o == null)
// return "~/home/event-details-page.aspx";
return (string)o;
}
set
{
this.ViewState["ControlTemplatePath"] = value;
}
}
public IDictionary<string, string> GetSettings()
{
this.settings = new Dictionary<string, string>();
return this.settings;
}
#endregion
#region Methods
protected override void CreateChildControls()
{
this.ctrlContainer = new Container(this);
this.controlTemplate = new DefaultTemplate(this.settings);
this.controlTemplate.InstantiateIn(this.ctrlContainer);
this.Controls.Add(this.ctrlContainer);
}
public void InitSettings(IDictionary<string, string> settings)
{
this.settings = settings;
}
#endregion
#region Default Template
protected class DefaultTemplate : ITemplate
{
public DefaultTemplate(IDictionary<string, string> settings)
{
this.settings = settings;
}
public void InstantiateIn(Control container)
{
}
private IDictionary<string, string> settings;
}
#endregion
#region Container
protected class Container : GenericContainer<SettingsControl>
{
public Container(SettingsControl owner)
: base
(owner)
{
}
}
#endregion
#region Private Fields
private IDictionary<string, string> settings;
private Container ctrlContainer;
private ITemplate controlTemplate;
#endregion
}
}
//ViewControl.cs
using System.Collections.Generic;
using System.Web.UI;
using System.Web.UI.WebControls;
using Telerik.Cms.Web.UI;
using Telerik.Framework.Search;
using Telerik.Framework.Web;
namespace EventIndex
{
public class ViewControl : CompositeControl, ISearchViewControl
{
#region Properties
public string TemplatePath
{
get
{
object o = this.ViewState["TemplatePath"];
//if (o == null)
// return "~/home/event-details-page.aspx";
return (string)o;
}
set
{
this.ViewState["TemplatePath"] = value;
}
}
public ITemplate ItemTemplate
{
get
{
if (this.itemTemplate == null)
this.itemTemplate = ControlUtils.GetTemplate<DefaultTemplate>(this.TemplatePath);
return this.itemTemplate;
}
}
#endregion
#region Methods
protected override void CreateChildControls()
{
this.container = new ControlContainer(this);
this.ItemTemplate.InstantiateIn(this.container);
this.Controls.Add(this.container);
}
#endregion
#region Private Fields
private ControlContainer container;
private ITemplate itemTemplate;
private IDictionary<string, string> settings;
#endregion
#region Default Template
protected class DefaultTemplate : ITemplate
{
public void InstantiateIn(Control container)
{
}
}
#endregion
#region Container
protected class ControlContainer : GenericContainer<ViewControl>
{
public ControlContainer(ViewControl owner)
: base(owner)
{
}
}
#endregion
#region ISearchViewControl Members
public void InitializeSettings(IDictionary<string, string> settings)
{
this.settings = settings;
}
#endregion
}
}
//web.config
<indexClients>
<add name="EventIndex" type="EventIndex.EventIndexProvider, App_Code" settingsControl="EventIndex.SettingsControl" viewSettingsControl="EventIndex.ViewControl" description="Provides indexing for events." />
<add name="PageIndex" type="Telerik.Cms.Search.PageIndexProvider, Telerik.Cms" settingsControl="Telerik.Cms.Web.UI.PageIndexSettings, Telerik.Cms" viewSettingsControl="Telerik.Cms.Web.UI.SearchViewControl, Telerik.Cms" description="Provides indexing services for CMS Pages."/>
</indexClients>
Please tell where i am wrong?
Thanks
G.GopalRaman