Made a joblisting about a month ago, the site I made it for is a globalized site with three different languages (so far). Every work ad needs a start- and a stop-publish date, and the work ad is first created in one language, then translated by some other to other languages.

When I checked around the site a week ago i noticed that the joblisting had different sorting depending on what language I had choosen. So I started my research and noticed that the start- and stop publish was only set in the master language, and the other pages had a different start publish and no stop publish… Of course, you need to set publish dates on all languages. This was not an option..

Then I remembered that you can prepopulate data in the edit-fileds, but how? Started thinking again.. global.asax.. events.. hmm.. advanced developing with episerver, that’s right. Found my course material and checked a random page in it, and there it was! So this is how I solved it:

In Global.asax

protected void Application_Start(Object sender, EventArgs e)
{
DataFactory.Instance.LoadedDefaultPageData += new PageEventHandler(Instance_LoadedDefaultPageData);
}

protected void Instance_LoadedDefaultPageData(object sender, PageEventArgs e)
{
if (e.Page.PageTypeID == Utils.Settings.PageTypeJobitem && e.Page != null && e.Page.PageLink != PageReference.EmptyReference)
{
PageDataCollection languages = DataFactory.Instance.GetLanguageBranches(e.Page.PageLink);
if (languages.Count > 0)
{
e.Page.StartPublish = languages[0].StartPublish;
e.Page.StopPublish = languages[0].StopPublish;
}
}
}

Tags: , , ,

Had some trouble loading a vitrual file containing spaces.

The problem was apperently that some characters were urlencoded, a simple Server.UrlDecode(CurrentPage["DocumentPath"]) solved the problem. :)

Tags: , ,

I’ve had some problem to link to a page to another language then the current language.
Even though I have a PageData-object with anouther languagebranch, it stills makes a link to the current language.

My own solution, building a url by CurrentPage.StaticLink and adding epslanguage=langID, works but it’s not how I want to do it.

So today I found the EPiServer.UriSupport class. In that class you have EPiServer.UriSupport.AddLanguageSelection(pd.LinkURL, pd.LanguageID), just what I’ve been looking for.

Tags: , , , ,

VirtualFile file = System.Web.Hosting.HostingEnvironment.VirtualPathProvider.GetFile( CurrentPage["FilePath"].ToString() );
UnifiedFile f = file as UnifiedFile;
return f.Length / 1024 + ” kb”;

Tags: , , ,

The new properties AppSettings and AppSettingsMultiple in EPiServer CMS 5 is a pretty nice feature, but when yesterday when I tried to implement it, I had a hard time finding out how to do it. But finally I did.

First of all, in edit mode, AppSettings will create a DropDown and AppSettingsMultiple will create a CheckBoxList.

To create you AppSettings property you have to define some values in <appSettings> in your Web.Config, i did like this:
<add key=”PropertyCountries” value=”Czech republic;CR|Sweden;SV|United Kingdom;UK” />

Now you just have to add a Property to your pagetype with the name PropertyCountries and you are done.

When you use the AppSettingsMultiple the CurrentPage.Property["PropertyCountries"].Value will return a comma separated string with the selected values, like “SV,UK” and you just have to do a simple .Split(‘,’) and you have a string array.

new FilterPropertySort(“PageName”, FilterSortDirection.Descending).Filter(children);

Tags: , , ,

In EPiServer.Filters there are some useful filters, like FilterPublished, FilterAccess etc.

To use these filters, just do like this:

new FilterPublished().Filter(somePageDataCollection);

and it’s done. :)

Tags: , , ,

Made my first customized property today, and because I loved it so much in 4.6, the ice breaker was a DropDown property that takes values from the help-text.

Values in help text can be typed in two ways:
“Shown text:value” or just “value” eg. “value1;Shown text:value2″

[Serializable]
[PageDefinitionTypePlugIn]
class PropertyDropDown : EPiServer.Core.PropertyString
{

public override EPiServer.Core.PropertyData ParseToObject(string value)
{
PropertyDropDown prop = new PropertyDropDown();
prop.String = value;
return prop;
}

public override EPiServer.Core.IPropertyControl CreatePropertyControl()
{
// Create an instance of MyCustomPropertyControl that is used
// for displaying the property.
return new PropertyDropDownControl();
}
}

class PropertyDropDownControl : EPiServer.Web.PropertyControls.PropertyDataControl
{
DropDownList dd;

public PropertyDropDown PropertyDropDown
{
get
{
return PropertyData as PropertyDropDown;

}
}

public override void CreateEditControls()
{
dd = new DropDownList();
this.ApplyControlAttributes(this.dd);
Controls.Add(dd);
this.SetupEditControls();
}

public override void CreateOnPageEditControls()
{
dd = new DropDownList();
this.ApplyControlAttributes(this.dd);
Controls.Add(dd);
this.SetupEditControls();
}

protected override void SetupEditControls()
{
dd.Items.Clear();
string[] values = PropertyDropDown.TranslateDescription().Split(';');
foreach (string value in values)
{
ListItem li = new ListItem();
if (value.Contains(":"))
{
li.Text = value.Split(':')[0];
li.Value = value.Split(':')[1];
}
else
{
li.Text = value;
li.Value = value;
}

li.Selected = li.Value.Equals(PropertyDropDown.Value);
dd.Items.Add(li);
}

if (dd.Items.Count == 0)
dd.Items.Add(new ListItem("No values found", ""));
}

public override void ApplyEditChanges()
{
base.SetValue(this.dd.SelectedValue);
}

public override void ApplyOnPageEditChanges()
{
base.SetValue(this.dd.SelectedValue);
}
}
}

Tags: , , ,

Newer entries »