Tag Archives: Sitecore

Using JQuery in custom fields

At the moment I’m creating a custom field for tagging content items. I prototyped my custom field in html using JQuery. But when I wanted to convert this to the actual custom field I ran into a problem. As you might know Sitecore uses the Prototype library for all of it’s javascript. And prototype uses the same dollar sign for all of its functions and variables as JQuery does. But JQuery provides a noConflict function where you can reassign the default $.

But then came the next challenge. I needed to use the noConflict function before all other javascript was called. Luckally I remembered that I have seen it before in other custom fields that are on the Shared Source environment. So I started browsing the source code of Alexey Rusakov’s project (Sitecore Fieldtypes) and I found the InjectScripts class which provides an option to add HTML to the section of the Content Editor. There I just added a reference to my JQuery library and off course calling the .noConflict funtion.


namespace Sitecore.SharedSource.Taxonomy
{
class AddScripts
{
public void Process(PipelineArgs args)
{
if (Sitecore.Context.ClientPage.IsEvent)
return;

HttpContext context = HttpContext.Current;
if (context == null)
return;

Page page = context.Handler as Page;
if (page == null)
return;

Assert.IsNotNull(page.Header, "Content Editor <head> tag is missing runat='value'");

string[] scripts = new[]
{
"/sitecore modules/Shell/Taxonomy/jquery-1.4.1.min.js"
};

foreach (string script in scripts)
{
page.Header.Controls.Add(new LiteralControl("<script type='text/javascript' language='javascript' src='{0}'></script>".FormatWith(script)));
page.Header.Controls.Add(new LiteralControl("<script type=\"text/javascript\">$.noConflict();</script>"));
}
}

}
}

So now I can call my JQuery by using “jQuery” in stead of “$” and the field works.

In my opinion this is just an example of how the Shared Source environment can help you. So if you have created a module, field or any thing else please put it on the Shared Source environment so others can benefit from it.

Restricting FieldEditor to specific template based items

In Sitecore 6.2 it is possible to integrate FieldEditors. These are command which enables users edit item settings when they work in the page editor. Personally I think it is a great option when you want editors to only work within the Page Editor, and still let them edit settings.
For the blog module that I created I implemented two FieldEditorCommands which let the user edit the blog and entry settings. When you use the default implementation as described in one of the cookbooks users can always click on the ribbon button regarding if the fields are on the currentitem. When those field don not exist on that item, they just get a empty popup.
I decided to restrict the option only to items which are based on a certain template. You can do this the following way:
You’ll need to override the Execute method in the your class (which overrides from Sitecore.Shell.Applications.WebEdit.Commands.FieldEditorCommand).

Then you isolate the function Context.ClientPage.Start in for instance an if statement.

Example:

if (context.Items[0].TemplateID == new ID(Settings.Default.EntryTemplateID))
{
Context.ClientPage.Start(this, "StartFieldEditor", args);
}
else
{
Context.ClientPage.ClientResponse.Alert("Please select an entry first");
}

If anyone else has a better way to get the same results please let me know.

Creating a Item Editor

For a blog module that I am developing I wanted to create an custom item editor. As you might know those are the “tabs” in the Content Editor.

1. Create a aspx file for the item editor user interface.
2. Select the core database in the desktop mode
3. Open the Content Editor and go to the following path /Sitecore/Content/Applications/Content Editor/Editors/Items.
4. You can create an item editor using the /Sitecore Client/Content Editor/Editor data template.
5. You can give your item editor a name using the header field in the data section.
6. In the icon field you can enter a path to the icon.
7. In the url field you need to fill in the url to the aspx file created in step 1
8. Save the item.
9. Switch back to the master database.


Read more

New search for SDN

I just noticed that Sitecore has greatly improved their search on SDN. You can now search through SDN, the shared source and Sitecore blogs.You even can filter your results by sdn sections, collections and datatypes.

sdn-search

Only minor is that I can’t find a list of blogs they included in the search, so for that I will use my own search.

Maximum number of Sitecore query items

Last week I had some problems with an Sitecore Query. It didn’t show more than an fixed number of items. After some hard thinking I rembered that there is a web.config key called Query.MaxItem which, you might guessed it, controls the maximum number of results of an Sitecore Query.