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="http://www.sitecore.net/xmlconfig/">
<sitecore>
<sites>
<site name="website">
<patch:attribute name="dictionaryDomain">Sitecore</patch:attribute>
</site>
</sites>
</sitecore>
</configuration>
|
对于上面的属性,只需指定字典的名称即可。重要的是,您要为字典域名提供一个与众不同的名称。例如,应该为站点特定字典域提供某些变体的网站名称。您可以调用全局域,只调用全局字典或其他影响。
最后,如果您要为Sitecore中的默认站点定义完整的站点定义,包括域字典,您可以这样做:
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="http://www.sitecore.net/xmlconfig/">
<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>
|
sitecore开发入门之Sitecore字典结构最佳实践的更多相关文章
- sitecore开发入门Sitecore的CRUD操作 - 第二部分
在上一篇(sitecore开发入门Sitecore的CRUD操作 - 第一部分)中我们讨论了如何使用Sitecore Item API,Glass,Fortis和Synthesis在Sitecore中 ...
- sitecore开发入门之如何在代码中获取SITECORE图像URL
using Sitecore; using Sitecore.Data.Items; using Sitecore.Resources.Media; public string GetUrl() { ...
- OPEN(SAP) UI5 学习入门系列之二: 最佳实践练习(上)
这篇博文难产了很久,原来是打算一周更新一篇的,上周原计划写MVC,但是写了一半,发现带入了太多的细节,不太符合这个入门系列的主题. 当我们学习一个新的技能的时候,如果一开始就面对大量的细节,很容易陷入 ...
- C4C Cloud Application Studio做ABSL开发的一些性能方面的最佳实践
Stefan Hagen在博文SAP Cloud Application Studio Performance Best Practices里介绍了在C4C里使用Cloud Application S ...
- Android开发:Translucent System Bar 的最佳实践
Translucent System Bar 的最佳实践 近几天准备抽空总结Android一些系统UI的实践使用,于是开始动手建了一个库AndroidSystemUiTraining ,边撸代码边写总 ...
- Android开发之漫漫长途 XIII——Fragment最佳实践
该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列.该系列引用了<Android开发艺术探索>以及<深入理解And ...
- 敏捷开发方法XP的12个最佳实践
极限编程(eXtreme Programming,简称XP)是一种轻量级.高效.低风险.柔性.可预测的.科学的软件开发方法,其特性包含在12个最佳实践中. 1. 计划游戏 ( Planning Ga ...
- OPEN(SAP) UI5 学习入门系列之二: 最佳实践练习(下)
上期我们完成了一个简单的主从页面,但是页面是静态的,不能交互,功能也很简单,只有一个销售订单的列表. 我们今天就一鼓作气把代码全都写完,由于本次的代码量较大,所以只对重点代码部分进行讲解. 具体每个文 ...
- sitecore开发入门Sitecore的CRUD操作 - 第一部分
在本文中,讨论如何使用Sitecore.Data.Items.Item并对这些项执行CRUD(创建,读取,更新和删除)操作.我还将介绍如何使用Glass和Fortis类库进行相同的操作,这些操作都是对 ...
随机推荐
- Glide和Govendor安装和使用
两个都是Go的包管理工具,二选一 Glide参考:golang 依赖管理 /etc/profile #Go export GOROOT=/home/lintong/software/go export ...
- SQL in、not in、exists和not exists的区别:
来自:http://blog.sina.com.cn/s/blog_8a0c4f130100zaw2.html 先谈谈in和exists的区别: exists:存在,后面一般都是子查询,当子查询返回行 ...
- iOS开发之--UIImageView的animationImages动画
图片动画实现,代码如下: -(UIImageView *)animationImageView { if (!_animationImageView) { _animationImageView= [ ...
- 恒生UFX交易接口基本介绍说明
1.恒生UFT和UFX有什么区别? UFT是一个极速交易系统,UFX是一个统一接入系统.交易系统很显然是可以进行股票交易的,UFX是所有后台交易系统的接入系统,不管后台是什么样子的交易系统都是可以通过 ...
- 类似于Mimikatz的Linux Hash Dump工具
项目主页 https://github.com/huntergregal/mimipenguin 需要root权限 支持 Kali 4.3.0 (rolling) x64 (gdm3) Ubuntu ...
- pytorch--nn.Sequential学习
nn.SequentialA sequential container. Modules will be added to it in the order they are passed in the ...
- Python解析Linux命令行
写了个python脚本在linux需要传入参数使用,python参数传入有几个方法, 先用了Python中命令行参数的最传统的方法sys.argv linux cmd ~& python ma ...
- maven依赖和传递
compile (编译范围) compile是默认的范围:如果没有提供一个范围,那该依赖的范围就是编译范围.编译范围依赖在所有的classpath 中可用,同时它们也会被打包. 只有compile 才 ...
- redis问题与解决思路
问题现象: 集群状态 1主 2从,主没有开启bgsave,从开启bgsave.现象所有redis可以访问,进行操作.主不断开始bgsave 1从停止bgsave. 主日志报错# Connection ...
- Linux Shell编程中的几个特殊符号命令 & 、&& 、 ||
https://blog.csdn.net/hack8/article/details/39672145 Linux Shell编程中的几个特殊符号命令 & .&& . || ...