<rss xmlns:a10="http://www.w3.org/2005/Atom" version="2.0"><channel><title>Mark Graber's Posts</title><link>http://www.sitecoredevelopment.com/en/RSS/MarkGraber.aspx</link><description>Oasis Sitecore Development Blog</description><language>en</language><item><guid isPermaLink="false">{BF835571-9360-4832-8D26-3A8CA81BD8B8}</guid><link>http://www.sitecoredevelopment.com/en/MarkGraber/Sample-Code.aspx</link><title>Sample Code</title><description>
		&lt;p&gt;Today, I just wanted to share a few lines of code that have been useful in many situations. This introduces a few of the built-in Sitecore utility methods.&lt;/p&gt;
    &lt;p&gt;Here is the sample code:&lt;/p&gt;
    &lt;pre&gt;if (Sitecore.Data.ID.IsID(itemId)) {	Item item = Sitecore.Context.Database.GetItem(Sitecore.Data.ID.Parse(itemId));	strPageTitle = Sitecore.StringUtil.RemoveLineFeeds(item.Fields["Page Title"].Value);}&lt;/pre&gt;
    &lt;p&gt;Let's break it down:&lt;/p&gt;
    &lt;ul&gt;
      &lt;li&gt;Sitecore.Data.ID.IsID()&lt;br /&gt;This method takes in a string guid and returns true if it's a valid guid in Sitecore &lt;br /&gt;&lt;/li&gt;
      &lt;li&gt;Sitecore.Data.ID.Parse()&lt;br /&gt;This method takes in a string guid and returns a Sitecore ID object &lt;br /&gt;&lt;/li&gt;
      &lt;li&gt;Sitecore.Context.Database.GetItem()&lt;br /&gt;This method takes in a Sitecore ID object and returns a Sitecore Item object &lt;br /&gt;&lt;/li&gt;
      &lt;li&gt;Sitecore.StringUtil.RemoveLineFeeds()&lt;br /&gt;This method takes in a string and returns the same string with line breaks removed.  This is helpful if you are populating an HTML tag attribute or a line of JavaScript where line breaks would be invalid.&lt;/li&gt;
    &lt;/ul&gt;
    &lt;p&gt;
    &lt;/p&gt;</description><pubDate>Fri, 28 Oct 2011 16:13:00 -0400</pubDate></item><item><guid isPermaLink="false">{14BFB14F-3182-4123-BFC6-3A0599B696BF}</guid><link>http://www.sitecoredevelopment.com/en/MarkGraber/Lucene-Field-Type-Configuration.aspx</link><title>Lucene Field Type Configuration</title><description>
		&lt;p&gt;This topic is related to using Lucene with the Sitecore shared source module Advanced Database Crawler from Alex Shyba, &lt;a href="http://sitecoreblog.alexshyba.com/2010/11/sitecore-searcher-and-advanced-database.html"&gt;http://sitecoreblog.alexshyba.com/2010/11/sitecore-searcher-and-advanced-database.html&lt;/a&gt;.  My searches were not returning the expected results consistently when using the FieldValueSearchParam.  The search worked on some fields, but not others.  The FieldValueSearchParam allows you pass in a collection of fieldName, fieldValue pairs to search for values in specific fields.  This is a very powerful tool because it executes much faster than Sitecore queries.  After a number of test cases, I noticed that the fields there were not working were of field type, Droplist and AccountSelector.  Droplist is a built-in Sitecore field type that allows you to see a dropdown of values to select from, but it stores the raw value as plain text rather than a Guid like the Droplink field type.  The AccountSelector is a Sitecore shared source module that lets you select a user or multiple users from the Sitecore security database.  It stores the logins as plain text '|' delimited for multiple logins.  Since both were essentially single-line text values, the configuration you need to add is the same as the single-line text field type.  Add the following to your search config file and rebuilt the index.&lt;/p&gt;
    &lt;p&gt;&amp;lt;fieldTypes hint="raw:AddFieldTypes"&amp;gt;&lt;br /&gt;       …&lt;br /&gt;       &amp;lt;fieldType name="droplist" storageType="NO" indexType="TOKENIZED" vectorType="NO" boost="1f" /&amp;gt;&lt;br /&gt;       &amp;lt;fieldType name="accountselector" storageType="NO" indexType="TOKENIZED" vectorType="NO" boost="1f" /&amp;gt;&lt;br /&gt;       …&lt;br /&gt;&amp;lt;/fieldTypes&amp;gt;&lt;/p&gt;
    &lt;p&gt;Without these settings you can search for the items with the Full Text query, but not the Field search because the text from the Droplist and AccountSelector fields are added to the full text but not stored as the field level without this config change.&lt;br /&gt;&lt;/p&gt;</description><pubDate>Fri, 14 Oct 2011 07:46:00 -0400</pubDate></item><item><guid isPermaLink="false">{39155A20-286D-41CA-A89C-F5C9F935E1BA}</guid><link>http://www.sitecoredevelopment.com/en/MarkGraber/Sitecore-API-Docs.aspx</link><title>Sitecore API Docs</title><description>
		&lt;p&gt;Here are two links to Sitecore API docs.  I'm not sure what the version number represents, but I'm developing on Sitecore 6.0 through 6.5 and haven't found a class or method that is not listed.&lt;/p&gt;
    &lt;p&gt;
      &lt;a href="http://sdn.sitecore.net/doc/api%205.0/Sitecore.html" target="_blank"&gt;http://sdn.sitecore.net/doc/api%205.0/Sitecore.html&lt;/a&gt;
    &lt;/p&gt;
    &lt;p&gt;
      &lt;a href="http://sdn.sitecore.net/doc/api%205.1.1/Sitecore.html" target="_blank"&gt;http://sdn.sitecore.net/doc/api%205.1.1/Sitecore.html&lt;/a&gt;
    &lt;/p&gt;</description><pubDate>Wed, 05 Oct 2011 14:41:00 -0400</pubDate></item><item><guid isPermaLink="false">{0E17D03D-B7ED-4342-888C-0A22DC386F7F}</guid><link>http://www.sitecoredevelopment.com/en/MarkGraber/Sitecore-Utilities.aspx</link><title>Sitecore Utilities</title><description>
		&lt;p&gt;Here are some helpful methods in some of Sitecore's built-in utility classes.  There are many helpful utilities burried in the Sitecore API, but these are a few to explore.&lt;/p&gt;
    &lt;p&gt;Browser Detection&lt;/p&gt;
    &lt;p&gt;Sitecore.UIUtil.IsFirefox()&lt;br /&gt;Sitecore.UIUtil.IsIE(6)&lt;/p&gt;
    &lt;p&gt;String Utility&lt;/p&gt;
    &lt;p&gt;Sitecore.StringUtil.ExtractParameter()&lt;br /&gt;Sitecore.StringUtil.ArrayToString()&lt;/p&gt;
    &lt;p&gt;File Utility&lt;/p&gt;
    &lt;p&gt;Sitecore.IO.FileUtil.ZipFiles()&lt;/p&gt;
    &lt;p&gt;Getting Guid from Sitecore&lt;/p&gt;
    &lt;p&gt;Sitecore.ItemIDs.RootID&lt;br /&gt;Sitecore.ItemIDs.AnonymousUser&lt;br /&gt;Sitecore.ItemIDs.EveryoneRoleID&lt;/p&gt;</description><pubDate>Wed, 14 Sep 2011 14:22:00 -0400</pubDate></item><item><guid isPermaLink="false">{AD11EBF2-0E89-4294-AD4F-5E6B8FA5A2A1}</guid><link>http://www.sitecoredevelopment.com/en/MarkGraber/Subversion-to-FTP-Site-Release-Process.aspx</link><title>Subversion to FTP Site Release Process</title><description>
		&lt;p&gt;Subversion is our preferred tool for managing our source code revisions and merging code between development teams.  This article describes a way to leverage your Subversion revisions to release files to a hosting environment that may not allow you to run an update via SVN, but instead your only access point is through FTP site.&lt;/p&gt;
</description><pubDate>Fri, 24 Jun 2011 16:57:00 -0400</pubDate></item><item><guid isPermaLink="false">{35025CB8-92B7-4AEE-BC70-5530017BFE41}</guid><link>http://www.sitecoredevelopment.com/en/MarkGraber/Managing-CSS-Files-in-Sitecore.aspx</link><title>Managing CSS Files in Sitecore</title><description>
		&lt;p&gt;Sitecore is a content management system, but can it also be a web design management system?  The short answer is that you can design some solutions to provide flexibility for content management users to manipulate the the design via CSS files, allow them to manage and upload their own CSS files or make changes to the initial CSS files.&lt;/p&gt;
    &lt;p&gt;Read more for the configuration steps required to support CSS files as Sitecore Media Assets.&lt;/p&gt;</description><pubDate>Sun, 22 May 2011 13:41:00 -0400</pubDate></item><item><guid isPermaLink="false">{C62D61F3-E84A-4562-85A0-7CED5BD088E5}</guid><link>http://www.sitecoredevelopment.com/en/MarkGraber/Changes-to-FieldRenderer-When-Upgrading-from-Sitecore-6-2-to-6-3.aspx</link><title>Changes to FieldRenderer When Upgrading from Sitecore 6.2 to 6.3</title><description>
		&lt;p&gt;In addition to the following references to review and consider when upgrading from Sitecore 6.2 to 6.3, you should be aware of a small change to the FieldRenderer control.  Sitecore 6.3 removes new-line (\n) characters from Multi-Line Text fields so if your code is setup to use those new-line characters and replace them with &amp;lt;br /&amp;gt; tags or split on them to build an array of lines, you should get the raw value from the Value property on the Field collection instead of getting it from a FieldRenderer because the Value property will still include the new-line character.&lt;/p&gt;
    &lt;p&gt;Sitecore 6.3 Release Notes&lt;/p&gt;
    &lt;p&gt;
      &lt;a target="_blank" href="http://sdn.sitecore.net/SDN5/Products/Sitecore%20V5/Sitecore%20CMS%206/ReleaseNotes/ChangeLog/Release%20History%20SC63.aspx#631initial"&gt;http://sdn.sitecore.net/SDN5/Products/Sitecore%20V5/Sitecore%20CMS%206/ReleaseNotes/ChangeLog/Release%20History%20SC63.aspx#631initial&lt;/a&gt;
    &lt;/p&gt;
    &lt;p&gt;Introducing Sitecore 6.3 PDF Reference&lt;/p&gt;
    &lt;p&gt;
      &lt;a target="_blank" href="http://sdn.sitecore.net/Reference/Sitecore%206/Introducing%20SC63.aspx"&gt;http://sdn.sitecore.net/Reference/Sitecore%206/Introducing%20SC63.aspx&lt;/a&gt;
    &lt;/p&gt;</description><pubDate>Wed, 27 Apr 2011 14:47:00 -0400</pubDate></item><item><guid isPermaLink="false">{D7C74608-185D-48BE-AB3F-E20AD56BC14D}</guid><link>http://www.sitecoredevelopment.com/en/MarkGraber/Helpful-Admin-Pages-to-Secure-in-Production-Environments.aspx</link><title>Helpful Admin Pages to Secure in Production Environments</title><description>
		&lt;p&gt;The following URLs are very helpful admin pages, and they are not secured with password protection by default.  You should secure these in production environments.  I recommend securing your whole sitecore folder with IP restrictions in IIS because this is very quick and easy to setup.&lt;/p&gt;
        &lt;ol&gt;
      &lt;li&gt;/sitecore/admin/cache.aspx - lets you monitor the caches, sizes, and clear cache &lt;/li&gt;
      &lt;li&gt;/sitecore/admin/stats.aspx - lets you see the Sublayout Html caches to confirm if you Sublayout caching is working as expected &lt;/li&gt;
      &lt;li&gt;/sitecore/admin/showconfig.aspx - lets you see the working Sitecore config settings in case your not sure if there is a patch config in your App_Config/Include folder is overriding something in the Web.config file&lt;/li&gt;
    &lt;/ol&gt;</description><pubDate>Fri, 22 Apr 2011 12:20:00 -0400</pubDate></item><item><guid isPermaLink="false">{504A2AAB-7C91-4B0A-8925-EAA2C075008A}</guid><link>http://www.sitecoredevelopment.com/en/MarkGraber/Subversion-Tip-Simple-Rollback-to-Previous-Version.aspx</link><title>Subversion Tip - Simple Rollback to Previous Version</title><description>
		&lt;p&gt;Although this is not specifically a Sitecore topic, it is something that comes up often for us on our Sitecore projects because we almost always use Subversion to manage our code and configuration files.  In the case where you've made an update that you want to revert back and have it become the latest revision again, take the following steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;First, make sure the file you want to rollback is identical to the latest version checked in, and you can do this by running an Update on the file.  Then, right-click the file and select Diff.  It should return the identical message.  If not, you can deleted the file and get the latest.&lt;/li&gt;
&lt;li&gt;Now that you have the latest version of the file, right-click on the file you want to rollback and select TortoiseSVN&amp;gt;Show Log&lt;/li&gt;
&lt;li&gt;Right-click on the file in the bottom half of the window where it shows Action, Path, Copy from path, and Revision.  Select "Revert changes from this revision"
&lt;/li&gt;&lt;li&gt;It will prompt you with a message about reverse-merging the revision into your working copy.  Click Yes to the prompt.&lt;/li&gt;
&lt;li&gt;To confirm it matches the previous version, right-click on the file and select Diff with previous version.  You should get a prompt that the files are identical.&lt;/li&gt;
&lt;/ol&gt;</description><pubDate>Sat, 29 Jan 2011 14:09:00 -0500</pubDate></item><item><guid isPermaLink="false">{72BB5E0C-7122-4305-954E-CB41C635C73A}</guid><link>http://www.sitecoredevelopment.com/en/MarkGraber/Using-Akamai-Net-Storage-for-Sitecore-Media-Items.aspx</link><title>Using Akamai Net Storage for Sitecore Media Items</title><description>
		&lt;p&gt;This article provides some ideas on how to leverage an externally hosted Media Library, such as, Akamai NetStorage.  Click to view the full post.&lt;/p&gt;
</description><pubDate>Sun, 23 Jan 2011 09:45:00 -0500</pubDate></item><item><guid isPermaLink="false">{C2F93903-5CBF-4B97-BBA7-119B0027A72B}</guid><link>http://www.sitecoredevelopment.com/en/MarkGraber/Include-config-files.aspx</link><title>Include config files</title><description>
		&lt;p&gt;As Sitecore continues to move components out of the 2000+ line Web.config file, don't forget to sift through the config files in the App_Config/Include folder.  An example of this came up for me today with the Sitecore Ecommerce Module where a config file in the Include folder was overriding the Web.config setting.&lt;/p&gt;
    &lt;p&gt;Some of the important things to remember about these config files is that they can override settings that are in the Web.config file.  Here is the simple example from the Ecommerce Module.&lt;/p&gt;</description><pubDate>Wed, 19 Jan 2011 15:35:00 -0500</pubDate></item><item><guid isPermaLink="false">{66BC9EB0-5BB1-4A79-8E39-52E2A3975F59}</guid><link>http://www.sitecoredevelopment.com/en/MarkGraber/Sitecore-Announces-Better-Shared-Source-Support.aspx</link><title>Sitecore Announces Better Shared Source Support</title><description>
		&lt;p&gt;Here is a trackback to Jimmie Overby and the Sitecore Shared Source Blog.  The Shared Source Blog is a great way to read about new things happening with the shared source modules.  The shared source modules are great, and now even better with "Tested by Sitecore" assurance.  Here is a link to the full post:&lt;/p&gt;
    &lt;p&gt;
      &lt;a href="http://sharesitecore.wordpress.com/2011/01/14/announcing-the-better-shared-source-initiative/"&gt;http://sharesitecore.wordpress.com/2011/01/14/announcing-the-better-shared-source-initiative/&lt;/a&gt;
    &lt;/p&gt;</description><pubDate>Fri, 14 Jan 2011 10:39:00 -0500</pubDate></item><item><guid isPermaLink="false">{3793828D-6213-4A6A-A90E-62AD84E0612E}</guid><link>http://www.sitecoredevelopment.com/en/MarkGraber/Linking-to-Content-Editor.aspx</link><title>Linking to Content Editor</title><description>
		&lt;p&gt;Here is an easy way to link to the Sitecore Content Editor for your Custom Applications within the Sitecore Desktop.  I also recommend that you set the target of the link to _blank or a named target so that it opens in another window.&lt;/p&gt;

&lt;pre&gt;
protected string GetInternalItemLink(string guid, string lang) {
    return string.Format("/sitecore/shell/sitecore/content/Applications/Content Editor.aspx?id={0}&amp;amp;la={1}&amp;amp;fo={0}", guid, lang);
}
&lt;/pre&gt;</description><pubDate>Wed, 15 Dec 2010 12:33:00 -0500</pubDate></item><item><guid isPermaLink="false">{1A1A2242-62C4-44D2-93B9-A6E0A0F0171B}</guid><link>http://www.sitecoredevelopment.com/en/MarkGraber/Version-Control-with-Sitecore-and-Subversion.aspx</link><title>Version Control with Sitecore and Subversion</title><description>
		&lt;p&gt;This post will be very brief because I mainly wanted to share a link to a Sitecore Developer Network Article that walks through how you should use Subversion for your Sitecore projects.  We use the same process at Oasis with Subversion.  Pay close attention to the ALL CAPS note: "DO NOT ADD PARTS OF SITECORE DISTRIBUTION TO SVN UNLESS YOU WANT TO MAKE AND TRACK MODIFICATIONS TO THEM."&lt;/p&gt;
    &lt;p&gt;We make sure that we do not commit files that are part of the Sitecore installation, unless we make changes to them.  This way you can download any version of Sitecore that you want, checkout your SVN files, copy them on top of the Sitecore installed files, and now you have a new version of your code running on that version of Sitecore.  Clearly, there are a few more steps, such as, configuration file considerations, but you get the general idea.  If you keep your committed code separate from the Sitecore installation, it will be easier to manage your Sitecore version updates, and you won't fill your Subversion repositiory with unnecessary files.  In addition, you will kill the performance of your repository if you fill it with the Sitecore folder under the website.&lt;/p&gt;
    &lt;p&gt;Here is the link to the article.  &lt;a href="http://sdn.sitecore.net/Developer/Team%20Development%20with%20Sitecore/Tuning%20Environmfent%20for%20Team%20Development/Developer%27s%20Workstation%20Installation/Creating%20a%20New%20Progect%20in%20SVN.aspx"&gt;http://sdn.sitecore.net/Developer/Team%20Development%20with%20Sitecore/Tuning%20Environmfent%20for%20Team%20Development/Developer%27s%20Workstation%20Installation/Creating%20a%20New%20Progect%20in%20SVN.aspx&lt;/a&gt;&lt;/p&gt;</description><pubDate>Tue, 07 Dec 2010 22:07:00 -0500</pubDate></item><item><guid isPermaLink="false">{C3982D2C-0886-4832-9965-391F5BE36ED3}</guid><link>http://www.sitecoredevelopment.com/en/MarkGraber/Sitecore-Caching-with-Sublayouts.aspx</link><title>Sitecore Caching with Sublayouts</title><description>
		&lt;p&gt;This post will walk through some of the great caching features that Sitecore provides using sublayouts.  I will walk through 3 simple examples to get you starting with using sublayouts to cache content.  Once you get the basics, there are many more ways to use caching to meet the needs of your web applications.  Here are the 3 examples:&lt;/p&gt;
    &lt;ol style="margin-left:30px;"&gt;&lt;li&gt;Static Content – Same for All Users &lt;/li&gt;
    &lt;li&gt;Dynamic Content – Vary by Logged-In State &lt;/li&gt;
    &lt;li&gt;Dynamic Content – Vary by SessionID &amp;amp; AccountID&lt;/li&gt;&lt;/ol&gt;
    &lt;p&gt;The following examples use hard-coded sublayout tags you can drop into your Layout code, but the same concepts apply when using the dynamic Presentation layer in Sitecore.&lt;/p&gt;</description><pubDate>Tue, 30 Nov 2010 10:24:00 -0500</pubDate></item><item><guid isPermaLink="false">{E9CE45F8-5F98-4F89-BB55-2D10B29398F2}</guid><link>http://www.sitecoredevelopment.com/en/MarkGraber/FTP%20Client%20from%20Sitecore%20Codebehind.aspx</link><title>FTP Client from Sitecore Codebehind</title><description>
		&lt;p&gt;Have you ever wanted to download files from an FTP server with ASP.NET code?  If so, you probably considered a few different paths: (1) buy some code or a DLL for the FTP Client, (2) build your own class library, or (3) search from something built-in to ASP.NET.&lt;/p&gt;
    &lt;p&gt;This article is going to discuss the third option.  There are some built-in classes that you can use in ASP.NET 3.5 even though the articles are titled .NET v4.0.  I can confirm that this code works on a Sitecore 6.2 website that is running ASP.NET 3.5 and not 4.0.&lt;/p&gt;
    &lt;p&gt;
      &lt;strong&gt;Download FTP Client Samples Here:&lt;/strong&gt; &lt;/p&gt;
    &lt;p&gt;
      &lt;a href="http://code.msdn.microsoft.com/nclsamples/Release/ProjectReleases.aspx?ReleaseId=3503" target="_blank"&gt;http://code.msdn.microsoft.com/nclsamples/Release/ProjectReleases.aspx?ReleaseId=3503&lt;/a&gt; &lt;/p&gt;
    &lt;p&gt;
      &lt;a href="http://msdn.microsoft.com/en-us/library/b7810t5c%28v=VS.90%29.aspx" target="_blank"&gt;http://msdn.microsoft.com/en-us/library/b7810t5c%28v=VS.90%29.aspx&lt;/a&gt; &lt;/p&gt;
    &lt;p&gt;Click into the article detail to view the key source code.&lt;/p&gt;</description><pubDate>Wed, 27 Oct 2010 20:53:00 -0400</pubDate></item><item><guid isPermaLink="false">{CA3ADEFC-B31A-41D9-B8DF-A16D1EE73A2F}</guid><link>http://www.sitecoredevelopment.com/en/MarkGraber/Sitecore%20Configuration%20API.aspx</link><title>Sitecore Configuration API</title><description>
		&lt;p&gt;Here is a very helpful class that is not so often discussed... the Sitecore.Configuration class, and it is super easy to use.&lt;/p&gt;

&lt;p&gt;Below is a simple code example of how this class can be helpful.  We all know that Sitecore's Web.config file is loaded with more settings and configuration attributes then any of us can explain.  Therefore, it could be common that you would want to know some of these settings in your C# code.&lt;/p&gt;

&lt;p&gt;For example, you could have a page that you only want Sitecore Admin users to view and redirect them to the specific type of error page if they are not logged in as an Admin (i.e. permission denied or No Access URL).  Here is how you would code that:&lt;/p&gt;

&lt;pre&gt;
if (!Sitecore.Context.User.IsAdministrator) {
    Response.Redirect(Sitecore.Configuration.Settings.NoAccessUrl);
}
&lt;/pre&gt;</description><pubDate>Wed, 20 Oct 2010 20:16:00 -0400</pubDate></item><item><guid isPermaLink="false">{380DAB71-5C6C-4582-8419-1E11B0A9529D}</guid><link>http://www.sitecoredevelopment.com/en/MarkGraber/Click-Event-Handlers-Hackery.aspx</link><title>Click Event Handlers Hackery</title><description>
		&lt;p&gt;Another interesting need came about today working with the Sitecore Ecommerce Module because most of the module is compiled into a DLL. There came about a need to update a value when the click event was fired, but the click event was in the DLL. Therefore, to avoid rewriting the event by copying code from the Reflector tool, I removed the event in the Page_Init that I added to the ASPX file. This allowed me to add my own event btnUpdate_Click2 to the ASPX file. &lt;/p&gt;
    &lt;p&gt;So, the question is, are these events synchronous or asynchronous? All testing so far has indicated that the events are asynchronous, meaning that they run in order and not at the same time. The code below shows how this was done. &lt;/p&gt;
    &lt;pre style="FONT-SIZE: 12px"&gt;btnUpdate.Click -= btnUpdate_Click;
btnUpdate.Click += new EventHandler(btnUpdate_Click2);
btnUpdate.Click += btnUpdate_Click;
&lt;/pre&gt;
    &lt;p&gt;
      &lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/59t350k3%28VS.71%29.aspx" target="_blank"&gt;More on ASP.NET Events&lt;/a&gt;  &lt;/p&gt;</description><pubDate>Mon, 11 Oct 2010 21:05:00 -0400</pubDate></item><item><guid isPermaLink="false">{82836C94-66E5-4318-853F-63DDBA54F64A}</guid><link>http://www.sitecoredevelopment.com/en/MarkGraber/Selecting-CSS-Class-Names-with-Dots-Using-jQuery.aspx</link><title>Selecting CSS Class Names with Dots Using jQuery</title><description>
		&lt;p&gt;Another day... another unique issue.  The title of the post pretty much summarizes the new issue.  Working with someone else's code, you don't have control over naming conventions of CSS classes, and I just happened to be using code that has dots in the CSS class names.  I know what you are thinking.  Isn't that illegal?  Well, apparenltly, you can do it, but I wouldn't.  So, I will say this is how to work with it if you are using someone else's code because you would never code dots in your CSS class names.&lt;/p&gt;
&lt;p&gt;So, here is the jQuery code to select CSS class names with dots.  You need to escape the dot with two backslashes.  I won't reveal the source of the "unconventional" CSS code, but you may be able to tell from this example.&lt;/p&gt;

&lt;pre style="font-size:12px;"&gt;
// Hide fields on Checkout Name and Address form
$(".name\\.Country").hide();
$(".name\\.ShippingCountry").hide();
&lt;/pre&gt;</description><pubDate>Mon, 04 Oct 2010 21:26:00 -0400</pubDate></item><item><guid isPermaLink="false">{7111E539-2321-4118-BD80-1504143DDC9C}</guid><link>http://www.sitecoredevelopment.com/en/MarkGraber/How-to-Build-an-XSLT-Extension.aspx</link><title>How to Build an XSLT Extension</title><description>
		&lt;p&gt;I know that most of us developers hate using XSLT, but what if someone else wrote the XSLT for you and you just wanted to make a few tweaks to it. Then, you might like the XSLT because it's already done. Therefore, you need to understand how it works and how you can write C# code to make some simple changes. Here is a code example from the Sitecore Ecommerce Module, where I wanted to override the GetSinglePrice method in an XSLT rendering. &lt;/p&gt;
    &lt;p&gt;
      &lt;b&gt;Step 1&lt;/b&gt; : This first thing you need to do is write your own class like the following that inherits from the Sitecore.Xml.Xsl.XslHelper class.&lt;/p&gt;
    &lt;pre style="FONT-SIZE: 12px"&gt;class XslExtensions : Sitecore.Xml.Xsl.XslHelper
    {
        public string GetSinglePrice(XPathNodeIterator ni) {
            IProduct product = 
               Sitecore.Ecommerce.Context.Entity.Resolve&amp;lt;IProduct&amp;gt;();
            IPriceParameters priceParams =
               Sitecore.Ecommerce.Context.Entity.Resolve&amp;lt;IPriceParameters&amp;gt;();

            return String.Format("{0:C}", product.GetSinglePrice(priceParams));
        }
    }

&lt;/pre&gt;
    &lt;p&gt;Read the full article for the next steps.&lt;/p&gt;</description><pubDate>Thu, 30 Sep 2010 22:30:00 -0400</pubDate></item><item><guid isPermaLink="false">{F9861621-6548-43DD-9EF0-112F3AC56BE3}</guid><link>http://www.sitecoredevelopment.com/en/MarkGraber/Shared-Source-Modules.aspx</link><title>Sitecore Shared Source Modules</title><description>
		&lt;p&gt;If you aren’t familiar with the Sitecore Shared Source Modules, you are missing out on some great tools.  This past week, we made use of another great module, the Account Selector Field module (&lt;a href="http://trac.sitecore.net/AccountSelectorField"&gt;http://trac.sitecore.net/AccountSelectorField&lt;/a&gt;).&lt;/p&gt;
    &lt;p&gt;Click through to read the full post.&lt;/p&gt;</description><pubDate>Sat, 25 Sep 2010 18:47:00 -0400</pubDate></item><item><guid isPermaLink="false">{225F57DB-01E4-496E-B65D-F450E66BD2FF}</guid><link>http://www.sitecoredevelopment.com/en/MarkGraber/Useful-Sitecore-Utility-That-You-Never-Heard-Of.aspx</link><title>Sitecore.DateUtil - The Useful Sitecore Utility You Never Heard Of</title><description>
		&lt;p&gt;If you want to convert an ASP.NET DateTime object to a Sitecore ISO Date String, you should use this method &lt;b&gt;Sitecore.DateUtil.ToIsoDate&lt;/b&gt; or &lt;strong&gt;Sitecore.DateUtil.ToIsoTime&lt;/strong&gt;&lt;/p&gt;
		&lt;p&gt;No need to re-invent the wheel here.  So, delete your internal methods from your libraries because I assume you have already done this on your own, not knowing that this already existed for you.&lt;/p&gt;
		&lt;p&gt;By the way, there are some other methods in the &lt;strong&gt;DateUtil &lt;/strong&gt;class also, so check them out too.&lt;/p&gt;</description><pubDate>Wed, 15 Sep 2010 22:00:00 -0400</pubDate></item><item><guid isPermaLink="false">{F7FA2FDC-51C4-480B-A6F9-9DF3F5559179}</guid><link>http://www.sitecoredevelopment.com/en/MarkGraber/Sitecore-XPath-Query-Gotcha.aspx</link><title>Sitecore XPath Query Gotcha</title><description>
		&lt;p&gt;Here is one of the classic gotcha's the we often come across. The dreaded "-" dashes in node names.&lt;/p&gt;
    &lt;p&gt;query:/sitecore/content/#My-Site#/Home/*[@@templatename='mytemplate']&lt;/p&gt;
    &lt;p&gt;You have to keep in mind that item names with "-" dashes should be enclosed with "#" hash symbols. Otherwise, it will not work for you.&lt;/p&gt;
    &lt;p&gt;Good luck!&lt;/p&gt;</description><pubDate>Wed, 08 Sep 2010 20:55:00 -0400</pubDate></item><item><guid isPermaLink="false">{EA9BB77A-3057-47F0-8DBF-2A43321C0C11}</guid><link>http://www.sitecoredevelopment.com/en/MarkGraber/Linking-To-An-Item-in-the-Content-Editor.aspx</link><title>Linking To An Item in the Content Editor</title><description>
		&lt;p&gt;This is a cool trick if you are building custom Apps or Tabs in the Sitecore Desktop.  If you want to link to an item, you just need the Guid of the item to link to and follow the following URL structure.  If you want it to open in a new browser window, you can set the target="_blank" and that will work too.&lt;/p&gt;

&lt;pre style="font-size:12px;"&gt;
/sitecore/shell/sitecore/content/Applications/Content%20Editor.aspx?id={Guid}&amp;amp;la=en&amp;amp;fo={Guid}
&lt;/pre&gt;</description><pubDate>Wed, 25 Aug 2010 22:11:00 -0400</pubDate></item><item><guid isPermaLink="false">{35AE89FF-27E3-43C7-B6FD-AD2B0CC290AA}</guid><link>http://www.sitecoredevelopment.com/en/MarkGraber/Dot-NET-Events.aspx</link><title>Dot NET Events</title><description>
		&lt;p&gt;I know this is a Sitecore Blog, but I feel the need to share a .NET tip this week that can be used in all of your Sitecore projects as well.  In the past, I used to add .NET events handlers on the ASPX code like the following.&lt;/p&gt;
    &lt;p&gt;
      &lt;span style="FONT-FAMILY: 'Courier New'; COLOR: #0000ff; FONT-SIZE: 10pt"&gt;&amp;lt;&lt;/span&gt;
      &lt;span style="FONT-FAMILY: 'Courier New'; COLOR: #a31515; FONT-SIZE: 10pt"&gt;asp&lt;/span&gt;
      &lt;span style="FONT-FAMILY: 'Courier New'; COLOR: #0000ff; FONT-SIZE: 10pt"&gt;:&lt;/span&gt;
      &lt;span style="FONT-FAMILY: 'Courier New'; COLOR: #a31515; FONT-SIZE: 10pt"&gt;Repeater&lt;/span&gt;
      &lt;span style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt"&gt; &lt;/span&gt;
      &lt;span style="FONT-FAMILY: 'Courier New'; COLOR: #ff0000; FONT-SIZE: 10pt"&gt;runat&lt;/span&gt;
      &lt;span style="FONT-FAMILY: 'Courier New'; COLOR: #0000ff; FONT-SIZE: 10pt"&gt;="server"&lt;/span&gt;
      &lt;span style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt"&gt; &lt;/span&gt;
      &lt;span style="FONT-FAMILY: 'Courier New'; COLOR: #ff0000; FONT-SIZE: 10pt"&gt;ID&lt;/span&gt;
      &lt;span style="FONT-FAMILY: 'Courier New'; COLOR: #0000ff; FONT-SIZE: 10pt"&gt;="Repeater1"&lt;/span&gt;
      &lt;span style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt"&gt; &lt;/span&gt;
      &lt;span style="FONT-FAMILY: 'Courier New'; COLOR: #ff0000; FONT-SIZE: 10pt"&gt;OnItemDataBound&lt;/span&gt;
      &lt;span style="FONT-FAMILY: 'Courier New'; COLOR: #0000ff; FONT-SIZE: 10pt"&gt;="Repeater1_ItemDataBound"&amp;gt;&lt;/span&gt;
    &lt;/p&gt;
    &lt;p&gt;Read more to see the better way that I use now.&lt;/p&gt;</description><pubDate>Wed, 18 Aug 2010 19:44:00 -0400</pubDate></item><item><guid isPermaLink="false">{1FBB12DE-49ED-4EA3-B443-AB29890D7C5E}</guid><link>http://www.sitecoredevelopment.com/en/MarkGraber/Building-Sitecore-Website-Zip.aspx</link><title>Building a Sitecore Website Zip</title><description>
		&lt;p&gt;The following steps will help you reduce the temp files that are not needed in your zip file.&lt;/p&gt;
    &lt;ol&gt;
      &lt;li&gt;Delete Website\sitecore\shell\Applications\debug &lt;/li&gt;
      &lt;li&gt;Delete Website\sitecore\shell\Controls\debug &lt;/li&gt;
      &lt;li&gt;Delete everything from Data folder except license file, folders, and packages &lt;/li&gt;
      &lt;li&gt;Delete Website\App_Data\MediaCache – delete the whole MediaCache folder &lt;/li&gt;
      &lt;li&gt;Delete Website\temp\* - keep the folder and delete all items &lt;/li&gt;
      &lt;li&gt;Delete all items in Website\indexes\* - keep the folder &lt;/li&gt;
      &lt;li&gt;Edit the ConnectionStrings.config file and delete the logins &lt;/li&gt;
      &lt;li&gt;Be prepared to update the dataFolder in the Web.config file &lt;/li&gt;
    &lt;/ol&gt;</description><pubDate>Wed, 04 Aug 2010 16:10:00 -0400</pubDate></item><item><guid isPermaLink="false">{FE60A036-58AB-4A36-8DC6-42F1AE33F668}</guid><link>http://www.sitecoredevelopment.com/en/MarkGraber/Tracking-Downloaded-Files-with-OMS.aspx</link><title>Tracking Downloaded Files with OMS</title><description>
		&lt;p&gt; &lt;/p&gt;
    &lt;p&gt;Before you get started with the OMS, you should check out &lt;a href="/en/NickLaidlaw/Sitecore-6-does-NOT-include-Analytics.aspx"&gt;Nick Laidlaw's Post about how to setup the analytics database&lt;/a&gt;.&lt;/p&gt;
    &lt;p&gt;
      &lt;a href="~/media/Modules/EviBlog/assigningEvent.ashx"&gt;
        &lt;img width="500" height="432" alt="" src="~/media/Modules/EviBlog/assigningEvent-Thumb.ashx?w=500&amp;amp;h=432&amp;amp;as=1" /&gt; &lt;/a&gt;
    &lt;/p&gt;</description><pubDate>Wed, 21 Jul 2010 12:21:00 -0400</pubDate></item><item><guid isPermaLink="false">{C9C4E7B4-32DB-4949-AD04-25EC35F402BE}</guid><link>http://www.sitecoredevelopment.com/en/MarkGraber/How-to-use-Parameters.aspx</link><title>How to use Parameters</title><description>
		&lt;p&gt;Parameters are useful when you want to reuse the functionality of a Sitecore control, like a Rendering, and vary the way it functions by controlling this behavior in Sitecore rather than in .NET code.&lt;/p&gt;
    &lt;p&gt;One of the confusing parts about using Parameters is figuring out where you should edit them and how.  They can be found on a Rendering item in the Parameters field of the Data section.  The field delimiters are an undocumented mystery.  However, after multiple searches through both Google and the SDN, the answer was found in a completely unrelated blog article (Thanks to &lt;a href="http://sitecorejohn.spaces.live.com/blog/cns!960125F1D4A59952!829.entry" target="_blank"&gt;John West&lt;/a&gt;).  The delimiter is an ampersand character, so these basically use Query String format.&lt;/p&gt;</description><pubDate>Fri, 09 Jul 2010 16:51:00 -0400</pubDate></item><item><guid isPermaLink="false">{881F0F3F-6632-4D5B-80B5-F7B964971122}</guid><link>http://www.sitecoredevelopment.com/en/MarkGraber/Cannot-Login-to-Sitecore.aspx</link><title>Can't Login to Sitecore?</title><description>
		&lt;p&gt;Have you ever been locked out of your Sitecore login or have you forgotten or lost all know logins?  Don't worry, as long as you have access to the SQL Server database, you can take the following steps to get logged in again.  Read more for solution.&lt;/p&gt;
</description><pubDate>Wed, 30 Jun 2010 14:17:00 -0400</pubDate></item><item><guid isPermaLink="false">{40C44038-ABF0-4DD5-8BEA-75193E8C9564}</guid><link>http://www.sitecoredevelopment.com/en/MarkGraber/Aliases-with-Multiple-Sites.aspx</link><title>Aliases with Multiple Sites</title><description>
		&lt;p&gt;Beware of using Aliases in a Sitecore install that is running multiple sites.  We all know that you can run multiple sites on the same Sitecore install by using different hostName attributes on the &amp;lt;sites&amp;gt; node in the Web.config file. However, you can't have the &lt;u&gt;same&lt;/u&gt; aliases across multiple sites.  For example, if you have a Solutions alias in your Sitecore install as shown below, this Alias can only point to one node in the content tree.  Therefore, it will point to that same node in the content tree for all "sites."  This can sometimes come by surprise and bewilderment if you inherit a project that is using aliases.  I recommend checking the location in the System folder shown below in the tree to see if there are any Aliases to be aware of.&lt;/p&gt;
    &lt;p&gt;
      &lt;a href="~/media/Modules/EviBlog/Aliases.ashx"&gt;
        &lt;img width="500" height="423" alt="" src="~/media/Modules/EviBlog/Aliases-Thumb.ashx?w=500&amp;amp;h=423&amp;amp;as=1" /&gt;
      &lt;/a&gt;
    &lt;/p&gt;</description><pubDate>Wed, 16 Jun 2010 21:22:00 -0400</pubDate></item><item><guid isPermaLink="false">{5E3BA578-CB21-4EB3-8BBB-42BDB31711FC}</guid><link>http://www.sitecoredevelopment.com/en/MarkGraber/Sitecore-Development-Team-Resources-And-Efficiencies.aspx</link><title>Will additional development resources provide significant efficiencies with Sitecore development projects?</title><description>
		&lt;p&gt;
      &lt;strong&gt;Basic Conclusion&lt;/strong&gt;
    &lt;br /&gt;At Oasis we suggest that the ideal project team for a typical Sitecore project consists of a maximum of 3 development resources and 2 project managers. The division consists of a chief architect that provides coordination, programming guidance, and QA controls, a front-end developer that provides expertise in HTML, CSS, and JavaScript, and a back-end developer that provides expertise in Sitecore API and ASP.NET backend coding. This team division provides each member with clearly defined roles that avoid reworking the same tasks that have already been completed by another programmer because the scope of each developer does not overlap. The project managers consist of a day-to-day project leader that facilitates communication between the client and development resources on a daily basis, and the second project manager is a typically a more senior and less involved manager on a daily basis. Their responsibility is to be the client’s internal champion and to keep in mind the broader perspective and overall project objectives. The team approach provides defined roles and cooperation that far exceed the capabilities of individuals wearing multiple hats.  Check out the full post for supporting language and data.&lt;/p&gt;
</description><pubDate>Wed, 02 Jun 2010 17:30:00 -0400</pubDate></item><item><guid isPermaLink="false">{506CF34E-A3E6-4E19-B04C-7C6DEB68C48A}</guid><link>http://www.sitecoredevelopment.com/en/MarkGraber/How-to-Remove-Upload-as-Files-Checkbox.aspx</link><title>How to Remove Upload as Files Checkbox</title><description>
		&lt;p&gt;I have seen a common problem with Sitecore Media Library assets.  If users upload the files As Files using the checkbox shown below, you can run into problems in load balanced environments and environments with different websites for the Stage and Live databases.&lt;/p&gt;
    &lt;p&gt;
      &lt;a href="~/media/Modules/EviBlog/Upload-as-Files.ashx"&gt;
        &lt;img width="500" height="333" alt="Upload as Files" src="~/media/Modules/EviBlog/Upload-as-Files-Thumb.ashx?w=500&amp;amp;h=333&amp;amp;as=1" /&gt;
      &lt;/a&gt;
    &lt;/p&gt;
    &lt;p&gt;When you publish the media assets, their container or pointer is moved from the master to the web database in Sitecore, but the file assets in the file system are not moved by Sitecore.  You could setup a file replication application, but who wants to do that when there is an easier way.  Read on for the solution.&lt;/p&gt;</description><pubDate>Wed, 26 May 2010 12:02:00 -0400</pubDate></item><item><guid isPermaLink="false">{C585F8F3-E0F7-48FD-9D1A-F8FF72022ADC}</guid><link>http://www.sitecoredevelopment.com/en/MarkGraber/Access-to-the-path-is-denied.aspx</link><title>Access to the path is denied</title><description>
		&lt;p&gt;Have you ever zipped up a Sitecore website to move it to another server and received an error like the following?&lt;/p&gt;
    &lt;p&gt;Access to the path 'c:\…\website\sitecore\shell\applications\debug\ducatshell.cs' is denied.&lt;/p&gt;
    &lt;p&gt; &lt;a href="~/media/Modules/EviBlog/Access-to-the-path-is-denied.ashx"&gt;&lt;img width="500" height="307" alt="Access to the path is denied." src="~/media/Modules/EviBlog/Access-to-the-path-is-denied-thumb.ashx?w=500&amp;amp;h=307&amp;amp;as=1" /&gt;&lt;/a&gt;&lt;/p&gt;
    &lt;p&gt;It is common to get this error because the debug folders to written to the file system by Sitecore at run time. Therefore, the permissions on the folders are tied to the ASPNET user from the source machine, which prevents the destination machine from being able to re-write those files. &lt;/p&gt;
    &lt;p&gt;Read More for my solution.&lt;/p&gt;</description><pubDate>Wed, 12 May 2010 23:38:00 -0400</pubDate></item><item><guid isPermaLink="false">{CD3AF411-AB49-41B7-8D45-B01DD08D36EE}</guid><link>http://www.sitecoredevelopment.com/en/MarkGraber/Staging-Module-Publishing-Targets.aspx</link><title>Staging Module Publishing Targets</title><description>The Sitecore Staging Module works great, allowing you to have a authoring environment on a local web server and publish content over the internet up to a hosted server containing a separate instance of Sitecore. There is a good PDF document that gets you on the right track for configuring the Staging Module titled, "Staging Module Installation and Configuration Guide." However, there is one key step that you may miss by following along in this guide. You will want to edit the following section of your Web.config file.&lt;br /&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(0,153,0); FONT-FAMILY: courier new"&gt;&lt;br /&gt;&amp;lt;!-- PUBLISHING GROUPS&lt;br /&gt;Pipe separated list of default publishing groups.&lt;br /&gt;Groups in this list will be preselected in the Publish dialog.&lt;br /&gt;--&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(51,51,255); FONT-FAMILY: courier new"&gt;&lt;br /&gt;&amp;lt;setting &lt;/span&gt;&lt;span style="COLOR: rgb(255,0,0); FONT-FAMILY: courier new"&gt;name&lt;/span&gt;=&lt;span style="COLOR: rgb(102,0,204); FONT-FAMILY: courier new"&gt;"DefaultPublishingTargets"&lt;/span&gt; &lt;span style="COLOR: rgb(255,0,0); FONT-FAMILY: courier new"&gt;value&lt;/span&gt;=&lt;span style="COLOR: rgb(102,0,204); FONT-FAMILY: courier new"&gt;"Internet|WebSQL"&lt;/span&gt; /&amp;gt;</description><pubDate>Wed, 28 Apr 2010 13:31:00 -0400</pubDate></item><item><guid isPermaLink="false">{EA3B2869-50D0-48AB-A1E3-242949E779C6}</guid><link>http://www.sitecoredevelopment.com/en/MarkGraber/EviBlog-Install-and-Setup-Instructions.aspx</link><title>EviBlog Install and Setup Instructions</title><description>
		&lt;p&gt;The EviBlog is located in the Sitecore Shared Source Library at &lt;a href="http://trac.sitecore.net/EviBlog" target="_blank"&gt;http://trac.sitecore.net/EviBlog&lt;/a&gt;&lt;/p&gt;
    &lt;p&gt;According to the &lt;a href="http://trac.sitecore.net/EviBlog/wiki/Installation%20Guide" target="_blank"&gt;Installation Guide&lt;/a&gt;, all you need to do is install the package and publish the site.  However, this did not work for me.  I was missing the items in the content tree.  I inspected the package.zip file for version 1.5, and there were definately no items in the content tree.  So, then I checked out the SVN module.&lt;/p&gt;</description><pubDate>Wed, 14 Apr 2010 23:05:00 -0400</pubDate></item><item><guid isPermaLink="false">{C17E92E0-0605-4972-9DB9-C005630256AE}</guid><link>http://www.sitecoredevelopment.com/en/MarkGraber/Welcome.aspx</link><title>Welcome</title><description>
		&lt;p&gt;Hello all Sitecore developers.  I will be using this blog to share my experiences and insights with Sitecore.  I hope you find some of my tips helpful, and please share your comments with me too. &lt;/p&gt;
</description><pubDate>Tue, 13 Apr 2010 00:15:00 -0400</pubDate></item></channel></rss>
