sitecore开发入门之Sitecore字典结构最佳实践
使用Sitecore时,一个重要的主题是如何为您的网站处理不同的语言和区域。Sitecore对此的回答是使用字典项,它基本上只代表键/值定义。但是,这个字典项可以设置为具有不同的语言版本,这几乎允许您为“提交”按钮文本设置字典项。然后是加拿大地区该项目的另一个版本,可能会使用更具区域特定性的文本,或者可能使用该语言的西班牙语版本。
这个主题在Sitecore中并不新鲜,但应该考虑的是存储这些类型项目的正确设置/配置。在我目前工作的项目中,它们通常存储在Master数据库的System / Dictionary文件夹中,但我不认为它充分利用了Sitecore能够做的事情。将字典项存储在系统文件夹中也有明显的含义,例如标准内容编辑器很少对树的这一部分具有访问权限。在Sitecore 6.6版中,他们引入了具有域字典的功能。这允许更大的灵活性,并允许内容创建者具有特定于站点的字典项(以及在内容树中存储这些字典项),
我相信较少人真正意识到的另一个特性是,在整个Sitecore CMS界面中使用了字典定义,尤其是在内容编辑器中。当您指定与Shell中使用的域字典匹配的字段名称时,它将使用字段名称的字典值。所以这意味着您可以创建CMS特定的字典项来表示您的字段名称,然后您可以创建特定于语言的字段名称,而无需实际进入并手动创建模板的多个语言版本。
为了测试这个新理论并展示我推荐的处理字典项的最佳方法的一些例子,我将引导您完成以下实现,它将创建特定于站点的域字典,全局字典,然后是CMS特定的字典。 Sitecore模板字段。
首先,请确保您有Sitecore的副本,最好运行Sitecore 6.6或更高版本(我正在使用Sitecore 8.1)。运行Sitecore后,请进入内容编辑器。您需要为您的站点创建几个词典域。我认为这里最好的方法是创建至少2到3个字典域。我会在站点级别创建一个包含站点特定的字典项目。有时在最初开发网站时,可能很难规划字典项目的位置(在网站级别或所有网站的全局级别),只需使用您的最佳判断,以后可以随时调整。在站点级别,我将创建一个插入选项来添加字典域,这样可以更轻松地为将来的站点添加它。
一旦你创建了一个特定于站点的域字典,接下来我将在全局文件夹中创建一个域字典。这允许您将在所有站点之间共享的字典项放在一个位置。同样,建议的最佳做法是在内容树的全局部分中包含插入选项以包含此域字典。您可能需要在全局文件夹中使用多个域字典。完成后,它是可选的,但您可以在系统文件夹中添加另一个域字典。此域字典的用途是针对您为内容项创建的模板字段。我将在这篇**帖子**中详细介绍Sitecore的这个隐藏功能。
创建域词典后,您的工作就不完整了。下一步是指定回退字典域,如果在当前域中找不到您用作密钥的项目,则允许Sitecore回退到另一个域字典。因此,在您的站点特定域字典上,您可能希望指定全局域字典。这样,当您指定查看站点定义文件中的站点特定字典时,如果找不到字典键,它将回退并查看下一个全局域字典。这将创建一个结构良好的设置,允许您根据特定于站点或全局特定的字典项来组织字典。
此设置的最后一步当然是在站点定义补丁文件中定义字典域。我通常喜欢在我的解决方案中使用SiteDefinition.config,以便我可以对其进行更改,例如此更改。要从修补程序文件扩展现有的“站点定义”以包含自定义域字典,可以将以下内容添加到修补程序文件中:
1 2 3 4 5 6 7 8 9 10 | <?xml version="1.0"?> <configuration xmlns:patch="/"> <sitecore> <sites> <site name="website"> <patch:attribute name="dictionaryDomain">Sitecore</patch:attribute> </site> </sites> </sitecore> </configuration> |
---|
对于上面的属性,只需指定字典的名称即可。重要的是,您要为字典域名提供一个与众不同的名称。例如,应该为站点特定字典域提供某些变体的网站名称。您可以调用全局域,只调用全局字典或其他影响。
最后,如果您要为Sitecore中的默认站点定义完整的站点定义,包括域字典,您可以这样做:
Site Definition with Domain Dictionary
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | <?xml version="1.0"?> <configuration xmlns:patch="/"> <sitecore> <sites> <site name="website" patch:instead="site[@name='website']" rootPath="/sitecore/content/website1" startItem="/home" virtualFolder="/" contentStartItem="/" physicalFolder="/" database="web" domain="extranet" allowDebug="true" cacheHtml="true" htmlCacheSize="10MB" registryCacheSize="0" viewStateCacheSize="0" xslCacheSize="5MB" filteredItemsCacheSize="2MB" enablePreview="true" enableWebEdit="true" enabledDebugger="true" dictionaryDomain="Sitecore" disableClientData="false" /> </sites> </sitecore> </configuration> |
---|