tag:blogger.com,1999:blog-146587882024-03-24T00:10:02.866-07:00Sitecore Core DevelopmentDetails about the inner workings and implementation issues in Sitecore from a core developer.JakobChristensenhttp://www.blogger.com/profile/05486421976618698228noreply@blogger.comBlogger33125tag:blogger.com,1999:blog-14658788.post-6107799352703166282007-05-23T06:40:00.000-07:002007-05-23T06:47:15.041-07:00Jespers BlogFirst of all Jesper has a new blog at <a href="http://jesperen.wordpress.com">http://jesperen.wordpress.com</a>.<br /><br />I am glad to see Jesper writing a blog and it seems that more and more of my collegues are also writing blogs.<br /><br />The main reason I haven't been writing in a long while, is lack of time and an internal debate on what is proper to write in a blog. Unfortunately that still hasn't been solved, which is very frustrating.JakobChristensenhttp://www.blogger.com/profile/05486421976618698228noreply@blogger.com10tag:blogger.com,1999:blog-14658788.post-1156422119718025892006-08-24T04:48:00.000-07:002006-08-24T05:21:59.773-07:00Multi UploadAs most of you are aware of, the media library has changed a lot in 5.3. The change was prompted by the need to store the media files inside the Sitecore database, so that media could be versioned. As a side effect, we were given the chance the change how the user works with the media library.<br /><br />From the start we wanted the user to work with media items in exactly the same way that they work with items - the user should feel that a media item is "just an item with an embedded file". This would make media item first-class citizens of Sitecore which they really haven't been before.<br /><br />This strategy has turned to be not-quite-true.<br /><br />This is especially apparent when you look at the common scenario of uploading 8 images to Sitecore. Our first design required the user to switch from the content editor to the media library, create 8 items and then attach the 8 images to each item. Quite cumbersome.<br /><br />The next design allowed the user to upload the items directly from the Image Browser dialog. After each upload the Content Editor was shown in a popup dialog box to ensure that the user supplied required information like Alt texts and width and height. However this still required the user to click to the upload button 8 times.<br /><br />Finally we have surrended, and implemented a new upload dialog that allows the user to upload multiple images in one go. This is still not an ActiveX solution, so we have to use the multiple input field trick, that we have used in previous Sitecore versions.<br /><br /><br /><p><img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://photos1.blogger.com/blogger/7358/1333/320/MultiUpload.jpg" border="0" /><br />When the user clicks an item in the Uploaded Media Items pane, the Content Editor is shown in a popup dialog box.</p><p>The upload box shows a couple of new features. </p><ol><li>Uploaded media items either be versioned or not. This controls which template the media item is created from.</li><li>The Uploaded Files pane shows meta data for each media item- in this case the size of the uploaded file. </li><li>Uploaded media item are validated -"lighthouse jpg" has two warnings, which is probably that the Width and Height fields are empty.</li></ol><p>Media Meta Data and Media Validation are new concepts that the developer can attach to a media type via the web.config. This means that you can implement your own way of supplying meta data to a media item and validate that the fields are correct.</p>JakobChristensenhttp://www.blogger.com/profile/05486421976618698228noreply@blogger.com3tag:blogger.com,1999:blog-14658788.post-1153986447727158582006-07-27T00:23:00.000-07:002006-07-27T00:47:27.736-07:00Template BuilderWe are gettting a lot of positive feedback on the recent beta release, which is extremely nice. People seem to be happy about the speed of the client and the system in general.<br /><br />However one particular comment keeps recurring which is that while the Template Editor has been improved, it is still not good enough. This has been so prevaliant, that I decided that we needed to address this issue, so I spent that last couple of days implementing the Template Builder.<br /><p><img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://photos1.blogger.com/blogger/7358/1333/320/TemplateBuilder.jpg" border="0" /><br />The purpose of the Template Builder to speed up template editing by hidding some of the complex settings, like setting field titles in all languages and specifing security. You can still open the Template Editor, which is unchanged, by using the Advanced button in the ribbon.</p><p>The metaphor in the Template Builder is creating an SQL table which should be familiar to most developers. That is why the field are shown in a grid style. To add a new section or field, you simply start typing in the last row (and a new row magically appears).</p><p>The user can make changes to all sections and fields and these are only saved when the user clicks the Save button. This improves the working speed dramatically.</p><p>Some Sitecore veterans will probably get a good laugh out of the Template Builder as it bears striking similarites to template editing in version 2 and 3.</p><p>I hope most developers will be happy about the new Template Builder and that we actually try to listen to what you are saying.</p><p> </p>JakobChristensenhttp://www.blogger.com/profile/05486421976618698228noreply@blogger.com7tag:blogger.com,1999:blog-14658788.post-1149847161312211992006-06-09T02:51:00.000-07:002006-06-09T02:59:21.323-07:00Debugging SheerThere is a very useful way of seeing what is actually sent to the browser in a Sheer event. In the /sitecore/shell/controls/sitecore.js file look for a line like this:<br /><br />// this.debug();<br /><br />It is in the parse() function.<br /><br />If you uncomment this line and refresh the browser (to reload the JavaScript), you will start seeing message boxes for every command that is sent to the browser. (After a while this gets really annoying, so you will comment the line back soon.)<br /><p><img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://photos1.blogger.com/blogger/7358/1333/320/debug.jpg" border="0" /><br />What you see in the box is a single command with named attributes and the value. Usually each request generates a number of commands, so you will get a number of boxes.</p><p>The above command registers the key code "c68" which is Ctrl+D with the mesage "item:duplicate".<br /></p>JakobChristensenhttp://www.blogger.com/profile/05486421976618698228noreply@blogger.com1tag:blogger.com,1999:blog-14658788.post-1146735751375591192006-05-04T02:34:00.000-07:002006-05-04T02:42:31.386-07:00Image Alt AttributesThe Media Library has received a major overhaul in 5.3. The image files are now stored inside the database - and not in the /Upload folder - which allows real versioning and workflow control over media items.<br /><br />As part of this and the tools for W3C compliance, we have changed howthe image Alt texts are handled. In the previous 5.x versions the Alt text was fetched from the Alt attribute on the link to the media item, so that you could have different Alt texts depending on where you used the link. If you didn't specify a text in the attribute, the Alt text was blank.<br /><br />In 5.3 if the Alt attribute is blank, we use the Alt text on the Image item. This allows the user to specify a general text on the image, that can be overridden per link.JakobChristensenhttp://www.blogger.com/profile/05486421976618698228noreply@blogger.com1tag:blogger.com,1999:blog-14658788.post-1146651914447134372006-05-03T03:17:00.000-07:002006-05-03T03:26:04.663-07:00Html ValidationIn 5.3 we have added some tools to check for compliance with the W3C standards.<br /><br />The new Html editor (R.A.D. Editor from Telerik) have built-in support for this.<br /><br />The Content Editor has a button for checking all Html fields in one go (in the Review tab).<br /><br /><p><img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://photos1.blogger.com/blogger/7358/1333/320/validate1.jpg" border="0" /><br />and the Debugger has a button for checking the current page. </p><p></p><p><img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://photos1.blogger.com/blogger/7358/1333/320/validate2.jpg" border="0" /></p><p>We hope that these 3 functions will help users and developers make compliant Html.</p><p></p>JakobChristensenhttp://www.blogger.com/profile/05486421976618698228noreply@blogger.com1tag:blogger.com,1999:blog-14658788.post-1146229231266612842006-04-28T05:47:00.000-07:002006-05-01T02:33:47.510-07:00Sitecore XPathThe Sitecore XPath query language is a custom-implemented subset of XPath. The main difference is that instead of this:<br /><br />"/item[@key='sitecore']/item[@key='content']/item[@key='home']"<br /><br />you can write:<br /><br />"/sitecore/content/home"<br /><br />which is much easier.<br /><br />Sitecore XPath can be used from the API using the Database.SelectItems(...) or Database.SelectSingleItem(...) methods. In the Sitecore Client you can use the it in the sources for Lookup, ValueLookup and MultiList fields. e.g.<br /><br />"query:/sitecore/content/home/*"<br /><br />which yields the subitems of home.<br /><br /><br />You can also use Sitecore XPath in the new XPath Builder in the Developer Center of 5.3.<br /><br />The performance in .NET 2.0 is probably not as good as real XPath (.NET 1.0 and 1.1 is another story), but for some tasks you prefer simplicity over speed - rarely, but it happends. <br /><br />(Update: I have added a bit more explanation)<br /><br />The reason for this post is really that we made a small addition to the syntax. You can now quote identifiers with hashs (#). Suppose you have an item with the name "News - Corporate". Before you could not address this item as the dash (-) would be interpreted as an operator and not a part of the name. To solve this you can now write:<br /><br />"/sitecore/content/Home/#News - Corporate#"<br /><br />Everything between the hashs is considered a name or an identifier.JakobChristensenhttp://www.blogger.com/profile/05486421976618698228noreply@blogger.com32tag:blogger.com,1999:blog-14658788.post-1145974959588321762006-04-25T07:19:00.000-07:002006-04-25T07:22:39.650-07:00JSONI guess not a lot of you need to know this, but anyway...<br /><br />We have changed the protocol that Sheer UI uses to communicate from an XML based protocol to <a href="http://www.json.org">JSON</a>.<br /><br />It has saved us a bunch of JavaScript code and made each request about 15ms faster which is very nice. JSON is defintely the format to use when using JavaScript.JakobChristensenhttp://www.blogger.com/profile/05486421976618698228noreply@blogger.com3tag:blogger.com,1999:blog-14658788.post-1145352310706919942006-04-18T02:18:00.000-07:002006-04-18T02:25:10.726-07:00IgnoreUrlExtensionsI have added a new setting in the web.config - IgnoreUrlExtensions - which allows certain file types to bypass the layout engine. For instance web services do not need a layout - in fact the engine messes a web service up.<br /><br />Extensions are specified by extension excluding the dot and are seperated by a pipe (|).<br /><br />E.g.<br /><setting name="IgnoreUrlExtensions" value="asmx|png|gif|jpg" /><br /><br />The settings is handled in the HttpRequest pipeline after the site (database, domain etc.) has been setup - this means that you can still access the correct database, even though the filetype is ignored. This is a major difference from IgnoreUrlPrefix.JakobChristensenhttp://www.blogger.com/profile/05486421976618698228noreply@blogger.com1tag:blogger.com,1999:blog-14658788.post-1145221919753498712006-04-16T14:07:00.000-07:002006-04-16T14:11:59.766-07:00WallpaperI just implemented a couple of missing features in the wallpaper dialog box.<br /><br />Previously you could only specify the wallpaper image, but now you can also specify a position and a background color.<br /><br /><img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://photos1.blogger.com/blogger/7358/1333/320/wallpaper.jpg" border="0" /><br />This may seem like small things, but they are very important for most users. It makes the users feel in control of the system and not the other way around.JakobChristensenhttp://www.blogger.com/profile/05486421976618698228noreply@blogger.com1tag:blogger.com,1999:blog-14658788.post-1144823333624721982006-04-11T23:17:00.000-07:002006-04-11T23:33:43.473-07:00Keyboard ShortcutsWe are optimizing the Content Editor to be less mouse-centric. I expect that this will make a lot of developers and power-users very happy (including myself).<br /><br />The new Ribbon supports keyboard shortcuts. The ribbon button templates Large Button, Small Button etc. all have a field called KeyCode which triggers the click event on that button.<br /><br />A keycode is a standard Sitecore keycode, e.g. "c68" for Ctrl+D. The Keyboard Map application in Sitecore can be used to obtain the keycodes. There are of course some keys that cannot be override as IE uses these.<br /><br /><img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://photos1.blogger.com/blogger/7358/1333/320/keyboardmap.jpg" border="0" /><br />The current bindings are:<br />Ctrl+S: Save<br />Ctrl+D: Duplicate<br />F2: Rename<br />Ctrl+Home: Goto to Home node<br />Shift+Ctrl-Alt-Up: Sort Up<br />Shift+Ctrl-Alt-Down: Sort Down<br />Shift+Ctrl-Left: Back<br />Shift+Ctrl-Right: Forward<br />Ctrl+F2: Expose (window manager)<br />Ctrl+Windows: Start Bar<br />F9: Publish<br />Ctrl+F9: Publish Item<br /><br />Hopefully we will have more as time comes.<br /><br />We have started using the <a> for clickable objects in the Content Editor, which gives us a number of benefits. One of them is that tabbing on works, so you should be able to reach any part of the Content Editor UI using Tab, which is very nice.<br /><br />The content treeview also supports navigation via the keyboard. The means that you can use the arrow keys to change focus and expand/collapse branches.JakobChristensenhttp://www.blogger.com/profile/05486421976618698228noreply@blogger.com1tag:blogger.com,1999:blog-14658788.post-1144696003925314822006-04-10T11:54:00.000-07:002006-04-10T12:09:49.460-07:00SQL Express and CassiniWe have done a couple of conversions that have eased the development some.<br /><br />Last thursday Ole moved the databases to SQL Express (with a heavy bribe from me). While Firebird is an excellent database, it's strength is also it's weakness. As it runs InProc with the ASP.NET process, it has to rebuild its cache whenever we rebuild the VS project. This takes just a little time - not something you would normally notice - but as we rebuild about 100 times a day, it is something we can feel. And I like the flexibility of being able to choose between SQL Server, SQL Express and Firebird.<br /><br />Today Runi showed me how to get Sitecore running on Cassini - the web server that comes with Visual Studio 2005. It was just really an issue of getting used to it - there were no problems at all. The big advantage of using Cassini is that I do not have to reconfigure the IIS every time I change project, which happens a lot when we build patches. I have been using the Sitecore IE Toolbar for a long time, but I hope that time is over now.JakobChristensenhttp://www.blogger.com/profile/05486421976618698228noreply@blogger.com3tag:blogger.com,1999:blog-14658788.post-1144270322341561372006-04-05T13:42:00.000-07:002006-04-05T13:52:02.356-07:00Browser Display ModeIn order to maximize the amount of screen real-estate for the user we have added a number of display mode options to the login screen.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/7358/1333/1600/loginoptions.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/7358/1333/320/loginoptions.jpg" alt="" border="0" /></a><br />The Normal options show the browser with toolbars - no surprises here.<br /><br />The "Without Toolbars" omits the toolbars.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/7358/1333/1600/withouttoolbars.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/7358/1333/320/withouttoolbars.jpg" alt="" border="0" /></a><br />The "Fullscreen" option maximize the browser and does not show any toolbars - even without the otherwise annoying fly-out toolbar (pretty sure this is not going in IE7 as it is a great way of doing phising attacks).JakobChristensenhttp://www.blogger.com/profile/05486421976618698228noreply@blogger.com3tag:blogger.com,1999:blog-14658788.post-1144240549864622652006-04-05T05:03:00.000-07:002006-04-05T13:56:59.683-07:00Client RolesSitecore 5.3 introduces seven new security roles that determines how the Sitecore Client appears. While we have previously used the roles Editor, Webmaster and Developer, we realized that we needed something a little more fine-grained. Also the Editor, Webmaster and Developer was used to specify access to content items which meant a mix-up between Client capabilities and security rights to content items.<br /><br />The new roles makes this much cleaner and easier to setup. And without further ado: the seven new roles are:<br /><ol><li>Sitecore Client Authoring</li><li>Sitecore Client Configuring</li><li>Sitecore Client Translating</li><li>Sitecore Client Publishing</li><li>Sitecore Client Securing</li><li>Sitecore Client Maintaining</li><li>Sitecore Client Developing</li></ol><p>The name have been chosen very carefully. We needed to indicate that these roles are used in the client and not with content items, and we also needed to give them a sort of capability ring, so that you could have an Editor with Authoring and Publishing capabilities.</p><p>The customer can piece together their security roles from our standard Client roles. A typical Editor would have Authoring and Publishing while a developer would have Authoring, Configuring, Maintaining and Developing. It is important to notice that only the Security Officer should have the Securing role. Kerry has a Word document with a matrix that shows exactly which features each role controls.</p><p>There were some talks about other roles, e.g Previewing and Archiving, but we decided on simplicity and seven roles seems like an upper-limit on that.</p><p>I just finished setting up the client with these roles, and I am fairly impressed with it. The new UI really makes it easy to see what each role is about, and the combination of roles seems very powerful and easy to use.</p><p>This has always been an area where Sitecore has been lacking and it nice to see that it is finally taking shape.</p>JakobChristensenhttp://www.blogger.com/profile/05486421976618698228noreply@blogger.com4tag:blogger.com,1999:blog-14658788.post-1144151548231231292006-04-04T04:35:00.000-07:002006-04-04T04:52:40.910-07:00SortingOn the major wishes on my list for 5.3 was sorting. The wish came in two flavors: the end-user should be able to drag/drop an item to change its sorting position and an item should be able to determine how it's children are sorted.<br /><br />The good news is that both features have been implemented. The bad is news is... well there isn't any bad news (which is also good news).<br /><br />To drag/drop an item to a new sorting position, the user should hold down the Alt key while dragging. There is no UI feedback for this unfortunately.<br /><br />I have added a new field on the standard template called Subitems Sorting. This is a lookup box to /sitecore/system/Settings/Subitems Sorting. This item holds possible sortings, which is really just pointer to a .NET class, e.g. "Sitecore.Data.Comparers.DefaultSorting,Sitecore.Kernel".<br /><br />This class must implement the IComparer interface, and we have provided a base class "Sitecore.Data.Compares.Comparer", if you want to use it. This architecture makes it possible to implement custom sortings besides the 5 basic sortings Sitecore provide: Default, DisplayName, Logical, Reverse and Updated.<br /><br />When a user clicks the Subitems Sorting button in the Ribbon, she sees the following box:<br /><br /><img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://photos1.blogger.com/blogger/7358/1333/320/Sorting.1.jpg" border="0" /><br /><p>There is a nice preview of how the sorting is going to look after it has been applied.</p><p>The ribbon also have a Reset Sorting options, that remove the explicit sort-order field on each subitem. This ensures that the sort-order field does not overrule the sorting set on the parent item.</p>JakobChristensenhttp://www.blogger.com/profile/05486421976618698228noreply@blogger.com0tag:blogger.com,1999:blog-14658788.post-1144099218545592212006-04-03T14:15:00.000-07:002006-04-03T14:20:18.560-07:00Security Presets5.3 introduces a new UI tool called Security Presets. It allows the user to set predefined security settings in a single click.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/7358/1333/1600/Presets.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/7358/1333/320/Presets.jpg" alt="" border="0" /></a><br />Presets are defined in the system section using a template that has the following fields:<br /><ol><li>Users or Roles</li><li>Domain</li><li>Allowed</li><li>Denied</li><li>Inherited</li><li>Inherits</li></ol>We will probably make some UI that makes it easy to create these presets, but for now it is not on the roadmap.<br /><br />The Allowed, Denied and Inherited fields is a combination of rights on the form "rwcnda" for Read, Write, Create, reName, Delete and Administer.<br /><br />I hope this little piece of UI will make the life of security administrators much easier.JakobChristensenhttp://www.blogger.com/profile/05486421976618698228noreply@blogger.com1tag:blogger.com,1999:blog-14658788.post-1143838297430642072006-03-31T12:20:00.000-08:002006-03-31T12:51:37.456-08:00New UIBased on requests from customers we are redesigning the UI of the Content Editor. Currently we are finalizing the last details, so what you see is pretty close to the end product.<br /><br />It turned out that many end-users felt that editor was too complicated, presenting too many options at once. We take this kind of critisism very serious as the editor is a place that many people spend a lot of time in.<br /><br />Instead of taking a evolutionary approach, we decided to redesign the entire editor - hopefully solving all problems in one go. Luckily this coincided with a release of new screenshots of Office 12. The Office 12 UI seemed to solve a lot of our problems, and it was not a hard decision to try to emulate it - as far as possible.<br /><br />This has, in my opinion, turned out much better than expected. We are able to present more and better UI in less screen-real estate while increasing usability.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/7358/1333/1600/Image1.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/7358/1333/320/Image1.jpg" alt="" border="0" /></a><br />The main principles for the new design has been:<br />1. Performance - the new editor (which is unoptimized) is about 4.5 times faster than the old.<br />2. Simple - all (most) functionality is in the ribbon - and nowhere else.<br />3. Predictable / static - no magically appearing/disappearing options. If something is not possible, it is just greyed out.<br />4. The editing area is for content editing - no carouselles or portals - just content.<br />5. Editor feel - this feels and looks like an editor - not a management tool.<br /><br />The are a couple of interesting things in the screenshot above. The yellow Format tab is a contextual tab, which is visible as the cursor is in a Rich Text field. This tab provides HTML editing tools like Bold, Italic, Indent, Outdent etc. It is possible to add contextual tabs per item and per field.<br /><br />The Rich Text editor contains a yellow Image box which is actually an embedded web control directly in the HTML as it is now allowed to have web controls in HTML fields. It will be interesting to see, what this will be used for.<br /><br />The true seal of approval has come from Ole and Runi, who have always prefered the DBBrowser, but are now using the new editor.JakobChristensenhttp://www.blogger.com/profile/05486421976618698228noreply@blogger.com1tag:blogger.com,1999:blog-14658788.post-1137944944726615572006-01-22T07:45:00.000-08:002006-01-22T07:51:59.823-08:00XPath Builder DoneWell, with a little help from Saturday evening and Sunday afternoon, here is the new XPath Builder tool. The only missing feature that I can think of, is a switch to toggle between Sitecore XPath and "real" XPath.<br /><br />That is, the difference between writing:<br /><br />/sitecore/content/home/*<br /><br />and <br /><br />/item[@key='sitecore']/item[@key='content']/item[@key='home']/*<br /><br /><a href="http://photos1.blogger.com/blogger/7358/1333/1600/xpathbuilder.jpg"><img style="cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/7358/1333/320/xpathbuilder.jpg" border="0" alt="" /></a><br /><br />BTW: the code is 120 lines and the XML Layout is 49 lines.JakobChristensenhttp://www.blogger.com/profile/05486421976618698228noreply@blogger.com1tag:blogger.com,1999:blog-14658788.post-1137885553419262772006-01-21T15:10:00.000-08:002006-01-21T15:19:13.430-08:00site.configI have added a small feature for configuring sites outside the web.config - let's see if Ole approves it.<br /><br />In the site resolver, I have added functionality to look for a site.config file in the current directory. If such a file exists, the site configuration is read from that file. This make it possible to define sites much more flexible (at a cost of course).<br /><br />Here is an example of a site.config file: <br /><site<br /> rootPath="/sitecore/content" <br /> startItem="/home" <br /> language="en" <br /> database="core" <br /> domain="sitecore" <br /> loginPage="/sitecore/login"<br /> content="master" <br /> enableWorkflow="true" <br /> xmlControlPage="/sitecore/shell/default.aspx"/><br /><br />You can also use a reference to a site defined in the web.config. In that case the site.config file looks like this:<br /><br /><site reference="shell"><br /><br />The cost of this is performance. For each request, Sitecore has to check for the existance of a site.config file. If found, the file is read and parsed into an Xml document. While not overly concerning, it does hurt performance slightly. <br /><br />What it doesn't do: A site.config file does not work recursively on folders. Sitecore does not look for site.config files in parent folders, so you will have to place a site.config in every subfolder. The reason for this is performance.JakobChristensenhttp://www.blogger.com/profile/05486421976618698228noreply@blogger.com6tag:blogger.com,1999:blog-14658788.post-1137741394414311002006-01-19T23:12:00.000-08:002006-01-19T23:23:09.450-08:00XPath BuilderI am looking for a good Friday evening project and was thinking about an XPath Builder tool. It seems to me that the biggest problem in getting Xslt files to work is getting the XPaths right.<br /><br />I was thinking about a tool where you could type in an XPath, set a Context Node and evaluate it. The result (the found items) should be shown in a grid below much like the SQL Server Query Analyzer.<br /><br />Such a tool would plug nicely into the new Sitecore IDE which we are building at the moment.JakobChristensenhttp://www.blogger.com/profile/05486421976618698228noreply@blogger.com0tag:blogger.com,1999:blog-14658788.post-1137653474563129552006-01-18T22:45:00.000-08:002006-01-18T22:53:11.710-08:00Debugger Super TooltipWe are updating the Debugger to provide more info directly within the actual page.<br /><br />Here is a screenshot of what it looks like right now:<br /><br /><a href="http://photos1.blogger.com/blogger/7358/1333/1600/Super%20Tooltip.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/7358/1333/320/Super%20Tooltip.jpg" border="0" alt="" /></a><br /><br />When the user hovers the mouse over the green triangle this window flies out. Currently it shows various properties, a profile (time taken, items read etc.) and cache settings. We could easily expand on this in the future.<br /><br />I think this will ease debugging for a lot of developers.JakobChristensenhttp://www.blogger.com/profile/05486421976618698228noreply@blogger.com1tag:blogger.com,1999:blog-14658788.post-1137653074305030922006-01-18T22:42:00.000-08:002006-01-18T22:44:34.323-08:00Fresh StartAfter having been away for quite a long time, I decided to update my blog. <br /><br />I have removed all of the articles about Linked Items, as Ole have rewritten the entire code and architecture while I was away.<br /><br />We are currently working on a massive update of the Sitecore UI. The goal is to provide more screen real-estate for the users and polish some of the rough areas of Sitecore, for instance the Layouter. <br /><br />Really looking forward to 5.3 - it is going to be the best Sitecore ever!JakobChristensenhttp://www.blogger.com/profile/05486421976618698228noreply@blogger.com0tag:blogger.com,1999:blog-14658788.post-1131098024332731922005-11-04T01:40:00.000-08:002005-11-04T01:53:44.346-08:00IDTableSitecore 5.1.1 contains a new feature called IDTable. <br /><br />The purpose of IDTable is to provide DataProvider developers with a map between arbitrary keys and IDs that can be used in Sitecore. For instance, the FileSystem DataProvider uses the full path of a file as key. <br /><br />The IDTable persists the relation between the key and the ID, so that a key always returns the same ID.<br /><br />The API of IDTable is very simple: <br /><br />public static IDTableEntry Add(string prefix, string key, ID id) {<br />public static IDTableEntry Add(string prefix, string key, ID id, ID parentID) {<br />public static IDTableEntry Add(string prefix, string key, ID id, ID parentID, string customData) {<br />public static IDTableEntry GetID(string prefix, string key) {<br />public static IDTableEntry[] GetKeys(string prefix, ID id) {<br />public static IDTableEntry GetNewID(string prefix, string key) {<br />public static IDTableEntry GetNewID(string prefix, string key, ID parentID) {<br />public static IDTableEntry GetNewID(string prefix, string key, ID parentID, string customData) {<br />public static void RemoveID(string prefix, ID id) {<br />public static void RemoveKey(string prefix, string key) {<br /><br />Most of the functions operate on the IDTableEntry class. This class has 5 properties:<br />string Prefix<br />string Key<br />ID ID<br />ID ParentID<br />string CustomData<br /><br />The prefix is an identifier that all keys are prefixed with. In the FileSystem database this prefix should be "FileSystem". The ParentID property can be used if the DataProvider does not have an intrinsic parent/child relation like the FileSystem have, for instance a Customer/Order releation is an SQL database. The CustomData is a user-defined property.<br /><br />IDTable is implemented as a provider model. Sitecore supplies default implementations for all database providers: SQL Server, Firebird and Oracle.<br /><br />To configure IDTable, add the following section to the web.config:<br /><br /><!-- ID TABLE --><br /><IDTable type="Sitecore.Data.IDTables.SqlIDTable,Sitecore.SqlServer"><br /> <param desc="connection" ref="connections/master" /><br /> <param desc="cacheSize">500KB</param><br /></IDTable><br /><br />This setup enables IDTable to run on the SQL Server table in the Master database.JakobChristensenhttp://www.blogger.com/profile/05486421976618698228noreply@blogger.com3tag:blogger.com,1999:blog-14658788.post-1128606388068323772005-10-06T06:39:00.000-07:002005-10-06T06:53:08.916-07:00UI designThis blog is very funny if you ever tried to design a good UI with a user. It closely resembles the way that the desktop windows in Sitecore evolved - and pretty much all the other UI in Sitecore. <br /><br />The ratio between API and UI bugs in our bug tracking system is about 1 API bug to 5 UI bugs and I think that many of the reasons can be found in this blog (or perhaps Ole is just a better programmer than I).<br /><a href="http://miksovsky.blogs.com/flowstate/2005/10/the_fractal_nat.html"><br />http://miksovsky.blogs.com/flowstate/2005/10/the_fractal_nat.html</a>JakobChristensenhttp://www.blogger.com/profile/05486421976618698228noreply@blogger.com0tag:blogger.com,1999:blog-14658788.post-1128504560345555682005-10-05T02:24:00.000-07:002005-11-15T00:26:03.730-08:00Modifing the Preview SidebarIt is possible to add custom content to the Preview sidebar. The sidebar is a portal that contains a number of portlets. The portal is defined in the Core database in /sitecore/content/Applications/Preview.<br /><br />One way to extent the sidebar is to add new portlets to the portal.<br /><br />If you just want to add a menu item to the options in the sidebar, add a new menu item to the /sitecore/content/Applications/Preview/Toolbar item. The menu portlet then draws the menu item as part of the standard menu.<br /><br />The popup menu on the dots cannot be altered. This reason for this, is to keep the menu clean and performant. It is quite an expensive menu to draw, so it should be kept to a minimum.JakobChristensenhttp://www.blogger.com/profile/05486421976618698228noreply@blogger.com0