我正在使用Sitecore 7和Solr Search提供程序.我目前有网站设置来在发布项目时更新搜索索引.
我注意到,当CMS作者创建项目的不同版本然后将这些版本提交到索引中时,项目的先前版本不会从索引中删除,因此索引包含同一Sitecore项目的多个版本.
有没有人知道我可以更改的任何设置,以确保在添加新版本之前从索引中删除了以前的版本?
我尝试运行一些代码,如下所示,在发布之前从索引中删除项目,但索引上的Delete方法似乎没有删除任何内容.
var indexableItem = (SitecoreIndexableItem)item;
ContentSearchManager.GetIndex(index).Delete(indexableItem.UniqueId
Run Code Online (Sandbox Code Playgroud)
任何帮助非常感谢.
我最近一直在将内容和代码库从旧的Sitecore CMS 6.5安装(具有大量自定义)迁移到CMS 7.0的全新安装.
在原始站点中,Single-line text
已使用字段将任意Javascript呈现到页面中(用于跟踪).这工作正常,Javascript被渲染到页面中,未编码并按预期执行.
但是在新安装中我注意到内容现在是HTML编码的,这意味着它不会在我正在使用的Sitecore 7安装下执行.
在我的Sublayout中,我有一个像这样的FieldRenderer:
<sc:FieldRenderer ID="tracker" FieldName="Script" runat="server" />
Run Code Online (Sandbox Code Playgroud)
我不确定是否存在我未迁移的自定义/配置,或者这是否是Sitecore 7中引入的更改(可能出于安全原因).
任何人都可以对此有所了解吗?我是否需要创建自己的字段类型以允许所需的行为,或者我是否可以通过"开箱即用"字段类型执行此操作?
我发现包含'of','和','the'等的搜索不会返回结果,因为Lucene删除了停用词.因此,如果我搜索标题为"第一次世界大战的后果"的项目,我将得到零结果.
但是,如果我删除''和'',那么我正在寻找"第一次世界大战的后果".我会收到预期的文件.
ContentSearch API是否会从查询中删除停用词?这是一个可以配置Lucene删除的东西吗?或者我应该在构建查询之前删除这些停用词?
谢谢亚当
我一直在寻找Sitecore MVC但我仍然坚持如何处理我的页面有两个控制器渲染并且每个包含一个表单的情况.我希望各个控制器处理他们的HttpPost并在发布后返回整个页面.
我已经建立了一个简单的例子.两个控制器类似:
public class ExampleController : Sitecore.Mvc.Controllers.SitecoreController
{
public override ActionResult Index()
{
return View("Index");
}
[HttpPost]
public ActionResult Index(string formPostData)
{
ViewBag.SaveForLater = formPostData;
return Index();
}
}
Run Code Online (Sandbox Code Playgroud)
视图看起来像这样:
@using Sitecore.Mvc
@using (Html.BeginRouteForm(Sitecore.Mvc.Configuration.MvcSettings.SitecoreRouteName, FormMethod.Post))
{
@Html.AntiForgeryToken()
var term = ViewBag.SaveForLater as string;
if (!string.IsNullOrEmpty(term))
{
<p>Submitted: @term</p>
}
<p>
@Html.Sitecore().FormHandler("Example", "Index")
<input type="text" name="formPostData" placeholder="Enter something" />
<input type="submit" name="submit" value="Search" />
</p>
}
Run Code Online (Sandbox Code Playgroud)
使用此设置,两个表单都提交其数据,但返回的页面仅包含部分视图,而不是整个页面.
如果我替换该行@Html.Sitecore().FormHandler("Example", "Index")
,@Html.Sitecore().FormHandler()
则返回整个页面,但处理两个表单的后期操作 …
我正在尝试扩展自定义Sitecore命令以确定当前项目是否具有与特定模板ID匹配的父项目.
我知道查询理想情况下应该像./ancestor::*[@@templateid='{26710865-F082-4714-876B-D5E1F386792F}']
项目是上下文一样简单,或者/sitecore/content/home/full/path/to/the-item/ancestor::*[@@templateid='{26710865-F082-4714-876B-D5E1F386792F}']
不幸的是,项目路径包括需要像其一样进行转义的破折号/sitecore/content/home/full/path/to/#the-item#/ancestor::*[@@templateid='{26710865-F082-4714-876B-D5E1F386792F}']
.
但是,理想情况下我只想使用项目的完整路径,因为它可用item.Paths.FullPath
.
给定一个项目,编写包含它的完整路径的查询以及转义可能包含在内的任何破折号的最佳方法是什么?
我正在探索Sitecore.ContentSearch
Sitecore 7中新的"LINQ to Sitecore"API.我的理解是Sitecore建议在现有Sitecore.Search
API上使用新的LINQ API,但是,我很难执行最简单的查询.
以下面的搜索查询为例:"hello world"
.
使用Sitecore.Search
API,术语"hello world"通常将通过a QueryParser
,这将导致文档匹配单词"hello"或"world".包含这两个术语的文档的评分将高于仅包含一个术语的文档.
如何使用LINQ执行相同的查询?
这是我尝试过的:
var results = SearchContext.GetQueryable<MyResultItem>();
var terms = searchTerm.Split(' ');
// Not supported exception
results = results.Where(r => terms.Any(t => r.Content.Contains(r)));
// Close, but performs an "AND" between terms, and does not appear
// to score documents properly
foreach (var term in terms)
{
results = results.Where(r => r.Content.Contains(t));
}
Run Code Online (Sandbox Code Playgroud)
UPDATE
我确信我错过了一些非常简单的事情.当然,对于新搜索API的所有工作,这个简单的用例并没有被忽视......对吧?
作为一种解决方法,我尝试sitecore_web_index
使用现有的SearchManager 打开默认值,但是,这不起作用.
不幸的是,我不得不求助于现有的API,直到我能解决这个问题.我一定会用我的发现更新这个问题.
更新2
我找到了Sitecore.ContentSearch.Utilities.LinqHelper …
使用Sitecore 7,我的大多数查询字符串都成为自定义路由.例如:
OLD: /calendar?year=2013&month=7&day=14
NEW: /calendar/2013/7/14
Run Code Online (Sandbox Code Playgroud)
结果,我发现自己需要通过URL而不是查询字符串来改变我的渲染的HTML缓存.Sitecore是否提供了一种通过URL为MVC渲染变化缓存的便捷方式?
UPDATE
我发现所有MVC渲染都通过mvc.renderRendering管道,其中的缓存键在以下类中生成:
Sitecore.Mvc.Pipelines.Response.RenderRendering.GenerateCacheKey
通过重写GenerateKey(Rendering rendering, RenderRenderingArgs args)
此类的方法,我可以使用成功附加原始URL site.Request.FilePath
.我现在面临的问题是如何从渲染本身中提取此缓存设置?我想我需要在渲染上创建一个新的"VaryByUrl"缓存选项,但我不太确定.
更新2
我能够使用以下代码从渲染定义项中读取自定义字段.它工作,但它只查看定义项(不是演示文稿详细信息中的渲染的实际实例)
protected override string GenerateKey(Rendering rendering, RenderRenderingArgs args)
{
var key = base.GenerateKey(rendering, args);
if (rendering.RenderingItem.InnerItem.Fields["VaryByUrl"] != null)
{
var varyByUrl = ((CheckboxField)rendering.RenderingItem.InnerItem.Fields["VaryByUrl"]).Checked;
if (varyByUrl) key += GetUrlPart(rendering);
}
return key;
}
Run Code Online (Sandbox Code Playgroud) 我已经使用Sitecore版本7.1几个月了,并注意到Sitecore客户端在闲置约20分钟后让我退出.其他用户在内容编辑时也报告了这些问题.
我正在使用Windows 7,IIS 7,.NET framework 4.5.
我已经检查了错误日志中的任何内容,并且看不到明显的错误并且keepalive服务正在运行 - 我在日志中获取此信息:
ManagedPoolThread #14 12:47:24 INFO Scheduling.UrlAgent started. Url:http://testsite/sitecore/service/keepalive.aspx
Run Code Online (Sandbox Code Playgroud)
我在日志中得到了一些,但这可能是相关的吗?
WARN Memory usage exceeded the MemoryMonitor threshold
Run Code Online (Sandbox Code Playgroud)
当我离开它20分钟后回到现场.我在日志中得到这些条目.
952 15:08:28 INFO AUDIT (sitecore\grahams): Logout
952 15:08:28 WARN Protected page accessed with no current user
6440 15:08:28 INFO AUDIT (sitecore\grahams): Logout
6440 15:08:28 WARN Protected page accessed with no current user
Run Code Online (Sandbox Code Playgroud)
有没有看到过这种情况的身体,或者有任何迹象表明我如何能够达到这个目的?
提前致谢
伊恩
我有一个要求,我正在实施sitecore WFFM来创建一个表单.该页面包含带有Placeholder属性的HTML输入标记.我必须将WFFM SingleLineInput框渲染为具有占位符属性的输入标记.我该怎么办?
我知道这个SingleLineText
类是在Sitecore.Form.Web.UI.Controls
dll中定义的.
我通过Glass.Mapper创建一个Sitecore项目,如下所示:
var homeItem = sitecoreContext.GetHomeItem<HomeItem>();
// Create the car item
ICar car = sitecoreService.Create(homeItem.BooksFolder, new Car { Tires = 4, Seats=4});
Run Code Online (Sandbox Code Playgroud)
这是有效的,除了Car模板上的标准值没有应用 - 或者如果它们被新的Car属性立即覆盖.因此,如果Car对象的Color属性值为null,则将此null写入字段,而不是Car模板上标准值的"绿色"值.
我已经通过Glass.Mapper寻找一种明智的方法来做到这一点,但什么都没发现.有没有办法通过Glass.Mapper来做到这一点?
sitecore ×10
sitecore7 ×10
c# ×3
sitecore-mvc ×2
.net ×1
asp.net-mvc ×1
glass-mapper ×1
lucene ×1
sitecore7.1 ×1
solr ×1